Ejemplo de trabajo del comando OpenDataSource utilizando la autenticación SQL
-
16-10-2019 - |
Pregunta
Necesito ejecutar algunas consultas ad-hoc en varios cientos de servidores que no forman parte de un dominio. Cada servidor tiene una cuenta de usuario SQL de bajo privilegio que tiene acceso de solo lectura a algunas tablas de interés.
Mi idea era tener los nombres de estos servidores almacenados en una tabla y usar esa tabla para conducir un comando OpenDataSource o OpenRowset.
Los servidores se encuentran en diferentes dominios, dominios no controlados, grupos de trabajo, etc. Un gran desastre.
Por mi vida, no puedo encontrar un ejemplo de cómo configurar estos comandos para usar una combinación de cuenta/contraseña de SQL Server.
Nota: Esto sucede en una caja de arena, no está destinado al mundo real. Es simplemente una prueba de concepto, por lo que la seguridad no es una gran preocupación. Estos servidores están arrancados por un proceso que está simulando un crecimiento del mundo real de una red.
Para el registro, pude hacer que OpenRowset funcionara:
SELECT *
FROM OPENROWSET('SQLNCLI',
'DRIVER={SQL Server};SERVER=MyServer;UID=MyUserID;PWD=MyCleverPassword',
'select @@ServerName')
Solución
Para ejecutarlo con un inicio de sesión SQL, solo necesita especificar la identificación de usuario y la contraseña en la cadena de conexión (llamado "Cadena init" en Bol)
SELECT
* FROM
OPENDATASOURCE (
'SQLNCLI', -- or SQLNCLI
'Data Source=OtherServer\InstanceName;Catalog=RemoteDB;User ID=SQLLogin;Password=Secret;').RemoteDB.dbo.SomeTable