在 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 <x> FOR LOGIN <x>;
在您希望他们访问的数据库中,DROP USER <x>;
在创建它们但您现在想要拒绝的数据库中(如果他们有自己的拥有自己的架构或创建了任何对象)。当然,这并不涉及他们在该数据库中实际拥有的权限,但应该是一个开始。从我有限的测试看来,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 个数据库上授予视图的主要内容,如果未能解决你的问题,请参考以下文章
授予对 Teradata 中所有表和视图(包括 dbc)的选择和读取权限