Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
如何在 RDS for SQL Server 中创建源为 RDS 的链接服务器?
我想创建一个从 Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server 链接到 SQL Server 的链接服务器。
简短描述
Amazon RDS 是一项托管服务,因此用户并不具备 sysadmin 访问权限。直接从 GUI 创建链接服务器会导致错误。要创建链接服务器,请使用 T-SQL。
作为先决条件,您必须在 RDS for SQL Server 和目标 SQL 服务器之间建立连接。
**注意:**即使更换了主机,链接服务器的密码和配置也保持不变。
解决方法
RDS for SQL Server 实例到 RDS for SQL Server 实例
当您创建以 RDS for SQL Server 作为源并以 RDS for SQL Server 作为目标的链接服务器时,请使用 DNS 名称。这样可以防止由于更换主机或更改服务器而导致的 IP 地址变化。
在 Amazon RDS 中,IP 地址是动态的,端点是静态的。因此,最佳做法是使用端点连接到您的实例。每个 Amazon RDS 实例都有一个端点。参见以下参数:
- @server: 您的链接服务器的名称。
- @datasrc: 您的 RDS 端点的名称。对于 Amazon Elastic Compute Cloud (Amazon EC2) 本地实例,此参数即您的 EC2 本地 IP 地址或 DNS 名称。
- @rmtuser: 有权访问目标数据库的登录名。
- @rmtpassword: 登录名对应的密码。
连接到 RDS for SQL Server 实例
使用主登录名连接到实例,然后运行以下命令。确保使用端点而不是 IP 地址。在更换主机期间,RDS 实例的 IP 地址可能会发生变化。
EXEC master .dbo.sp_addlinkedserver @server = N'LinkedServerRDSSQL', @srvproduct= N'', @provider= N'SQLNCLI', @datasrc= N'SQL-2019.ckeixtynaaaj.us-east-1.rds.amazonaws.com' go EXEC master .dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LinkedServerRDSSQL' ,@useself=N'False' ,@locallogin=NULL,@rmtuser =N'linkedserverloginname',@rmtpassword='YourStrongPassword' go
测试链接服务器
- 在 Microsoft SQL Server Management Studio(SSMS)中,连接到 RDS 实例。
- 在查看菜单上,选择对象资源管理器。
- 依次选择服务器对象、链接服务器。
- 右键单击您的服务器名称,然后选择测试连接。
查询链接服务器
运行以下查询:
select * from [LinkedServerName].[Databasename].[schemaname].[tablename]
RDS for SQL Server 实例到 EC2 SQL Server 实例或本地 SQL 服务器
创建链接服务器
以 RDS for SQL Server 作为源,以 EC2 实例上的 SQL Server 或本地 SQL Server 作为目标,创建链接服务器。
要使用远程服务器的 IP 地址创建链接服务器,请运行以下命令:
EXEC master .dbo.sp_addlinkedserver @server = N'LinkedServerRDSSQL', @srvproduct= N'', @provider= N'SQLNCLI', @datasrc= N'10.0.0.152' Go EXEC master .dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LinkedServerRDSSQL' ,@useself=N'False' ,@locallogin=NULL,@rmtuser =N'linkedserverloginname',@rmtpassword='YourStrongPassword' Go
要使用远程服务器的 DNS 名称创建链接服务器,请运行以下命令:
EXEC master .dbo.sp_addlinkedserver @server = N'LinkedServerRDSSQL', @srvproduct= N'', @provider= N'SQLNCLI', @datasrc= N'ServerName.datacenter.mycompany.com' Go EXEC master .dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LinkedServerRDSSQL' ,@useself=N'False' ,@locallogin=NULL,@rmtuser =N'linkedserverloginname',@rmtpassword='YourStrongPassword' go
测试链接服务器
- 在 Microsoft SQL Server Management Studio(SSMS)中,连接到 RDS 实例。
- 在查看菜单上,选择对象资源管理器。
- 依次选择服务器对象、链接服务器。
- 右键单击您的服务器名称,然后选择测试连接。
查询链接服务器
运行以下查询:
select * from [LinkedServerName].[Databasename].[schemaname].[tablename]
使用 Microsoft Windows Authentication 配置链接服务器
**注意:**您无法使用 Windows Authentication 对从 RDS for SQL Server 到 EC2 实例或本地 SQL Server 的链接服务器进行配置。
先决条件
- 您必须创建域并通过 AWS Managed Microsoft AD 加入。
- 源 EC2 SQL Server 实例和目标 RDS SQL Server 必须保持连接。
使用 Windows Authentication 配置从 EC2 或本地 SQL Server 到 RDS for SQL Server 的链接服务器
- 使用您的域登录信息登录,然后运行以下查询以创建链接服务器。
USE [master] GO EXEC sp_addlinkedserver @server=N'LinkedServerToRDSInstance',@srvproduct=N'',@provider=N'SQLNCLI',@datasrc=N'EndpointName'; GO EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'LinkedServerToRDSInstance', @locallogin = NULL , @useself = N'True' GO
测试链接服务器
- 在 Microsoft SQL Server Management Studio(SSMS)中,连接到 RDS 实例。
- 在查看菜单上,选择对象资源管理器。
- 依次选择服务器对象、链接服务器。
- 右键单击您的服务器名称,然后选择测试连接。
查询链接服务器
运行以下查询:
select * from [LinkedServerName].[Databasename].[schemaname].[tablename]
故障排除
从客户端连接时,可能会收到以下错误消息:
Msg 18456, Level 14, State 1, Line 21 Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'
此错误由“双跳”触发。如果某台计算机为了连接到另一台计算机而又连接了一台计算机,就会出现双跳。在以下情况下,可能会出现双跳:
- AWS Managed AD 没有用于处理客户端和 EC2 实例之间身份验证的服务主体名称配置(SPN)。
- 链接服务器配置的端点(例如 RDS 实例端点)并非来自于您的域。EC2 和 RDS 的身份验证方法都必须是 KERBEROS。
要解决此问题,请完成以下步骤:
查看身份验证方法,确认连接到 RDS 和 EC2 时选择的是 KERBEROS
使用来自客户端的域登录信息运行以下查询:
select @@servername as ServerName, session_id,net_transport, auth_scheme from sys.dm_exec_connections where session_id= @@spid;
更正属于您的域的 SQL Server 服务账户的 SPN
- 在 Active Directory 用户和计算机中,选择 example.com、示例(域名)、用户。
- 要查看属性,请右键单击您的服务账户。
- 在委派选项卡中,选择信任此用户以委托给任何服务(仅限 Kerberos),然后选择确定。
- 重新启动 EC2 实例或本地 SQL Server 上的 SQL Server 服务。
- 如以下示例命令所示,为服务账户添加 SPN。请将 example 替换为您的域名。将 ServiceAccountName 和 Ec2name 域替换为您域的正确的值:
setspn -A MSSQLSvc/Ec2name.domain.com example\ServiceAccountName setspn -A MSSQLSvc/Ec2name.domain.com:1433 example\ServiceAccountName
要验证新创建的 SPN,请运行以下命令:
setspn -l example\ServiceAccountName
使用 RDS example.com 端点重新创建链接服务器
-
要检索服务器名称,请在 RDS for SQL Server 中运行以下查询:
select @@servername as ServerName, session_id,net_transport, auth_scheme from sys.dm_exec_connections where session_id= @@spid;
-
在前述命令的输出中,检查服务器名称列以验证 SPN:
setspn -l YourServerName
-
输出还显示了您的 RDS 实例的已注册 ServicePrincipalNames,如以下示例所示:
MSSQLSvc/ YourServerName.example.com:1433
-
要使用域登录信息重新创建链接服务器,请运行以下命令。数据来源就是您在步骤 2 中从命令输出中检索到的数据来源:
USE [master] GO EXEC sp_addlinkedserver @server=N'LinkedServerToRDSInstance',@srvproduct=N'',@provider=N'SQLNCLI',@datasrc=N'YourServerName.example,com'; GO EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'LinkedServerToRDSInstance', @locallogin = NULL , @useself = N'True' GO
测试来自客户端的连接。
对于异构链接服务器,您可以使用 RDS Custom for SQL Server。
相关信息

相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前