SQL Server Management Studio 中沒有可見的資料庫

SQL Server Management Studio 中沒有可見的資料庫

我正在嘗試確定 SQL 伺服器上存在哪些資料庫。

我是否可以假設,如果我在管理工作室中沒有看到任何內容,那麼就沒有?本文來自 Microsoft 的訊息似乎表明,如果我沒有特定資料庫的權限,那麼我將看不到它。

如果 sys.databases 的呼叫者不是資料庫的擁有者,且資料庫不是 master 或 tempdb,則查看對應行所需的最低權限是 ALTER ANY DATABASE 或 VIEW ANY DATABASE 伺服器級權限,或 CREATE DATABASE 權限主資料庫。呼叫者連接的資料庫始終可以在 sys.databases 中查看。

答案1

開啟 SQL Server Management Studio (SSMS) 並執行下列程式碼以查看您擁有的伺服器角色成員資格:

SELECT spr.name
    , sp.name
FROM master.sys.server_principals sp
    LEFT JOIN master.sys.server_role_members srm ON sp.principal_id = srm.member_principal_id
    LEFT JOIN master.sys.server_principals spr ON srm.role_principal_id = spr.principal_id
WHERE sp.sid = SUSER_SID();

結果看起來像這樣:

╔══════════╦════════════╗
║ 角色名稱 ║ 成員名稱 ║
╠══════════╬════════════╣
║ 系統管理員 ║ 我的使用者 ║
╚══════════╩════════════╝

如果結果顯示sysadmin在第一列中,則您擁有 SQL Server 下可用的最高權限等級。在「新查詢視窗」中執行下列程式碼,將明確顯示 SQL Server 執行個體中存在的資料庫,但係統資料庫、master、tempdb、msdb 和 model 除外:

SELECT d.name
    , d.create_date
    , d.is_encrypted
    , d.state_desc
    , d.user_access_desc
FROM sys.databases d
WHERE d.database_id > 4
ORDER BY d.name;

如果該列表為空,且您以 sysadmin 角色成員身分執行該列表,則可以確定沒有資料庫連線到 SQL Server 執行個體。話雖如此,可能還有資料庫文件存在於已分離的伺服器上。定位分離的資料庫檔案是一項棘手的工作,因為您不能依賴具有任何特定名稱或檔案副檔名的檔案。

SQL Server 能夠透過所謂的「命名實例」在一台伺服器上多次安裝。您應該透過控制面板中的服務小程式檢查伺服器的服務列表,尋找諸如「SQL Server (*)」之類的服務名稱,其中 * 是實例的名稱。如果伺服器上有多個實例,您應該使用我上面提供的程式碼單獨檢查每個實例。

相關內容