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

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

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

前言:

从SQL Server 2012开始,不再限制于使用固定服务器角色,可以创建自定义的角色,允许你预设特殊权限。

实现:

1. 在SSMS中,选择【安全性】节点,右键【服务器角色】节点,选择【新建服务器角色】:

2. 输入新角色名

3. 可以对下面对象类型授权:

安全对象 描述
Endpoints(端点) 查看定义、更改、接管所有权、控制、连接
Logins(登录名) 查看定义、更改、控制、模拟
Servers(服务器) 服务器级别权限
Availability Groups(可用性组) 可用性组的管理权
Server Roles(服务器角色) 允许管理其他用户自定义的服务器角色

比如创建一个服务器角色允许咨询人员进行性能调教,可以使用下面代码实现:

CREATE SERVER ROLE PerformanceTuning;
GRANT VIEW SERVER STATE TO PerformanceTuning;
GRANT ALTER TRACE TO PerformanceTuning;
GRANT ALTER ANY EVENT SESSION TO PerformanceTuning;
GRANT VIEW ANY DEFINITION TO PerformanceTuning;
GRANT VIEW ANY DATABASE TO PerformanceTuning;
GO
ALTER SERVER ROLE PerformanceTuning ADD MEMBER Fred;

属于这个角色的登录名比如Fred,具有运行SQL Trace(Profiler)、查询DMV、扩展事件和查看数据和代码定义的权限。

原理:

用户自定义服务器角色通过预设的权限,为属于这个角色下的所有登录名授予特定的权限。对登录帐号的CONTROL权限不允许不使用OLD_PASSWORD子句来修改密码,仅CONTROL SERVER权限是被允许的。

可以用下面语句查看你可以添加的到角色的服务器权限:

SELECT *
FROM sys.fn_builtin_permissions('SERVER')
ORDER BY permission_name;

如果需要查看一个登录名是否属于某个服务器角色的成员,可以使用下面语句实现:

-- 当前登录名是否属于processadmin的成员?
SELECT IS_SRVROLEMEMBER('processadmin');
-- 登录名Fred是否是 'endpoints_admin' 用户自定义服务器角色的成员?
SELECT IS_SRVROLEMEMBER('endpoints_admin', 'Fred');

更多:

DDL触发器事件允许监控服务器角色成员的更改,下面是一个例子,把服务器角色修改记录存储在一个名为dbo.auditServerRole的表中,并且这个表在AuditDB下(预先创建),在第七章会详细介绍,这里仅演示:

CREATE TRIGGER serverRoleMembershipChange
ON ALL SERVER
FOR ADD_SERVER_ROLE_MEMBER, DROP_SERVER_ROLE_MEMBER
AS BEGIN
    INSERT INTO auditdb.dbo.auditServerRole (when, who, what)
    SELECT CURRENT_TIMESTAMP, SYSTEM_USER,
    EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)
[1]','nvarchar(max)') ;
END;

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

最新文章

  1. [LeetCode] Matchsticks to Square 火柴棍组成正方形
  2. ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(3)修改资料、修改密码
  3. C#连接Sql Serve数据库及增,删,改操作
  4. Codeforces 607B Zuma(区间DP)
  5. Daily Scrum 11.2
  6. homework-06
  7. C# 的可空合并运算符(??)到底是怎样的宝宝?
  8. PHP那些最好的轮子
  9. Java实现单向链表反转
  10. FFmpeg的H.264解码器源代码简单分析:熵解码(Entropy Decoding)部分
  11. vscode下运行matlab记录
  12. Qt5.10.1 在windows下vs2017静态编译
  13. C# 操作windows服务[启动、停止、卸载、安装]
  14. C/JS_实现冒泡排序
  15. properties文件读取工具类
  16. Unity3D学习笔记(二十八):Editor
  17. Cracking The Coding Interview 3.5
  18. memcached-session-manager配置
  19. Python 之各种推导式玩法
  20. java生成字符串的MD5值

热门文章

  1. Linux下SonarQube代码质量平台的安装和使用方法
  2. Python Selenium 之数据驱动测试
  3. C++框架_之Qt的信号和槽的详解
  4. Linux下常用的配置
  5. ACM Strange fuction
  6. Node.js 系统
  7. 自定义Retrofit转化器Converter
  8. OpenCV 2.x/3.x 随机初始化矩阵
  9. Android隐式启动Activity可能存在的坑
  10. iOS关于时间的处理