数据库管理:SQL Server 2008安全性探讨
Ruby 发表于:12年09月06日 11:18 [转载] DOIT.com.cn
固定数据库角色
每个SQL Server数据库都有一系列固定数据库角色,可用于在必要时把权限委托给用户。和固定服务器角色一样,对于固定数据库角色来说,唯一可以改变的就是成员资格。用户定义的数据库角色对管理权限和对数据库中的资源的访问提供了更多的控制。在使用基于角色的安全模型时,可能京城发现内置主体(比如 Windows中的组或SQL中的角色)提供了过得uod访问权限,或者没有提供足够的权限。在这种情况下,可以创建用户定义的角色,控制整个一组用户对安全对象的访问。
- USE AdventureWorks2008 CREATE ROLE SalesStaff AUTHORIZATION Carol; GO
- USE AdventureWorks2008 ALTER ROLE SalesStaff WITH NAME=SalesStaffRole; GO
- USE AdventureWorks2008 DROP ROLE SalesStaffRole; GO
- USE AdventureWorks2008 EXEC sp_addrolemember 'db_datareader','Carol'; GO
- USE AdventureWorks2008 EXEC sp_droprolemember 'db_datareader','Carol'; GO
另外一种可以用来帮助保护数据库环境的角色是应用程序角色。应用程序角色和标准的角色类型截然不同,他们没有成员,可以而且应该被设置为使用密码进行身份验证。当运行一个特定的应用程序的所有用户必须采用同样的数据访问时,通常使用应用程序角色。应用程序可以不需要提示用用提供用户名和密码就实例化应用程序角色,从而避免了依赖于个人用户是否拥有适当的访问权限让应用程序正常工作。
- USE AdventureWorks2008 CREATE APPLICATION ROLE SalesApp WITH PASSWORD='P@www1rd',DEFAULT_SCHEMA=Sales; GO
- USE AdventueWorks2008 GO
- DECLARE @cookie varbinary(8000);
- EXEC sp_setapprole 'SalesApp','P@ssw0rd',@fCreateCookie=true,@cookie=@cookie OUTPUT; GO
- SELECT USER_NAME();
一旦执行了上述脚本,该连接执行的所有活动都将在该应用程序角色下操作。当关闭连接时,应用程序角色会话也终止。通过ALTER APPLICATION ROLE语句,可以更改应用程序角色的名称、密码和默认架构。
- USE AdventureWorks2008 ALTER APPLICATION ROLE SalesApp WITH NAME=OrderEntry,PASSWORD='newP@ss0rd'; GO
- USE AdventureWorks2008 DROP APPLICATION ROLE OrderEntry; GO
权限
在对象或资源上定义权限的语句会定义一个权限状态、一个操作、奖项哪个对象应用权限和操作,以及权限和动作将应用于哪个安全主体。首先,需要知道基本上有三种权限状态:GRANT,GRANT_W_GRANT和DENY。用于控制权限状态的三个命令为GRANT,REVOKE和DENY。
SQL Server 2008使用一个分层的安全模型,允许指定可在服务器、数据库、架构或者对象级别授予的权限。也可以在表和视图内为选定列指派权限。在保护数据库服务器时,应使用两个关键策略:在授权时应当采用的第一个策略为”最小特权原则“,这一策略规定只向用户提供适当的权限进行操作。通过对数据库环境做出这样严格的限制,可以提供一个能最小化服务器的受攻击面,同时又维护运行功能的解决方案。第二个策略是深度防御。好的安全实现方案应在数据库的所有层上提供安全性。这可能包括针对客户机和服务器之间的通信采用IPSec或SSL,在身份验证服务器上使用强密码加密以及在表或视图中配置列级权限。