SQL Server 끝점의 보안 설정을 검사하려면 어떻게해야합니까?


10

SQL Server 개발 직원을위한 TEST 환경을 만드는 중입니다.

프로덕션 환경에는 3 개의 SQL Server SQL01가 있으며에 미러링 된 여러 데이터베이스가 포함되어 있습니다 SQL02. SQL03"자동 장애 조치를 통한 높은 안전성"또는 동기식 구성에서 감시 역할을합니다.

VMWare P2V를 사용하여 세 대의 머신을 모두 별도의 하드웨어로 가상화하고 머신의 SID를 재구성했으며이 새로운 머신에서 프로덕션 서버의 IP 주소를 블랙홀했습니다.

처음에는 프로덕션 감시 시스템을 블랙홀하는 것을 잊어 버렸으므로 테스트 머신의 데이터베이스는 여전히 머신을 감시자로 사용하고있었습니다 SQL03. 문제를 알아 차리고 새로 가상화 된 TEST 감시를 가리 키도록 TEST에서 데이터베이스를 재구성하기로 결정했습니다 TEST03.

새 감시를 사용하도록 데이터베이스를 재구성하려면 기본 서버에서 다음 명령을 입력했습니다 TEST01.

ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';

응답이 예상치 못한 것입니다.

The ALTER DATABASE command could not be sent to the remote server instance
'TCP://TEST03.domain.inet:5022'.  The database mirroring configuration was
not changed.  Verify that the server is connected, and try again.

구성이 프로덕션 머신에서 작동하고 테스트 머신에서 어떤 식 으로든 수정되지 않았기 때문에이 오류 메시지가 매우 당황했습니다.

이 기능을 작동 시키려면 LOGIN테스트 감시 를 작성해야했습니다 .

CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR WINDOWS WITH DEFAULT_DATABASE [Master];

그리고 GRANTCONNECT문제의 엔드 포인트에 대한 권리 :

GRANT CONNECT ON ENDPOINT::Mirroring TO [DOMAIN\SQLServiceAccount];

그런 다음 테스트 환경에서 미러링 된 데이터베이스를 새로운 테스트 감시 대상으로 성공적으로 가리킬 수있었습니다.

프로덕션 감시 엔드 포인트를 검사하여 관련된 보안을 확인하려면 어떻게해야합니까?

검사 할 수있는 시스템 카탈로그가 있어야한다고 가정하지만 Books-on-Line에는 엔드 포인트에 특정한 것이없는 것 같습니다 .Bing은 잘, Bingless입니다 ...


추가 정보:

SELECT ep.endpoint_id, p.class_desc, p.permission_name, ep.name, sp.name 
FROM sys.server_permissions p
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantee_principal_id = sp.principal_id
WHERE class = '105';

보고:

endpoint_id class_desc  permission_name endpoint_name   principal_name
2           ENDPOINT    CONNECT TSQL    Local Machine   public
3           ENDPOINT    CONNECT TSQL    Named Pipes     public
4           ENDPOINT    CONNECT TSQL    Default TCP     public
5           ENDPOINT    CONNECT TSQL    Default VIA     public

과:

SELECT name, endpoint_id, protocol_desc, type_desc, role_desc 
FROM sys.database_mirroring_endpoints;

보고:

name        endpoint_id  protocol_desc  type_desc           role_desc 
Mirroring   65536        TCP            DATABASE_MIRRORING  WITNESS

sys.server_permissions미러링 끝점 개체 에 대한 항목이없는 것 같습니다. No major_id및 no minor_id65536. 또한 시스템 데이터베이스 중 어느 것도 엔드 포인트에 대한 참조를 포함하지 않습니다.

나는 길을 잃었다.

답변:


7

SQL Server 2012 로의 전환을 준비하기 위해 DEV 환경에서 미러 된 데이터베이스를 서버에서 서버로 이동하는 데 하루를 보낸 후, MSDN 문서를 통해 ENDPOINT 보안이 계정 유형에 따라 결정된다고 설명했습니다. SQL Server가 실행 중입니다. SQL Server가 도메인 계정을 사용하는 경우 해당 계정은 자동으로 끝점에 액세스 할 수 있습니다. SQL Server가 [Network Service] 또는 [Local System] 등과 같은 기본 제공 계정을 사용하는 경우 끝점은 보안 인증서로 구성해야하며 인증서 소유자 만 끝점에 액세스 할 수 있습니다.

문서의 관련 섹션 :

데이터베이스 미러링 끝점에 대한 인증 유형 결정

서버 인스턴스의 SQL Server 서비스 계정에 따라 다음과 같이 데이터베이스 미러링 끝점에 사용할 수있는 인증 유형이 결정된다는 점을 이해해야합니다.

모든 서버 인스턴스가 도메인 서비스 계정으로 실행중인 경우 데이터베이스 미러링 끝점에 Windows 인증을 사용할 수 있습니다. 모든 서버 인스턴스가 동일한 도메인 사용자 계정으로 실행되면 두 마스터 데이터베이스 모두에 올바른 사용자 로그인이 자동으로 존재합니다. 이는 가용성 데이터베이스의 보안 구성을 단순화하며 권장됩니다.

