【问题标题】:Cross-schema view query possible with different access rights?可以使用不同的访问权限进行跨模式视图查询吗?
【发布时间】:2013-07-23 23:53:11
【问题描述】:

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

假设我有两个架构:UserSchemaTableSchema

TableSchema 包含 2 个表,并且该模式只能由管理员用户访问,用于读取、更新等。

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

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

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

【问题讨论】:

  • 我很确定您需要授予“所有表”的权限,即视图和视图中使用的表。或者您可以使用存储过程并更改其执行上下文来解决此问题。

标签: sql-server database view schema access-rights


【解决方案1】:

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

查看以下链接了解更多详情:

Ownership Chains

例如,这将起作用:

  • UsersSchema 所有者 dbo

  • TableSchema 所有者 dbo

  • User1 授予对 UsersSchema 的选择权限,拒绝对用户架构的选择权限 表格架构

  • view1 位于 UsersSchema 中(从 Table1 中选择)

  • table1 存在于 TableSchema 中

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

SQL 服务器然后检查谁拥有视图,dbo SQL 服务器然后检查谁拥有该视图想要从中获取数据的表,以及 dbo(因为 dbo 拥有这两个模式) 由于所有权链未中断,SQL 服务器现在不会检查 user1 对 table1 的权限并返回数据,即使您拒绝对 table1 或 TableSchema 上的 user1 进行选择。

如果 user1 尝试直接访问 table1,他仍然会被拒绝访问 table1。

【讨论】:

  • 非常好,正是我需要的。谢谢你的回答:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多