我有40个数据库附加到我的MS SQL Server 2014实例。 我需要创建一个只对1个数据库具有只读访问权限的新用户。他甚至看不到附加到我的实例的数据库的名称。
我已经应用了https://stackoverflow.com/a/10219004/4728323找到的解决方案但是这只提供了对1个数据库的只读访问权限。但是当使用该新用户登录时,我的其他数据库的名称是可见的(不允许访问,但数据库列表中可以看到数据库名称)。
答案 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/