SQL Server Management Studio にデータベースが表示されません

SQL Server Management Studio にデータベースが表示されません

SQL サーバー上にどのようなデータベースが存在するかを確認しようとしています。

管理スタジオに何も表示されない場合は、何も存在しないと考えてよいですか?この記事Microsoft からの通知では、特定のデータベースに対する権限がない場合、そのデータベースは表示されないようです。

sys.databases の呼び出し元がデータベースの所有者ではなく、データベースが master または tempdb でない場合、対応する行を表示するために必要な最小限の権限は、ALTER ANY DATABASE または VIEW ANY DATABASE サーバー レベルの権限、または master データベースの 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 で利用可能な最高レベルの権限を持っています。「新しいクエリ ウィンドウ」で次のコードを実行すると、システム データベース、master、tempdb、msdb、および model を除く、SQL Server インスタンスに存在するデータベースが明確に表示されます。

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 (*)」のようなサービス名 (* はインスタンス名) を確認する必要があります。サーバーに複数のインスタンスがある場合は、上記で提供したコードを使用して各インスタンスを個別に確認する必要があります。

関連情報