通过在一个对象(例如视图)上设置权限,所有权链接能够管理对多个对象(例如多个表)的访问。它是一种用于控制数据访问的强大技术,允许创建视图和/或存储过程定义的“安全层”,这样授权用户可以访问视图或执行存储过程,而不能直接访问基表。通过这种方式,所有权链大大简化了安全模型。这种技术在以前的版本中使用过,现在在SQL Server 2005中使用模式对象也支持这种技术。
规则是,如果视图、存储过程或函数中引用的所有数据库对象都属于同一用户,那么SQL Server只检查最高级别的权限。因为所有对象都有相同的所有者,所以SQL Server假设所有者在顶级对象上设置权限时知道它们在做什么。这是一个完整的所有权链,是一件好事。它还具有创建安全层的效果,因为底层数据库对象受到保护,调用用户无法访问。保证所有权链不间断的一种简单方法是让同一个用户(最好是数据库所有者)创建数据库中的所有对象。相反,如果任何一个对象是由其他用户拥有的,我们就会有一个破裂的所有权链(不好),SQL Server将被迫检查所有级别的权限,因此访问将被拒绝,除非我们设置所有这些级别的权限。这不仅难于管理,而且还开放了对我们想要保护的低级对象的访问。
随着2005年Schema对象的引入,对象的限定名称中不再明显显示所有者,但是所有权链仍然适用。如果您拥有一个Schema,那么您实际上就拥有了其中包含的所有对象。同样,只要所有对象都属于同一个所有者,我们就有了一个完整的所有者链,创建安全层是小菜一碟。
干杯
布莱恩
最近的帖子: