Sql-Server

MSSQL - 隱藏數據庫

  • January 15, 2010

我有一個 MSSQL 2005 伺服器設置並執行。我希望能夠進行以下設置:

database_one作為user_onedb_owner和作為

db_owner

database_two``user_two

棘手的部分(至少對我來說)是我想database_one被隱藏user_twodatabase_two被隱藏user_one

到目前為止,我已經找到了VIEW ANY DATABASE許可。玩弄這個似乎無論我如何為使用者設置更具體的權限,VIEW ANY DATABASE權限都優先。

如果我執行DENY VIEW ANY DATABASE TO user_one,以 user_one 連接將只顯示mastertempdb系統數據庫,即使 user_one 設置為 database_one 的 db_owner。

有沒有辦法設置權限來做我想做的事?

sys.databases的可見性:

如果 sys.databases 的呼叫者不是數據庫的所有者,並且數據庫不是 master 或 tempdb,則查看相應行所需的最低權限是 ALTER ANY DATABASE 或 VIEW ANY DATABASE 伺服器級權限,或 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 的登錄額外的、不需要的權限)。

引用自:https://serverfault.com/questions/103102