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

5분 분량
0

Microsoft SQL Server 인스턴스용 Amazon Relational Database Service(Amazon RDS)에서 SQL Server로 연결된 서버를 만들고 싶어요.

간단한 설명

Amazon RDS는 관리형 서비스이므로 사용자에게는 시스템 관리자 액세스 권한이 없습니다. GUI에서 직접 연결된 서버를 생성하려고 하면 오류가 발생합니다. 연결된 서버를 만들려면, T-SQL을 사용하세요.

사전 요구 사항으로, SQL Server용 RDS와 대상 SQL Server 간에 연결이 돼 있어야 합니다.

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

해결 방법

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

SQL Server용 RDS를 소스로 사용하여 SQL Server용 RDS를 대상으로 하는 연결된 서버를 만들 때는 DNS 이름을 사용하세요. 이렇게 하면 호스트 교체나 서버 변경으로 인해 IP 주소가 변경되는 것을 방지할 수 있습니다.

Amazon RDS에서 IP 주소는 동적이고 엔드포인트는 정적입니다. 따라서, 엔드포인트를 사용하여 사용자의 인스턴스에 연결하는 것이 가장 좋습니다. 모든 Amazon RDS 인스턴스에는 엔드포인트가 있습니다. 다음 매개변수를 참조하세요:

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

SQL 서버용 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

연결된 서버 테스트

  1. Microsoft SQL Server Management Studio(SSMS)에서 RDS 인스턴스에 연결하세요.
  2. **View(보기)**메뉴에서, **Object Explorer(객체 탐색기)**를 선택하세요.
  3. Server Objects(서버 객체), **Linked Servers(연결된 서버)**를 선택하세요.
  4. 사용자의 서버 이름을 마우스 오른쪽 단추로 클릭한 다음, **Test the connection(연결 테스트)**을 선택하세요.

연결된 서버 쿼리

다음 쿼리를 실행하세요.

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

SQL Server용 RDS 인스턴스를 EC2 SQL Server 인스턴스나 온프레미스 SQL Server로

연결된 서버 생성

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

연결된 서버 테스트

  1. Microsoft SQL Server Management Studio(SSMS)에서 RDS 인스턴스에 연결하세요.
  2. **View(보기)**메뉴에서, **Object Explorer(객체 탐색기)**를 선택하세요.
  3. Server Objects(서버 객체), **Linked Servers(연결된 서버)**를 선택하세요.
  4. 사용자의 서버 이름을 마우스 오른쪽 단추로 클릭한 다음, **Test the connection(연결 테스트)**을 선택하세요.

연결된 서버 쿼리

다음 쿼리를 실행하세요.

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 서버가 연결되어 있어야 합니다.

Windows Authentication을 사용하여 EC2나 온프레미스 SQL Server에서 SQL Server용 RDS로 연결된 서버 구성

  • 사용자의 도메인 로그인으로 로그인한 후, 다음 쿼리를 실행하여 연결된 서버를 생성하세요.
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

연결된 서버 테스트

  1. Microsoft SQL Server Management Studio(SSMS)에서 RDS 인스턴스에 연결하세요.
  2. **View(보기)**메뉴에서, **Object Explorer(객체 탐색기)**를 선택하세요.
  3. Server Objects(서버 객체), **Linked Servers(연결된 서버)**를 선택하세요.
  4. 서버 이름을 마우스 오른쪽 단추로 클릭한 다음, **Test the connection(연결 테스트)**을 선택하세요.

연결된 서버 쿼리

다음 쿼리를 실행하세요.

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 수정

  1. Active Directory Users and Computers에서, ** example.com**, example (domain name), Users를 선택하세요.
  2. 속성을 보려면, YourServiceAccount를 마우스 오른쪽 단추로 클릭하세요.
  3. **Delegation(위임)**탭에서 **Trust this user for delegation to any service (Kerberos only)(이 사용자에게 모든 서비스 위임 허용(Kerberos에만 해당))**를 선택한 다음, **OK(확인)**를 선택하세요.
  4. EC2 인스턴스나 온프레미스 SQL Server에서 SQL 서버 서비스를 다시 시작하세요.
  5. 다음 예제 명령과 같이 서비스 계정의 SPN을 추가하세요. example을 사용자의 도메인 이름으로 바꾸세요. ServiceAccountNameEC2Name도메인을 사용자 도메인의 올바른 값으로 바꾸세요.
    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 엔드포인트를 사용하여 연결된 서버 다시 생성

  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
  3. 결과에는 다음 예와 같이 사용자의 RDS 인스턴스에 등록된 ServicePrincipalNames도 표시됩니다.

    MSSQLSvc/ YourServerName.example.com:1433
  4. 도메인 로그인으로 연결된 서버를 다시 만들려면, 다음 명령을 실행하세요. 데이터 소스는 사용자가 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

클라이언트에서 연결을 테스트하세요.

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

관련 정보

Microsoft SQL 서버용 Amazon RDS를 사용하여 연결된 서버 구현

댓글 없음

관련 콘텐츠