VIEW ANY DATABASE 權限

VIEW ANY DATABASE 權限是新的伺服器層級權限。授與此權限的登入可以看到描述所有資料庫的中繼資料,不論該登入是否擁有特定資料庫或是否可實際使用特定資料庫。

VIEW ANY DATABASE 權限會管制在 sys.databasessys.sysdatabases 檢視以及 sp_helpdb 系統預存程序內中繼資料的公開。

根據預設,系統會將 VIEW ANY DATABASE 權限授與 public 角色。因此每個連接到 SQL Server 執行個體的使用者預設都會看到執行個體中的所有資料庫。若要驗證這種行為,請執行下列查詢:

SELECT l.name as grantee_name, p.state_desc, p.permission_name 
FROM sys.server_permissions AS p JOIN sys.server_principals AS l 
ON   p.grantee_principal_id = l.principal_id
WHERE permission_name = 'VIEW ANY DATABASE' ;
GO

若要將 VIEW ANY DATABASE 權限授與特定登入,請執行下列查詢:

GRANT VIEW ANY DATABASE TO <login>; 

描述 master 和 tempdb 資料庫的中繼資料永遠對 public 為可見。

sysadmin 固定伺服器角色的成員永遠可以看到所有的資料庫中繼資料。

資料庫擁有者對於他們所擁有的資料庫永遠可以看到 sys.databases 中的資料列。

授與登入 CREATE DATABASE 和 ALTER ANY DATABASE 權限,將授予資料庫中繼資料的存取權。

[!附註]

CREATE DATABASE 權限是 dbcreator 固定伺服器角色的隱含權限。

[!附註]

如果您授與登入 CREATE DATABASE 和 ALTER ANY DATABASE 權限,但未對該登入拒絕 VIEW ANY DATABASE,該登入將可看到 sys.databases 中的所有資料列。

若要限制資料庫中繼資料的可見性,請拒絕登入的 VIEW ANY DATABASE 權限。在拒絕此權限後,登入就只能看到 master、tempdb 以及登入所擁有之資料庫的中繼資料。如需詳細資訊,請參閱<DENY 伺服器權限 (Transact-SQL)>。