允许用户只查看他们有权访问的数据库

Jon*_*han 2 sql-server availability-groups sql-server-2014

我想知道是否有任何方法可以让用户只查看他们有权访问的特定数据库。例如。假设我们有一个 alwaysOn,其中只有一个本地数据库和 10 个添加到 AO 中的数据库。用户需要对 AO 中添加的 10 个数据库之一的读取权限。但是当授予用户对该数据库的权限并且他连接到 AO 时,他可以查看每个数据库,但当然只能访问他有权访问的数据库。如果 AO 在本地数据库所在的位置处于活动状态,他也会看到那个。

我们已经尝试了一些东西,但没有成功,而且从我们所阅读的内容来看,除非用户被授予 dbowner 权限,否则它似乎不是一种方法。

有人有任何想法吗?

Dan*_*her 5

默认情况下,登录可以查看服务器上的所有数据库。

您可以DENY VIEW ANY DATABASE TO [your login or serverrole];,之后登录只能看到他有权访问的数据库。

要验证登录名可以看到哪些数据库,请在以管理用户身份连接时尝试此操作:

--- This changes the security context to the login "dummy"
EXECUTE AS LOGIN='dummy';

--- Lists the databases visible to that user:
SELECT * FROM sys.databases;

--- Important: changes the security context back again:
REVERT;
Run Code Online (Sandbox Code Playgroud)

VIEW ANY DATABASE权限分配给服务器级主体(登录名,即不是用户,即数据库级主体),因此,您需要将其应用于每个可用性组副本。我建议您在服务器角色而不是单个用户上应用(拒绝)此权限以使其易于管理。

关于该主题的更详细阅读:

https://www.mssqltips.com/sqlservertip/3399/verify-the-databases-a-sql-server-login-can-see--and-why/