SQL Server용 RDS에서 소스를 RDS로 사용하여 연결된 서버를 생성하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 10월 3일

Microsoft SQL Server 인스턴스용 Amazon Relational Database Service(RDS)에서 SQL Server로 연결된 서버를 생성하고 싶습니다. 어떻게 해야 하나요?

간략한 설명

Amazon RDS는 관리형 서비스이므로 사용자에게 시스템 관리자 액세스 권한이 없습니다. GUI에서 연결된 서버를 직접 생성하면 오류가 발생합니다. 연결된 서버를 생성하려면 T-SQL을 사용하세요. 지원되는 유일한 대상은 SQL Server입니다.

사전 요구 사항

SQL Server용 RDS와 대상 SQL Server간에 연결이 있어야 합니다.

참고: 연결된 서버 암호와 구성은 호스트를 교체한 후에도 그대로 유지됩니다.

해결 방법

SQL Server 인스턴스용 RDS에서 SQL Server 인스턴스용 RDS로

SQL Server용 RDS를 소스로 사용하고 SQL Server용 RDS를 대상으로 하여 연결된 서버를 생성할 때는 DNS 이름을 사용하는 것이 가장 좋습니다. DNS 이름을 사용하면 호스트 교체 또는 서버 변경으로 인한 IP 주소 변경을 방지할 수 있습니다.

Amazon RDS에서 IP 주소는 동적이고 엔드포인트는 정적입니다. 따라서 엔드포인트를 사용하여 인스턴스에 연결하는 것이 가장 좋습니다. 모든 Amazon RDS 인스턴스에는 엔드포인트가 있습니다.

파라미터:

  • @server: 연결된 서버 이름.
  • @datasrc: RDS 엔드포인트 이름. Amazon Elastic Compute Cloud(Amazon EC2) 온프레미스 인스턴스의 경우 EC2 온프레미스 IP 주소 또는 DNS 이름을 입력합니다.
  • @rmtuser: 대상 데이터베이스에 액세스할 수 있는 로그인 이름.
  • @rmtpassword: 로그인 이름의 비밀번호.

1단계: SQL Server 인스턴스용 RDS에 연결

마스터 로그인을 사용하여 인스턴스에 연결한 후 다음 명령을 실행합니다. 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

2단계: 연결된 서버 테스트

1.    Microsoft SQL Server Management Studio(SSMS)에서 RDS 인스턴스에 연결합니다.

2.    보기(View) 메뉴에서 객체 탐색기(Object Explorer)를 선택합니다.

3.    서버 객체(Server Objects), 연결된 서버(Linked Servers)를 선택합니다.

4.    서버 이름을 마우스 오른쪽 버튼으로 클릭한 다음 연결 테스트(Test the connection)를 선택합니다.

3단계: 연결된 서버 쿼리

다음 쿼리를 실행합니다.

select * from [LinkedServerName].[Databasename].[schemaname].[tablename]

SQL Server 인스턴스용 RDS에서 EC2 SQL Server 인스턴스 또는 온프레미스 SQL Server로

1단계: 연결된 서버 생성

SQL Server용 RDS를 사용하여 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

2단계: 연결된 서버 테스트

1.    Microsoft SQL Server Management Studio(SSMS)에서 RDS 인스턴스에 연결합니다.

2.    보기(View) 메뉴에서 객체 탐색기(Object Explorer)를 선택합니다.

3.    서버 객체(Server Objects), 연결된 서버(Linked Servers)를 선택합니다.

4.    서버 이름을 마우스 오른쪽 버튼으로 클릭한 다음 연결 테스트(Test the connection)를 선택합니다.

3단계: 연결된 서버 쿼리

다음 쿼리를 실행합니다.

select * from [LinkedServerName].[Databasename].[schemaname].[tablename]

Microsoft Windows Authentication을 사용하여 연결된 서버를 구성

참고: Windows Authentication을 사용하여 SQL Server용 RDS에서 EC2 인스턴스 또는 온프레미스 SQL Server로 연결된 서버를 구성하는 것은 지원되지 않습니다.

사전 요구 사항

  • 도메인을 생성하고 AWS Managed Microsoft AD에 조인해야 합니다.
  • 소스 EC2 SQL Server 인스턴스와 대상 RDS SQL Server가 연결되어 있어야 합니다.

1단계: Windows Authentication을 사용하여 EC2 또는 온프레미스 SQL Server에서 SQL Server용 RDS로 연결된 서버를 구성

1.    도메인 로그인으로 로그인하고 다음 쿼리를 실행하여 연결된 서버를 생성합니다.

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

2단계: 연결된 서버 테스트

1.    Microsoft SQL Server Management Studio(SSMS)에서 RDS 인스턴스에 연결합니다.

