SQL Server 2012中引入了两项功能,即创建用户自定义服务器角色和分配服务器级别的权限。本文为初级DBA给出了一个用户自定义服务器角色的示范用例。
用户自定义服务器角色是用SQL Server Management Studio(SSMS)和T-SQL代码创建的。
你可以添加服务器级别的主体,例如为在SQL Server 2012及后续版本中的用户自定义服务器角色创建SQL Server登录,Windows账户和Windows分组。然后,你可以显式指定这些成员的权限。
可以为一个用户自定义服务器角色赋予哪些权限?
执行以下查询可以列出在SQL Server 2012及后续版本中授予一个用户自定义服务器角色的权限。
USE master
GO
SELECT * FROM sys.fn_builtin_permissions(DEFAULT)
WHEREclass_desc IN ('ENDPOINT','LOGIN','SERVER','AVAILABILITY GROUP','SERVERROLE')
ORDERBY class_desc, permission_name
GO
创建SQL Server登录 建立一个新的用户自定义服务器角色的首要步骤是创建或添加一个新的登录,然后它便可以分配给一个新用户自定义服务器角色。你可以通过执行下面的T-SQL查询来创建一个新的SQL Server登录。
USE master
GO
CREATE LOGIN [Brinto] WITH PASSWORD = 'Brint0@1234',
DEFAULT_DATABASE= [master],
CHECK_EXPIRATION=OFF,
CHECK_POLICY=OFF
GO
在SSMS中创建用户自定义SQL Server角色
在登录成功创建之后,接下来的步骤就是用SQL Server Management Studio(SSMS)或T-SQL代码创建一个用户自定义SQL Server角色。用SSMS连接至一个SQL Server2012实例并打开ObjectExplorer。
展开Security文件夹并右击ServerRoles文件夹,然后从下拉菜单中选择New Server Role… 。
在New Server Role窗口的General页面中,输入合适的服务器角色名称。在Owner方框中,输入将要拥有此NewServer Role的服务器主体。在Securable下面,选择一个或多个服务器级别的安全对象。在选择了一个安全对象后,你便可以赋予或收回此安全实体的权限。
在Permissions: Explici下的方框中,勾选复选框为已选的安全实体的服务器角色赋予GRANT,WITH GRANT 或 DENY权限。在这种情况下,我为此服务器角色选择了ALTERTRACE,CONNECT SQL,CREATE ANY DATABASE,VIEWANY DATABASE,VIEW ANY DEFINITION和VIEWSERVER STATE权限。
图1: 在General页面上为新服务器角色选择权限 在Members页面上,用Add… 按钮来为此新服务器角色添加SQL Server登录,Windows账户以及Windows群组。在这个演示中,我选择新添加的SQL Server登录。
图2: 用Members页面为新服务器角色添加新的角色成员。
在Members页面上,勾选复选框以便让新的用户自定义服务器角色成为固定服务器角色的一个成员。最后,点击OK在SQL Server 2012中完成创建一个用户自定义服务器角色。
图 3: 在Members页面上创建用户自定义服务器角色。
在成功创建用户自定义服务器角色之后,就可以在Server Roles下找到它了。
图 4: 新的服务器角色在Server Roles文件夹下。
用T-SQL查询创建用户自定义SQL Server角色 要用T-SQL创建一个用户自定义SQL Server角色,需执行以下T-SQL代码。
USE [master]
GO
CREATE SERVER ROLE [JuniorDBA] AUTHORIZATION [sa]
GO
ALTER SERVER ROLE [JuniorDBA] ADD MEMBER [Brinto]
GO 用T-SQL查询为用户自定义SQL Server角色授予权限 执行以下T-SQL代码为以上用T-SQL代码创建的用户自定义服务器角色添加相应权限。我选择给此示例角色赋予ALTERTRACE,CONNECT SQL,CREATE ANY DATABASE,VIEWANY DATABASE,VIEW ANY DEFINITION和VIEWSERVER STATE等权限。
USE [master]
GO
GRANT ALTER TRACE TO [JuniorDBA];
GRANT CONNECT SQL TO [JuniorDBA];
GRANT CREATE ANY DATABASE TO [JuniorDBA];
GRANT VIEW ANY DATABASE TO [JuniorDBA];
GRANT VIEW ANY DEFINITION TO [JuniorDBA];
GRANT VIEW SERVER STATE TO [JuniorDBA];
验证权限 通过在一个新建的查询窗口中执行下面的T-SQL查询来快速验证为新创建的服务器角色分配的权限。因为用户有VIEW SERVERSTATE权限,所以你可以从动态管理视图中获取结果。
SELECT SUSER_SNAME()
EXECUTE AS LOGIN = 'Brinto' SELECT SUSER_SNAME()
SELECT * FROM sys.dm_os_windows_info
REVERT
SELECT SUSER_SNAME()