Есть ли способ перечислить только доступ к базам данных с использованием связанного сервера? - PullRequest
0 голосов
/ 02 июля 2019

Когда я захожу на сервер sql.Я вижу много баз данных, но у меня нет доступа к некоторым базам данных.Поэтому я хочу перечислить только доступ к базам данных с использованием связанного имени.

select name FROM sys.sysdatabases WHERE HAS_DBACCESS(name) = 1

Я запускаю этот код локально, он работает.Но я хочу запустить этот код

select name FROM [linkedname].sys.sysdatabases WHERE HAS_DBACCESS(name) = 1

, он не работает.

1 Ответ

2 голосов
/ 02 июля 2019

[linkedname].sys.sysdatabases будет ссылаться на базу данных linkedname, а не на сервер.

Вам необходимо использовать 4 части именования LinkedServerName.DatabaseName.SchemaName.ObjectName.Для вашего примера это будет: [linkedname].master.sys.sysdatabases

Поскольку, однако (как указал Дэн Гузман), это связанный запрос, HAS_DBACCESS будет выполняться локально.Вы можете обойти это, используя OPENQUERY:

SELECT [name]
FROM OPENQUERY(linkedname,N'SELECT [name] FROM master.sys.sysdatabases WHERE HAS_DBACCESS(name) = 1;'); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...