2.    보기(View) 메뉴에서 객체 탐색기(Object Explorer)를 선택합니다.

3.    서버 객체(Server Objects), 연결된 서버(Linked Servers)를 선택합니다.

4.    서버 이름을 마우스 오른쪽 버튼으로 클릭한 다음 연결 테스트(Test the connection)를 선택합니다.

3단계: 연결된 서버 쿼리

다음 쿼리를 실행합니다.

select * from [LinkedServerName].[Databasename].[schemaname].[tablename]

문제 해결

클라이언트에서 연결할 때 다음 오류 메시지가 나타날 수 있습니다.

Msg 18456, Level 14, State 1, Line 21
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

이 오류는 'double hop'으로 인해 발생합니다. double hop은 한 컴퓨터를 다른 컴퓨터에 연결하여 세 번째 컴퓨터에 연결할 때 발생합니다. double hop은 다음 시나리오에서 발생할 수 있습니다.

  • AWS Managed AD에서 클라이언트와 EC2 인스턴스 간의 인증을 처리하기 위한 서비스 주요 이름 구성(SPN)은 없습니다.
  • 연결된 서버는 RDS 인스턴스 엔드포인트와 같이 도메인이 아닌 엔드포인트를 사용하여 구성됩니다. EC2와 RDS 모두에 대한 인증 방법은 KERBEROS여야 합니다.

이 문제를 해결하려면 다음을 수행합니다.

1단계. 인증 방법을 통해 RDS와 EC2에 모두 연결할 때 KERBEROS가 선택되고 있는지 확인합니다.

클라이언트에서 도메인 로그인을 사용하여 다음 쿼리를 실행합니다.

select @@servername as ServerName, session_id,net_transport, auth_scheme from sys.dm_exec_connections where session_id= @@spid;

2단계: 도메인에 속한 SQL Server 서비스 계정의 SPN 수정

1.    Active Directory의 사용자 및 컴퓨터(Users and Computers)에서 YourDomain.com, YourDomain, Users를 선택합니다.

2.    YourServiceAccount를 마우스 오른쪽 버튼으로 클릭하면 속성을 볼 수 있습니다.

3.    위임(Delegation) 탭에서 모든 서비스에 위임할 사용자를 신뢰(Kerberos만 해당)를 선택한 다음 확인(OK)을 선택합니다.

4.    EC2 인스턴스 또는 온프레미스 SQL Server에서 SQL Server 서비스를 다시 시작합니다.

5.     다음 예시 명령에 표시된 대로 서비스 계정의 SPN을 추가합니다. YourDomainName\ServiceAccountNameEc2name 도메인을 도메인의 올바른 값으로 바꿉니다.

setspn -A MSSQLSvc/Ec2name.domain.com YourDomainName\ServiceAccountName
setspn -A MSSQLSvc/Ec2name.domain.com:1433 YourDomainName\ServiceAccountName

6.    다음 명령을 실행하여 새로 생성된 SPN을 확인합니다.

setspn -l YourDomainName\ServiceAccountName

3단계: RDS YourDomain.com 엔드포인트를 사용하여 연결된 서버 다시 생성

1.    SQL Server용 RDS에서 다음 쿼리를 실행하여 서버 이름을 검색합니다.

select @@servername as ServerName, session_id,net_transport, auth_scheme from sys.dm_exec_connections where session_id= @@spid;

2.    앞의 명령의 출력에서 다음 예와 같이 서버 이름 열을 확인하여 SPN을 확인합니다.

setspn -l YourServerName

앞의 명령 출력에는 다음 예와 같이 RDS 인스턴스에 등록된 ServicePrincipalNames도 표시됩니다.

MSSQLSvc/ YourServerName.yourdomainname.com:1433

3.    다음 명령을 실행하여 도메인 로그인을 사용하여 연결된 서버를 다시 생성합니다. 데이터 소스는 2단계의 명령 출력에서 검색한 것과 동일합니다.

USE [master]
GO
EXEC sp_addlinkedserver    @server=N'LinkedServerToRDSInstance',@srvproduct=N'',@provider=N'SQLNCLI',@datasrc=N'YourServerName.YourDomainnanme,com';
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'LinkedServerToRDSInstance', @locallogin = NULL , @useself = N'True'
GO

4.    클라이언트에서 연결을 테스트합니다.

참고: 현재 연결된 서버는 SQL Server의 대상으로 지원됩니다. Amazon RDS가 관리형 서비스이기 때문입니다. 추가 ODBC 또는 Oracle, MYSQL, PostGreSQL과 같은 다른 데이터베이스 서버를 연결하는 데 필요한 드라이버를 설치할 수 있는 OS 액세스 권한이 없습니다.

이기종 연결 서버의 경우 SQL Server용 RDS 사용자 지정을 사용할 수 있습니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?