不显示不允许访问的数据库 - MS SQL Server 2014

时间:2018-03-15 08:25:43

标签: sql-server tsql

我有40个数据库附加到我的MS SQL Server 2014实例。 我需要创建一个只对1个数据库具有只读访问权限的新用户。他甚至看不到附加到我的实例的数据库的名称。

我已经应用了https://stackoverflow.com/a/10219004/4728323找到的解决方案但是这只提供了对1个数据库的只读访问权限。但是当使用该新用户登录时,我的其他数据库的名称是可见的(不允许访问,但数据库列表中可以看到数据库名称)。

2 个答案:

答案 0 :(得分:0)

https://technet.microsoft.com/en-us/library/ms189077(v=sql.105).aspx中所述,“默认情况下,VIEW ANY DATABASE权限被授予public角色。因此,默认情况下,连接到SQL Server实例的每个用户都可以看到实例中的所有数据库。“

要完成您想要的操作,您应该撤销VIEW ANY DATABASE角色的public权限:

REVOKE VIEW ANY DATABASE TO public

或者,您可以仅向该用户拒绝此权限:

DENY VIEW ANY DATABASE TO YourRestrictedUser

答案 1 :(得分:0)

这是可以实现的。

包含的数据库可从MS SQL 2012开始提供。

1-通过单击对象资源管理器中的服务器名称来更改MS SQL Server实例设置。

2-转到“属性”窗口中的“高级”选项卡。

3-将属性“Enable Contained Properties”设置为“True”,单击“Ok”。

4-现在通过右键单击数据库来转到所需数据库的属性。

5-到“选项”选项卡并将“遏制类型”设置为“部分”。

6-现在右键单击数据库中的用户节点并添加用户,选择“带密码的SQL用户”选项并创建新用户。

资料来源: https://www.mssqltips.com/sqlservertip/2428/sql-server-2012-contained-database-feature/