· Windows组
SQL Server级别主体
· SQL Server登陆
· 与一个Windows 登陆相匹配的SQL Server登陆
· 与一个证书相匹配的SQL Server登陆
· 与一个非对称密钥相匹配的SQL Server登陆
数据库级别的主体
· 数据库用户
· 与一个SQL Server登陆相匹配的数据库用户
· 与一个Windows 登陆相匹配的数据库用户
· 与一个证书相匹配的数据库用户
· 与一个非对称密钥相匹配的数据库用户
· 数据库角色
· 应用程序角色
· 公共角色
授权的另一个部分是你可以通过授予或拒绝授予权限来保护的对象。图4列出了SQL Server 2008中可保护的对象的层次。在服务器级别,你可以保护网络终端来控制通信路线进出服务器,还有数据库、绑定和角色以及登陆。在数据库和schema级别,事实上你可以创建的每一个对象都是可得到的,包括那些存在于schema之中的。
图 4在SQL Server 2008中的可得到的对象的层次
4.3 角色和权限
要想知道在SQL Server中可用的权限的数目,你可以调用fn_builtin_permissions系统功能:
以下是引用片段: SELECT * FROM sys.fn_builtin_permissions(default) |
这些是SQL Server 2005中的新的权限类型:
· CONTROL。 授予所有者想要的权限,这些权限可以有效地对这个对象授予所有定义的权限,并且所有对象在它的范围内,包括授予其它受权人任何权限的能力。CONTROL SERVER授予等价于sysadmin的权限。
· ALTER。授予权限来修改可得到的对象的任何属性,除了修改所属关系。固定地授予权限给相同范围内的ALTER、CREATE或 DROP 可得到的对象。例如,授予一个数据库上的ALTER权限,包括修改它的表。
· ALTER ANY <可得到的对象>。 授予权限以修改可得到的指定类型的对象。例如,授予ALTER ANY ASSEMBLY允许修改数据库中的任何.NET 集合,而在服务器级别授予ALTER ANY LOGIN 使得用户修改任何在服务器上的登陆。
· IMPERSONATE ON <登陆或用户>。 授予权限来模拟特定的用户或登陆。你在本篇文章的后面可以看到,这个权限对于为存储过程转换执行上下文是很必要的。你在一个批处理中进行模拟也需要这个权限。
· TAKE OWNERSHIP。 授予权限给受权人以使用可得到的所有权,使用ALTER AUTHORIZATION语句。
SQL Server 2008仍然使用类似的GRANT、DENY和REVOKE scheme来指派或拒绝给一个主体授予对一个可得到的对象的权限。现在ANT 语句涵盖了所有新的权限选项,例如授予的范围和是否主体可以授予这个权限给其它主体。SQL Server 不允许数据库交叉权限。为了授予这样的权限,你要在每一个数据库中创建一个复制的用户,并单独的给每一个数据库用户指派这个权限。
如同SQL Server 之前的版本一样,激活一个应用程序角色会在这个角色活动的期限内挂起其它的权限。然而,在SQL Server 2008和SQL Server 2005中,你具有卸载应用程序角色的能力。SQL Server 2000和之后版本的另一个不同之处是,当激活一个应用程序角色时,这个角色还会挂起任何服务器权限,包括public。例如,如果你授予VIEW ANY DEFINITION给public,应用程序不会受益于它。这是当在一个应用程序角色上下文中访问服务器级别的元数据时值得注意的。
注意 这个新的首选的应用程序角色选择将使用代码模块中的执行上下文。要获得更多的信息,请查看本文中的执行上下文一节。
授予一个特殊的权限可以传递其它暗含的权限。例如在一个schema 上的ALTER 权限暗含了更细粒度和