Назад | Перейти на главную страницу

В SQL Server Management Studio базы данных не отображаются

Я пытаюсь определить, какие базы данных присутствуют на SQL-сервере.

Могу ли я предположить, что если я ничего не увижу в студии менеджмента, значит, их нет? Эта статья от Microsoft, похоже, предполагает, что если у меня нет разрешений на конкретную базу данных, я ее не увижу.

Если вызывающий sys.databases не является владельцем базы данных, а база данных не является master или tempdb, минимальные разрешения, необходимые для просмотра соответствующей строки: ALTER ANY DATABASE или VIEW ANY DATABASE на уровне сервера или CREATE DATABASE в главная база данных. Базу данных, к которой подключен вызывающий абонент, всегда можно просмотреть в sys.databases.

Откройте 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();

Результаты выглядят примерно так:

╔══════════╦════════════╗
║ RoleName ║ MemberName ║
╠══════════╬════════════╣
║ sysadmin ║ MyUser     ║
╚══════════╩════════════╝

Если результат показывает 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 (*)», где * будет именем экземпляра. Если на сервере есть несколько экземпляров, вы должны проверить каждый экземпляр отдельно, используя код, который я предоставил выше.