MSSQL – 隐藏数据库

我有一个MSSQL 2005服务器设置和运行。 我想能够有以下的设置:

database_one其中user_one为db_owner

database_twouser_two作为db_owner

棘手的部分(至less对我来说)是我想从user_twodatabase_two隐藏database_twouser_one隐藏。

到目前为止,我已经find了VIEW ANY DATABASE权限。 玩这个似乎无论如何设置一个用户更具体的权限, VIEW ANY DATABASE权限优先。

如果我将DENY VIEW ANY DATABASE TO user_one运行DENY VIEW ANY DATABASE TO user_one ,那么即使将user_one设置为database_one的db_owner,以user_one DENY VIEW ANY DATABASE TO user_one连接也只会显示mastertempdb系统数据库

有没有办法设置权限做我想要的?

sys.databases的可见性:

如果sys.databases的调用方不是数据库的所有者,并且数据库不是master或tempdb,则查看相应行所需的最小权限是ALTER ANY DATABASE或VIEW ANY DATABASE服务器级权限或CREATE DATABASE权限主数据库。 调用者连接到的数据库总是可以在sys.databases中查看。

所以默认的可见性正是你所要求的:每个用户都能够看到master,tempdb和它自己的数据库。 确保user_one是database_one的所有者 (不仅是db_ownerangular色的成员!),如下所示:

 ALTER AUTHORIZATION ON DATABASE::database_one TO user_one; 

如果设置正确(user_one是database_one的所有者,user_two是database_two的所有者),并且没有额外的permsisionsa被授予,那么你应该得到你所要求的。 具体来说,你不应该拒绝任何东西,事实上,你必须拒绝一个权限意味着你的testing(你授予额外的,不需要的,对user_one和user_two的login权限)有些问题。

将单独的实例帮助吗?