SQL Server Management Studio 中没有可见的数据库

SQL Server Management Studio 中没有可见的数据库

我正在尝试确定 SQL 服务器上存在哪些数据库。

我可以假设,如果我在管理工作室中看不到任何内容,那么就没有任何内容吗?本文微软似乎暗示,如果我没有特定数据库的权限,那么我就看不到它。

如果 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 下可用的最高权限。在“新​​查询窗口”中运行以下代码将明确显示 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 (*)”,其中 * 是实例的名称。如果服务器上有多个实例,您应该使用我上面提供的代码分别检查每个实例。

相关内容