가용성 그룹의 가용성 복제본을 호스팅하는 서버 인스턴스가 다른 계정으로 실행되는 경우 각 서버의 로그인은 다른 서버 인스턴스의 마스터에서 만들어야합니다. 그런 다음 해당 서버 인스턴스의 데이터베이스 미러링 엔드 포인트에 연결하려면 해당 로그인에 CONNECT 권한이 부여되어야합니다.

서버 인스턴스가 Windows 인증을 사용하는 경우 Transact-SQL, PowerShell 또는 New Availability Group Wizard를 사용하여 데이터베이스 미러링 끝점을 만들 수 있습니다.

노트 :

가용성 복제본을 호스팅 할 서버 인스턴스에 데이터베이스 미러링 끝 점이 없으면 새 가용성 그룹 마법사가 Windows 인증을 사용하는 데이터베이스 미러링 끝점을 자동으로 만들 수 있습니다.

로컬 시스템, 로컬 서비스 또는 네트워크 서비스와 같은 기본 제공 계정 또는 서버 이외의 계정으로 서버 인스턴스를 실행중인 경우 끝점 인증에 인증서를 사용해야합니다. 데이터베이스 미러링 엔드 포인트에 대한 인증서를 사용하는 경우 시스템 관리자는 아웃 바운드 및 인바운드 연결 모두에서 인증서를 사용하도록 각 서버 인스턴스를 구성해야합니다.

인증서를 사용하여 데이터베이스 미러링 보안을 구성하는 자동화 된 방법은 없습니다. CREATE ENDPOINT Transact-SQL 문 또는 New-SqlHadrEndpoint PowerShell cmdlet을 사용해야합니다. 자세한 내용은 CREATE ENDPOINT (Transact-SQL)를 참조하십시오.

Remus Rusanu (대답)는 미러링 엔드 포인트에서 보안을 제대로 결정하는 방법을 정확하게 식별했습니다. 에서와 같이 :

SELECT ep.name, sp2.name AS Grantee, sp.name AS Grantor, p.permission_name, ep.state_desc
FROM sys.server_permissions p 
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantor_principal_id = sp.principal_id
    INNER JOIN sys.server_principals sp2 ON p.grantee_principal_id = sp2.principal_id
WHERE p.class_desc = 'ENDPOINT' AND ep.type_desc = 'DATABASE_MIRRORING'

그러나 SQL Server 2005의 경우 원래 미러링 끝 점이이 쿼리의 결과에 표시되지 않습니다. 기본 보안은 SQL Server가 실행되는 계정에 대한 CONNECT 액세스를 허용하기 때문이라고 가정합니다 (위 설명 참조).

따라서 질문에 대한 정식 답변, ENDPOINT에 대한 CONNECT 액세스 권한을 가진 사람을 어떻게 알 수 있습니까? 위 쿼리의 합계이며 SQL Server가 사용하는 계정과 끝점에 대한 액세스로 구성한 가능한 인증서 .


4

방금 프로덕션 환경의 데이터베이스에 대해이 설정을 수행했으며 구성을 다른 미러링 세션과 비교하여 올바르게 일치하는지 확인 해야하는 것과 같은 일이 궁금했습니다.

sys.dm_db_mirroring_connections당신이 원하는 것을 제공해야합니다. 다음을 포함합니다 principal_name.

연결 권한에 대해 확인 된 로그인 이름입니다. Windows 인증의 경우이 값은 원격 사용자 이름입니다. 인증서 인증의 경우이 값은 인증서 소유자입니다.

정보가 여전히 리턴 될지 확실하지 않지만 일시 정지 된 세션으로 작업중인 경우 활성 연결 만 있다고 생각하십시오.


고마워, 숀 실제로 원격 사용자 이름이 끝점에 연결되어 있음을 보여 주지만 실제로는 사용자가 프로덕션 환경에서 연결할 수 있지만 테스트는 아닌 보안 설정에 대한 질문에 대답하지 않습니다. 어쨌든 도움을 주셔서 감사합니다!
맥스 버논

3

온라인 설명서를 참조하십시오 sys.database_mirroring_endpoints

서버 개체 권한의 경우 일반적인 위치를 확인하십시오 sys.server_permissions. Windows 보안이 관련된 모든 경우와 마찬가지로 Windows 그룹 멤버 자격으로 인해 상황이 더 복잡하며 권한 계층도 고려해야합니다 .


나는 그것을 보았지만 필요한 것은 엔드 포인트에 대한 CONNECT 액세스 권한이있는 로그인 목록입니다. sys.database_mirroring_endpoints는 그것을 보여주지 않는 것으로 보입니다.
맥스 버논

1
서버 개체 권한의 경우 일반적인 위치를 확인하십시오 sys.server_permissions. Windows 보안이 관련된 모든 경우와 마찬가지로 Windows 그룹 멤버 자격으로 인해 상황이 더 복잡하며 권한 계층도 고려해야합니다 .
레무스 루사 누

3
대답 자체에서 약간 자세히 설명 할 수 있습니까?
jcolebrand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.