具有不同访问权限的跨架构视图查询可能吗?

Dar*_*ous 4 database sql-server schema view access-rights

我目前使用的是 SQL Server 2012,我有一个关于具有不同访问权限的跨架构访问的问题:

假设我有两个模式:UserSchemaTableSchema

TableSchema 包含 2 个表,并且此架构只能由管理员用户访问,用于阅读、更新等。

UserSchema 可供具有 SELECT 权限(或您称之为阅读权限的任何内容)的用户访问。此架构包含一个视图,该视图应该从 TableSchema 中的两个表中选择数据。

我的想法是 UserSchema 的用户应该只能访问 UserSchema,但不能访问 TableSchema。这会起作用吗?还是因为没有直接从表中读取数据的权限而无法查询视图?是否有一个很好的解决方案来解决这个问题,或者我是否必须忘记这个想法并让用户阅读 TableSchema ?

主要问题的答案可能很明显,但我在尝试 google 时似乎发现了一些不同的答案,所以这或多或少是一个确认或反驳这个想法的“是或否”问题。

ste*_*ary 5

只要每个模式的所有者都相同,这种方法就可以正常工作,因为所有权链是不间断的。

有关更多详细信息,请参阅以下链接:

所有权链

例如,这将起作用:

  • 用户架构所有者 dbo

  • TableSchema 所有者 dbo

  • User1 授予对 UsersSchema 的选择权限,拒绝对 TableSchema 的选择权限

  • view1 位于 UsersSchema 中(从表 1 中选择)

  • table1 位于 TableSchema 中

user1 执行 select * from UsersSchema.view1 - SQL 服务器检查 user1 是否有权从视图中进行选择,他所做的一切都很好

SQL server 然后检查谁拥有视图,dbo SQL server 然后检查谁拥有视图想要从中获取数据的表,还有 dbo(因为 dbo 拥有两个架构)由于所有权链是完整的,SQL server 现在不会费心检查什么user1 对 table1 具有的权限并返回数据,即使您拒绝对 table1 或 TableSchema 上的 user1 进行选择。

如果他试图直接访问 table1,用户 1 仍然会被拒绝访问 table1。