使用 SQL 身份验证的 OPENDATASOURCE 命令的工作示例

dat*_*god 3 authentication sql-server openrowset

我需要在数百个不属于域的服务器上运行一些临时查询。每个服务器都有一个低权限 SQL 用户帐户,该帐户对一些感兴趣的表具有只读访问权限。

我的想法是将这些服务器的名称存储在一个表中,并使用该表来驱动 OPENDATASOURCE 或 OPENROWSET 命令。

服务器要么在不同的域中,要么在不受信任的域中,要么在工作组中,等等。一团糟。

我一生都找不到如何配置这些命令以使用 SQL Server 帐户/密码组合的示例。

注意:这发生在沙箱中,并不适用于现实世界。这只是一个概念证明,因此安全性不是主要问题。这些服务器是通过一个模拟真实网络增长的过程产生的。

作为记录,我能够让 OPENROWSET 工作:

SELECT *
FROM OPENROWSET('SQLNCLI',
   'DRIVER={SQL Server};SERVER=MyServer;UID=MyUserID;PWD=MyCleverPassword',
   'select @@ServerName')         
Run Code Online (Sandbox Code Playgroud)

gbn*_*gbn 5

要使用 SQL 登录运行它,只需在连接字符串中指定用户 ID 和密码(在 BOL 中称为“初始化字符串”

SELECT
    * FROM
OPENDATASOURCE (
   'SQLNCLI', -- or SQLNCLI
   'Data Source=OtherServer\InstanceName;Catalog=RemoteDB;User ID=SQLLogin;Password=Secret;').RemoteDB.dbo.SomeTable
Run Code Online (Sandbox Code Playgroud)