SQL 个链接到特定服务器的服务器列表
List of SQL servers linked to a particular server
如果我有多个 SQL 服务器并且我想显示我连接到的实际 SQL 服务器 (myServer1) 的链接服务器是什么,我可以执行 sp_linkedservers
或在 Server Objects/Linked Servers 下导航,这将显示连接到它的服务器列表。
现在假设我只能访问 myServer1,所以我无法执行 sp_linkedservers
, 有没有办法显示将 myServer1 作为链接服务器的 SQL 服务器是什么?
您可以使用这些 DMV,但您仍然需要适当的权限:
use master
go
SELECT *
FROM sys.servers s
LEFT JOIN sys.linked_logins l ON s.server_id = l.server_id
LEFT JOIN sys.server_principals p ON p.principal_id = l.local_principal_id
我理解你的问题: 运行在 sql 服务器实例上 'something'(我们称之为 A)检索将 A 作为链接服务器对象目标的其他 servers/instances 列表。
回答:你不能。
链接服务器不是持久连接,因此 'target' 服务器没有关于哪个服务器有潜在连接引用它的信息;目标服务器只有在激活连接时才会注意到远程服务器的存在(例如查询是运行)。
此外,当连接被激活时,目标服务器无法知道另一端是否有链接服务器、odbc 源或任何其他软件对象。
您可以擦洗日志以寻找远程端点,但随后您只能靠自己猜测远程端是否有链接服务器或其他任何东西。
您最好的选择是一个脚本(也许是 powershell?),它检索 sql 服务器的列表,生成每个服务器上配置的链接服务器的列表。
如果我有多个 SQL 服务器并且我想显示我连接到的实际 SQL 服务器 (myServer1) 的链接服务器是什么,我可以执行 sp_linkedservers
或在 Server Objects/Linked Servers 下导航,这将显示连接到它的服务器列表。
现在假设我只能访问 myServer1,所以我无法执行 sp_linkedservers
, 有没有办法显示将 myServer1 作为链接服务器的 SQL 服务器是什么?
您可以使用这些 DMV,但您仍然需要适当的权限:
use master
go
SELECT *
FROM sys.servers s
LEFT JOIN sys.linked_logins l ON s.server_id = l.server_id
LEFT JOIN sys.server_principals p ON p.principal_id = l.local_principal_id
我理解你的问题: 运行在 sql 服务器实例上 'something'(我们称之为 A)检索将 A 作为链接服务器对象目标的其他 servers/instances 列表。
回答:你不能。
链接服务器不是持久连接,因此 'target' 服务器没有关于哪个服务器有潜在连接引用它的信息;目标服务器只有在激活连接时才会注意到远程服务器的存在(例如查询是运行)。
此外,当连接被激活时,目标服务器无法知道另一端是否有链接服务器、odbc 源或任何其他软件对象。
您可以擦洗日志以寻找远程端点,但随后您只能靠自己猜测远程端是否有链接服务器或其他任何东西。
您最好的选择是一个脚本(也许是 powershell?),它检索 sql 服务器的列表,生成每个服务器上配置的链接服务器的列表。