首页 > 代码库 > Chapter 2 User Authentication, Authorization, and Security(6):服务器权限授予粒度

Chapter 2 User Authentication, Authorization, and Security(6):服务器权限授予粒度

原文出处:http://blog.csdn.net/dba_huangzj/article/details/38867489,专题目录:http://blog.csdn.net/dba_huangzj/article/details/37906349

未经作者同意,任何人不得以“原创”形式发布,也不得已用于商业用途,本人不负责任何法律责任。

        前一篇:http://blog.csdn.net/dba_huangzj/article/details/38844999

 

前言:

 

在SQL Server 2005之前,只有通过添加登录到固定服务器角色,才能获取管理权限。SQL Server 2005引入了一套服务器粒度权限,允许你定义一套严密的权限给服务器级别的登录。

 

实现:

 

1. 打开登录的属性窗口,选择【安全对象】,然后可以在这里显式授予服务器权限,也可以查看当前有效的权限。

image

image

2. 如果想用T-SQL实现,可以用下面的语句:

GRANT <SERVER PERMISSION> TO <login>; 
--例子:: 
GRANT ALTER ANY LOGIN TO Fred;


注意,不能对sa和你自己进行grant/revoke/deny操作。

 

3. 可以使用下面语句查看已经被授予的服务器权限:

SELECT * FROM sys.server_permissions;
--例子:查看某个登录或服务器角色所拥有的服务器已授予权限:
SELECT p.class_desc, p.permission_name, p.state_desc 
FROM sys.server_permissions p 
JOIN sys.server_principals s ON  p.grantee_principal_id = 
s.principal_id 
WHERE s.name = ‘Fred‘;


原理:

 

如果需要授予相同的权限给多个登录,考虑创建一个用户自定义服务器角色(2012引入,将在后续章节介绍)。禁用sysadmin成员的权限是无效的,因为权限检查会忽略这部分内容。

 

更多:

 

允许登录运行SQL Trace:

 

SQL Trace是一个服务器功能,通常使用SQL Profiler工具定义和执行,在SQL Server 2005之前,仅sysadmin服务器角色的成员才能运行Trace,从2005开始,可以使用下面语句对非sysadmin登录授权运行:

GRANT ALTER TRACE TO [Fred];


对于一些敏感信息如密码,SQL Trace会自动屏蔽,比如:

CREATE LOGIN Fred WITH PASSWORD = ‘6eRt5(K%yTR‘;
--会在SQL:BatchCompleted事件中显示为:
--*CREATE LOGIN-------------------------------


 

除了SQL Trace,2008引入的扩展事件(Extended Events,微软希望用这个功能替代SQL Trace),也需要授予ALTER ANY EVENT SESSION权限。

 

这里有一个PDF文档,描述了2008R2和2012的服务器和数据库级别权限图:

http://social.technet.microsoft.com/wiki/cfs-file.ashx/__key/communityserver-wikis-components-files/00-00-00-00-05/5710.Permissions_5F00_Poster_5F00_2008_5F00_R2_5F00_Wiki.pdf

但是要提醒一下,这个是海报级别的,看起来比较费劲。


下一篇:http://blog.csdn.net/dba_huangzj/article/details/38895357

Chapter 2 User Authentication, Authorization, and Security(6):服务器权限授予粒度