6 . 3 权限

6 . 3 权限
好的安全解决方案可以解答有关安全访问的3 个问题:访问者的身份,访问者可以执行
的操作,以及访问者己经执行的操作。在 MIT开发的Kerberos安全协议通过身份验证、授权 以及南核的过程来冋答这3 个问题。在活动目录森林中,SQL Server使用Microsoft实现的 Kerberos协议(以守卫地狱大门的长有三个头的狗命名)来对与活动目录帐户相关的登录名进 行身份验证。权限或授权在SQL Server中进行管理,可能在服务器或数据库对象上配置。 在对象或资源上定义权限的语句会定义一个权限状态、一个操作、将向哪个对象应用
权限和操作,以及权限和动作将应用于哪个安全主体。简单地说,它的形式如下所示:
PermissionState Action ON Object TO Principal

GRANT SELECT ON Person.EmailAddress TO Carol.
首先,您应该知道基本上有3 种权限状态:GRANT、GRANT_W_GRANT和 DENY。
此外,当某一主体没有显式定义的权限时,权限就被视为“已撤消的”。表 6-12显示了不
同的权限状态。

要控制权限状态,可以使用“对象资源管理器”或 Transact-SQL。用于控制权限状态
的 3 个命令为:GRANT> REVOKE和 DENY,表 6-13中对其进行了描述。

表 6-14列出了可以授予、拒绝或撤消的操作,以及可以授予权限的对象类型,并对每
种操作做了简要描述。

在了解了权限和权限状态后,让我们看一看可用的具体权限。SQL Server 2008使用一 个分层的安全模型,允许指定可在服务器、数据库、架构或者对象级别授予的权限。也可
以在表和视图内为选定列指派权限,
下一节将介绍不同的安全对象所在的作用域,以及如何使用它们来控制对数据的访
问。最佳实践建议使用基于角色的管理模型来简化创建安全环境的过程,这不仅针对数据
库和数据库服务器,也针对所有的操作。
在保护数据库服务器时,应使用两个关键策略:
• 在授予权限时应当采用的第一个策略为“最小特权原则”。这一策略规定只向用
户提供适当的权限进行操作。通过对数据库环境做出这样严格的限制,可以提供
一个能最小化服务器的受攻击面,同时又维护运行功能的解决方案。
• 第二个策略是深度防御。好的安全实现方案应在数据库的所有层上提供安全性。
这可能包括针对客户机和服务器之间的通信采用IPSec或 SSL、在身份验证服务器 上使用强密码加密以及在表或视图中配置列级权限。
在 评 估 SQL Server中不同的安全对象时,应该充分认识到在何处和如何应用权限,以 及如何利用分层模型本身的功能。应用于层次结构中较高级别的特定类别对象的权限可以
实现权限继承。例如,如 果 希 望 Ted能够更新Sales架构中每个表的任意行,可以使用以 下命令:
USE AdventureWorks2008 --First, create the user CREATE USER Ted WITH DEFAULT一SCHEMA =Sales; - - Next, Grant Ted update permissions on the Sales Schema GRANT UPDATE ON SCHEMA :: Sales to Ted;
GO
或者,如果想要Ted能够更新数据库中的任何对象,可以使用如下命令:
Use AdventureWorks2008 GRANT UPDATE TO Ted;
GO
快速査看一下安全层次结构中的不同层次。图 6-9给出了需要管理的不同级别的安全
性 。在 Windows作用域里,需要创建和管理Windows用户和活动目录安全主体(像用户和 组)、管 理 SQL Server所需的文件和服务,以及服务器行为本身。在服务器作用域里,需 要管理登录名、端点和数据库。在数据库作用域里,需要管理用户、密钥、证书、角色、
程序集以及其他数据库对象。架构也存在于这个作用域内,它们不是真正的对象,而是对
象容器。最后,在架构作用域里,有数据类型、XML架构集合和对象。这些对象包括表、
视图和存储过程等。

6 .3 .1 服务器权限
可以通过指定权限以及将被指派权限的登录名来管理服务器控制权限。例如,要将创
建数据库的权限授予登录名T ed,可以使用如下语句:
USE master GRANT CREATE ANY DATABASE TO Ted;
GO
如果还希望Ted有权限更改登录名及允许其他人更改登录名,可以使用如下语句:
USE Master GRANT ALTER ANY LOGIN TO Ted WITH GRANT OPTION;
GO
要删除Ted的更改登录名的能力,可以使用如下语句:
USE master EVOKE ALTER ANY LOGIN TO Ted CASCADE; GO
CASCADE关键字是必须的,因为您将GRANT_W_GRANT权限授予了 Ted。这确保
了不仅Ted不能更改任何登录名,被 Ted授予ALTER ANY LOGIN权限的人也不能更改。
如果没有使用GRANT OPTION,那么CASCADE关键字就是可选的。

注意,上面的例子撤消了一个之前授予Ted的权限。如果Ted是 securityadmin固定服 务器角色的一个成员,他仍然能够更改该服务器的登录名。
现在,如果想禁止Ted创建新数据库,可以使用DENY语句,如下所示:
USE master DENY CREATE ANY DATABASE TO Ted; GO
但是,对于一个登录名或用户是否能够执行某一特定的操作而言,DENY权限状态并
不总是终极答案。如果某登录名是sysadmin固定服务器角色的一个成员,该登录名就可以 完全控制SQL Server及其资源,而且阻止此登录名访问服务器上的对象没有太大意义。即 便是DENY权限语句在一个对象上成功执行,sysadmin角色仍然可以更改该对象上的权限。
如果在GRANT语句中指定了 GRANT OPTION,那么和REVOKE关键字一样,需要
确保使用CASCADE选项。
表 6-15列出的权限可以用来控制服务器,以及将所有权限一起授予服务器上任何一种
特殊类型的资源。可以使用如下语句控制访问:
{GRANT | REVOKE | DENY} action on object to principal WITH {options}

 

端点是服务器级别的对象,在授予、撤消或拒绝时,它使用的语法和服务器权限有一
些不同。下面的例子创建了一个名为ServiceBroker的端点,它将被用于一个Service Broker
应用程序(第7 章将介绍端点,第 19章将介绍Service Broker),然后将该端点的ALTER权
限授予Ted:
CREATE ENDPOINT ServiceBroker STATE =STARTED
AS TCP( LISTENER__PORT =5162 )
FOR SERVICE_BROKER (AUTHENTICATION=WINDOWS);
GO
USE master GRANT ALTER ON ENDPOINT :: ServiceBroker TO Ted;
GO
表6-16列出了可以授予端点的权限。

下一个可以设置权限的服务器级别对象是登录名。在登录名上设置权限的语法类似
于在端点上设置权限的语法。例如,要授予Carol更改Ted的登录名的权限,可以使用如 下语句:
USE master GRANT ALTER ON LOGIN : : Ted TO Carol WITH GRANT OPTION;
GO
表 6-17显示了如何控制登录名的这些权限

最后一个服务器级别的对象类型是数据库对象,与登录名和端点不一样,数据库权限
是为数据库用户指定的。这使得数据库本身能够保证安全。基于是否授予、拒绝或撤消,
可以使用一些附加选项。表6-18列出了可以在数据库对象上授予的权限。

猜你喜欢

转载自www.cnblogs.com/zhouwansheng/p/9358847.html