在 1 个数据库上授予视图

Posted

技术标签:

【中文标题】在 1 个数据库上授予视图【英文标题】:GRANT VIEW on 1 database 【发布时间】:2011-08-02 15:31:57 【问题描述】:

在执行以下代码后,是否有任何解决方法可以授予特定数据库的视图?,我使用的是 MS SQL 2008 RC2。

REVOKE VIEW ANY DATABASE FROM <login>;

谢谢

【问题讨论】:

【参考方案1】:

据我所知,REVOKE 获胜,因此您可能需要授予 VIEW ANY,然后单独拒绝所有其他数据库。这当然不那么有趣,但您可以自动执行此操作,而无需一一进行。

【讨论】:

感谢您的回复。您是否知道用于授予/拒绝单个数据库视图的 sql 语句,因为这实际上是我正在寻找的? 应该只是 CREATE USER &lt;x&gt; FOR LOGIN &lt;x&gt;; 在您希望他们访问的数据库中,DROP USER &lt;x&gt;; 在创建它们但您现在想要拒绝的数据库中(如果他们有自己的拥有自己的架构或创建了任何对象)。当然,这并不涉及他们在该数据库中实际拥有的权限,但应该是一个开始。从我有限的测试看来,db 级用户将覆盖REVOKE ANY(并且GRANT ANY 胜过特定数据库中的缺席),但您需要在您的系统中进行测试。 我的场景如下。我在服务器级别有 2 个数据库和一个 TestUser。我已经执行了REVOKE VIEW ANY DATABASE FROM TestUser。现在,当用户使用管理工作室登录时,他没有任何可见的数据库(这很好)。我已将此用户添加到我的一个数据库下,并希望使该数据库对用户可见,但我被困在这里,因为在连接 sql managment studio 时找不到使单个数据库可见的命令。 看看这个链接是否有帮助。我实际上写了这个并且完全忘记了:sqlblog.com/blogs/aaron_bertrand/archive/2009/07/19/…如果你想要更好地支持这个场景,请投票给connect.microsoft.com/SQL/feedback/…和connect.microsoft.com/SQLServer/feedback/details/273830/…

以上是关于在 1 个数据库上授予视图的主要内容,如果未能解决你的问题,请参考以下文章

第四十八章 SQL命令 GRANT(二)

授予对 Teradata 中所有表和视图(包括 dbc)的选择和读取权限

如何通过 API(补丁)授予对 BigQuery 数据集的新视图访问权限

限制对 Redshift 表的访问,仅授予对视图的访问权限

如何将视图的所有权限授予任意用户

SQL Server - 如何将所有数据库的读取权限授予登录名?