未经作者同意,任何人不得以“原创”形式发布,也不得已用于商业用途,本人不负责任何法律责任。
前一篇:http://blog.csdn.net/dba_huangzj/article/details/38844999
前言:
在SQL Server 2005之前,只有通过添加登录到固定服务器角色,才能获取管理权限。SQL Server 2005引入了一套服务器粒度权限,允许你定义一套严密的权限给服务器级别的登录。
实现:
1. 打开登录的属性窗口,选择【安全对象】,然后可以在这里显式授予服务器权限,也可以查看当前有效的权限。
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://blog.csdn.net/dba_huangzj/article/details/38895357