隔离用户帐户和数据库对象
角色和Schemas
角色允许您将用户分组,从而更易于将安全设置应用到数据库对象或者服务器。您可以分配权限给角色,然后将用户添加到角色或者从角色中删除用户来分配或回收权限。SQL Server 2005通过schema将此概念扩展到数据库对象上。
SQL Server 2005打破了用户和他们所拥有的数据库对象之间的联系,用户管理工作也因此更加简便。用户不再直接拥有数据库对象,而是由schema拥有数据库对象,然后用户和schema进行关联。删除用户时不需要改变数据库对象的所有者关系链,因为用户不再拥有对象—对象由schema拥有。通过Schema将数据库对象分组,当需要在对象上应用权限和所有者关系时,就可以将这些对象看作一个单元来进行配置,如图3所示。这使安全性更易于管理,因为可以将角色或用户直接应用到schema。例如,通过一个Transact-SQL语句就可以将某个schema中所有存储过程的执行权限分配给一个角色。这样更便于对拥有众多对象的数据库进行安全管理。多个用户可以管理一个schema,进而管理schema中的所有对象,而且无需为用户分配访问单个对象的权限。

图3:设置schema的权限
使用最小权限执行
一个好的安全策略其特点之一就是授予用户完成任务所需的最小权限。SQL Server 2005还提供的一个新的强大特性就是能够以其他用户身份执行存储过程。在Oracle中该特性只能通过写一些PL/SQL才可用,而且操作相当困难。在SQL Server 2005中可以使用EXECUTE AS执行存储过程或者用户定义函数。SQL Server 2005还允许一个例程执行时从例程中改变其所处的安全上下文环境。用户在执行包含了EXECUTE AS的存储过程或者函数之前,必须拥有该存储过程或函数的执行权限。例如,可以使用EXECUTE AS支持SQL Server所有者关系链。SQL Server所有者关系链允许您在存储过程、视图、或者函数而不是底层表上分配权限。只要数据库对象的所有者和表的所有者一致,就可以执行该对象。如果所有者不同,那么就需要在表上显式地授予用户权限,这会造成潜在的安全隐患,因为用户被授予了过多的权限。使用EXECUTE AS子句就可以克服存储过程以及用户定义函数所有者关系链断裂的问题。EXECUTE AS还可以作为将粒度化权限应用在数据库上的一种手段。