Рабочий пример команды OpenDataSource с использованием аутентификации SQL
-
16-10-2019 - |
Вопрос
Мне нужно запустить некоторые специальные запросы на нескольких сотнях серверов, которые не являются частью домена. У каждого сервера есть низкоприютная учетная запись пользователя SQL, которая имеет доступ только для чтения к нескольким интересующим таблицам.
Моя идея состояла в том, чтобы имена этих серверов хранились в таблице, и использовать эту таблицу, чтобы управлять командой OpenDataSource или OpenRowset.
Серверы либо находятся в разных областях, без привлечения доменов, рабочих групп и т. Д. Большой беспорядок.
Я не могу на всю жизнь найти пример того, как настроить эти команды для использования комбинации учетной записи/пароля SQL Server.
Примечание: это происходит в песочнице, это не предназначено для реального мира. Это просто доказательство концепции, поэтому безопасность не является серьезной проблемой. Эти серверы определяются процессом, который моделирует реальное рост сети.
Для протокола, я смог получить OpenRowset для работы:
SELECT *
FROM OPENROWSET('SQLNCLI',
'DRIVER={SQL Server};SERVER=MyServer;UID=MyUserID;PWD=MyCleverPassword',
'select @@ServerName')
Решение
Чтобы запустить его с помощью входа в SQL, просто необходимо указать идентификатор пользователя и пароль в строке подключения (вызывается "init string" в bol)
SELECT
* FROM
OPENDATASOURCE (
'SQLNCLI', -- or SQLNCLI
'Data Source=OtherServer\InstanceName;Catalog=RemoteDB;User ID=SQLLogin;Password=Secret;').RemoteDB.dbo.SomeTable