sql - 所有权链接在同一数据库中的两个模式之间不起作用

标签 sql sql-server sql-server-2008 database-schema

我在 SQL Server 2008 R2 上有一个数据库,它有两个模式,默认的 dbo 和另一个称为 Webapps 的模式,这两个模式都归 dbo 所有。

我在 Webapps 模式 (Webapps.getInventory) 中创建了一个 View ,它只是从 dbo.Inventory 中进行简单的选择。然后我创建了一个名为 Webuser 的用户,该用户对 Webapps 架构具有 SELECT 权限。

Webuser 可以登录并查看 Webapps.getInventory View ,但是当它尝试从中选择时出现此错误:

The SELECT permission was denied on the object 'Inventory', database 'Database', schema 'dbo'.

我在想,因为这两个模式都归 dbo 所有,所以所有权链接将允许执行查询。我似乎能够让它工作的唯一方法是授予 Webuser 对 dbo 的权限,或者将其添加到整个数据库的 db_datareader 角色。在我看来,如果用户必须具有对数据库中其他所有内容的读取能力,那么尝试将内容分离到 Webapps 模式中的目的似乎就失败了。

那么,我是否忽略了设置中的某些内容?还是 Webuser 必须拥有两种模式的权限才能使此 View 工作是否正确?

最佳答案

Eric 我认为您正在“跳过”所有权链中的一个步骤... 有(另一)看这篇文章:Ownership Chains这是一个片段“所有权链通过设置对一个对象(例如 View )的权限来管理对多个对象(例如多个表)的访问。”

链接不关心两个模式都属于 dbo,而是关心每个登录/用户对对象具有适当的权限。因此,如果您有一个由 dbo 拥有的表,该表包含在您已授予对 webapps 架构的选择访问权限的 View 中,那么具有访问权限的用户应该可以访问该表。所有权链不会比他们可以针对 View 进行选择这一事实进行更深入的检查,无需评估他们是否可以针对表进行选择。

长话短说,如果您将 dbo.table 包装在 webapps 具有选择权限的 View 中,那么您应该很好。

希望对您有所帮助...

关于sql - 所有权链接在同一数据库中的两个模式之间不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19384019/

相关文章:

android - 删除在另一个表中没有关联行的行

java - 如何使用 Hibernate 检索 SQL 错误消息

mysql - 从字符串 MySQL 中选择前 4 个数字

sql - SSMS 表设计器模式下哪里可以设置检查约束

sql - 使用从表中收集的值创建 SQL INSERT 脚本

sql - 可在 SQL Server 和 MS Access 中使用的 COALESCE、IFNULL 或 NZ() 函数

sql-server - SQL 中的 Case 语句使用同一语句中的其他选定列

sql-server - 用于备份 SQL Server 数据库的简单命令行程序或脚本是什么?

c++ - 如何与 SQL Server 2008 建立稳定连接并使用 C++ 编写我的第一个 CRUD 操作

Sql Server 确定性用户定义函数