授予对视图的读访问权限,但不授予其他数据库的基础表

时间:2016-08-08 12:26:40

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

我想为从另一个数据库连接2个表的视图授予用户读取权限。 我不想要:

  1. 授予他对表所在数据库的许可,或者将其作为用户添加到那里。
  2. 由于安全漏洞而使他成为视图/架构的所有者。
  3. 我不想先创建一个表,或者使用truncate创建一个hack表的变体,以及一个在触发器上插入数据的存储过程。
  4. 这可以以某种方式完成吗?也许有些东西我错过了,你们可能都知道。

    我已阅读这些帖子,但他们没有解决我的问题: Grant SELECT permission on a view, but not on underlying objects

    Grant Select on a view not base table when base table is in a different database

    https://msdn.microsoft.com/en-us/library/ms188676.aspx

    https://dba.stackexchange.com/questions/89632/sql-server-grant-select-access-to-a-user-in-a-view-and-not-in-its-tables

    谢谢

    修改 经过一些研究,我提出的最简单的解决方案是激活数据库中的cross database ownership chaining选项,我将放置视图并向用户授予读取权限。这可能与我试图避免的第二点相反。这是个好主意吗?

2 个答案:

答案 0 :(得分:1)

让他们登录同一服务器上的另一个数据库,并且只包含您的单个视图,并且视图指向您的安全数据库。除了具有视图的数据库之外,不要给该登录任何访问权限,只能读取对该单个视图的访问权限。显然,您必须完全限定表名(例如from SourceDB.dbo.SomeSecretTable)。

答案 1 :(得分:0)

我最终做了什么:

  1. 创建一个活动目录组。
  2. 将用户添加到AD群组。
  3. 为源数据库和目标数据库映射的AD组创建登录。
  4. 在目标数据库上添加用户,并仅为所请求的视图授予他权限。
  5. (可选)在所有数据库上添加了组以拒绝选择。
  6. 在没有AD小组的情况下无法找到原始问题的解决方案。