我想知道是否有任何方法可以让用户只查看他们有权访问的特定数据库。例如。假设我们有一个 alwaysOn,其中只有一个本地数据库和 10 个添加到 AO 中的数据库。用户需要对 AO 中添加的 10 个数据库之一的读取权限。但是,当授予用户对该数据库的权限并连接到 AO 时,他可以查看每个数据库,但当然只能访问他有权访问的那个。如果 AO 在本地数据库所在的位置处于活动状态,他也会看到那个。
我们已经尝试了一些事情,但没有成功,从我们一直在阅读的内容来看,除非用户被授予 dbowner 权限,否则它似乎不是一种方法。
有人有什么想法吗?
默认情况下,登录可以查看服务器上的所有数据库。
您可以
DENY VIEW ANY DATABASE TO [your login or serverrole];
,之后登录只能看到他有权访问的数据库。要验证登录名可以看到哪些数据库,请在以管理用户身份连接时尝试以下操作:
权限分配给
VIEW ANY DATABASE
服务器级主体(登录,即不是用户,它是数据库级主体),因此,您需要将其应用于每个可用性组副本。我建议您对服务器角色而不是单个用户应用(拒绝)此权限,以使其易于管理。有关该主题的更详细阅读:
https://www.mssqltips.com/sqlservertip/3399/verify-the-databases-a-sql-server-login-can-see--and-why/
从 SQL Server 2012 开始,您可以使用包含的数据库,如下所述:SQL Server 2012 Contained Database Feature
无需创建登录名,它是一个对您进行身份验证的数据库。结果,用户只看到他的数据库
使用 DCL 命令对特定数据库进行操作。
然后
commit();
所以用户只会读取数据库对象。