【发布时间】:2016-12-14 05:29:13
【问题描述】:
我想授予用户对从另一个数据库连接 2 个表的视图的读取权限。 我不想:
- 授予他对表所在数据库的权限或将他添加为那里的用户。
- 由于安全漏洞,让他成为视图/模式的所有者。
- 我不想先创建一个表,或者使用
truncate和一个在触发器上插入数据的存储过程的hack 表的变体。
这可以以某种方式完成吗?也许我错过了一些东西,你们可能知道。
我已经阅读了这些帖子,但它们并没有解决我的问题: 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
谢谢
编辑:
经过一番研究,我想出的最简单的解决方案是激活数据库上的cross database ownership chainingoption,我将在其中放置视图并向用户授予读取权限。这可能与我试图避免的第二点形成对比。这是个好主意吗?
【问题讨论】:
-
我在实践中也遇到了同样的情况。我不知道您将如何将数据从视图传递给用户 - 我们使用了网页,该网页在 SQL Server 登录下连接到数据库,该网页只有对视图和所有相关表的读取访问权限。查看页面的访问权限由要求 Windows 身份验证 (AD) 的 IIS 服务器控制。
-
用户将使用excel直接连接到数据库。你知道不使用任何网页或除sql server management studio之外的其他软件的方法吗?
-
不幸的是,起初我认为 Excel 是一种交付数据的工具,但还没有找到任何足够安全的方法来实现它。这里决定通过我一直在运行的 IIS 服务器提供它。我认为您可以查看 SSRS,我个人没有使用它,但我的同事使用它 - 它可能是您问题的解决方案。您可以制作用户可以查看的报告,但他们无法通过此报告获取/更改数据。
-
CM2K 一种解决方法是通过链接服务器将视图放在单独的服务器上,并授予他们对该视图的 SELECT 权限。
-
您在枚举列表中的第一点使这变得困难。为了检查权限,数据库需要一个主体来检查。如果您不将用户添加到目标数据库中,则无需检查。
标签: sql-server database sql-server-2008 sql-server-2012 schema