我已经安装并运行了 MSSQL 2005 服务器。我希望能够进行以下设置:
database_one
与user_one
作为 db_owner
和
database_two
与user_two
作为 db_owner
棘手的部分(至少对我来说)是我希望database_one
被隐藏user_two
并且database_two
被隐藏user_one
。
到目前为止,我已经找到了VIEW ANY DATABASE
权限。尝试了一下,似乎无论我如何为用户设置更具体的权限,权限VIEW ANY DATABASE
都优先。
如果我运行DENY VIEW ANY DATABASE TO user_one
,以 user_one 身份连接将只显示master
和tempdb
系统数据库,即使 user_one 被设置为 database_one 的 db_owner。
有没有办法设置权限来做我想做的事情?
答案1
的可见性系统数据库:
如果 sys.databases 的调用者不是数据库的所有者,并且数据库不是 master 或 tempdb,则查看相应行所需的最低权限是 ALTER ANY DATABASE 或 VIEW ANY DATABASE 服务器级别权限,或 master 数据库中的 CREATE DATABASE 权限。调用者连接到的数据库始终可以在 sys.databases 中查看。
因此默认可见性是确切地您的要求是:每个用户都可以看到 master、tempdb 和它自己的数据库。确保 user_one 是所有者database_one(不仅仅是 db_owner 角色的成员!),如下所示:
ALTER AUTHORIZATION ON DATABASE::database_one TO user_one;
如果设置正确(user_one 是 database_one 的所有者,user_two 是 database_two 的所有者),并且不授予任何额外许可那么你应该得到你想要的东西。具体来说,你不应该拒绝任何事情,事实上你必须拒绝一个权限意味着你的测试有问题(你向 user_one 和 user_two 的登录授予了额外的、不需要的权限)。
答案2
单独的实例有帮助吗?