다음을 통해 공유


서비스 SID를 사용하여 SQL Server의 서비스에 사용 권한 부여

SQL Server는 서비스 보안 주체라고도 하는 서비스별 SID(보안 식별자)를 사용하여 특정 서비스에 직접 권한을 부여할 수 있도록 합니다. 이 메서드는 SQL Server에서 엔진 및 에이전트 서비스(각각 NT SERVICE\MSSQL$<InstanceName 및 NT SERVICE\SQLAGENT$>InstanceName<>)에 권한을 부여하는 데 사용됩니다. 이 방법을 사용하면 서비스가 실행 중인 경우에만 해당 서비스가 데이터베이스 엔진에 액세스할 수 있습니다. 자세한 내용은 KB2620201(보관 링크)를 참조하세요.

다른 서비스에 권한을 부여할 때 이 동일한 메서드를 사용할 수 있습니다. 서비스 SID를 사용하면 서비스 계정 관리 및 유지 관리의 오버헤드를 제거하고 시스템 리소스에 부여된 권한에 대해 보다 세분화된 제어를 제공합니다.

서비스 SID를 사용할 수 있는 서비스의 예는 다음과 같습니다.

  • 시스템 센터 운영 관리자 헬스 서비스(NT SERVICE\HealthService)
  • Windows Server 장애 조치 클러스터링(WSFC) 서비스(NT SERVICE\ClusSvc)

일부 서비스에는 기본적으로 서비스 SID가 없습니다. 서비스 SID는 SC.exe사용하여 만들어야 합니다. 이 방법은 Microsoft System Center Operations Manager 관리자가 SQL Server 내 HealthService에 대한 권한을 부여하기 위해 채택되었습니다.

서비스 SID가 만들어지고 확인되면 SQL Server 내에서 권한을 부여해야 합니다. 사용 권한 부여는 SSMS(SQL Server Management Studio) 또는 Transact-SQL 쿼리를 사용하여 Windows 로그인을 만들어서 수행됩니다. 로그인이 만들어지면 권한을 부여하고, 역할에 추가하고, 다른 로그인과 마찬가지로 데이터베이스에 매핑할 수 있습니다.

팁 (조언)

오류가 Login failed for user 'NT AUTHORITY\SYSTEM' 수신되면 원하는 서비스에 대한 서비스 SID가 있는지 확인하고, 서비스 SID 로그인이 SQL Server에서 만들어졌으며, SQL Server의 서비스 SID에 적절한 권한이 부여되었는지 확인합니다.

Security

서비스 계정 제거

일반적으로 서비스 계정은 서비스가 SQL Server에 로그인할 수 있도록 하는 데 사용되었습니다. 서비스 계정은 서비스 계정 암호를 유지 관리하고 주기적으로 업데이트해야 하므로 관리 복잡성을 더합니다. 또한 인스턴스에서 작업을 수행할 때 해당 활동을 마스킹하려는 개인이 서비스 계정 자격 증명을 사용할 수 있습니다.

시스템 계정에 대한 세분화된 권한

시스템 계정에는 역사적으로 LocalSystem 또는 NetworkService 계정의 로그인을 생성하여 해당 로그인의 권한을 부여하는 방식으로 사용 권한이 부여되었습니다. 이 메서드는 시스템 계정으로 실행되는 SQL에 모든 프로세스 또는 서비스 권한을 부여합니다.

서비스 SID를 사용하면 특정 서비스에 권한을 부여할 수 있습니다. 서비스는 실행 중일 때 권한이 부여된 리소스에만 액세스할 수 있습니다. 예를 들어 HealthServiceLocalSystem로 실행되고 View Server State이(가) 부여된 경우, LocalSystem 계정은 HealthService의 컨텍스트에서 실행될 때만 View Server State의 권한을 갖습니다. 다른 프로세스가 SQL LocalSystem의 서버 상태에 액세스하려고 하면 액세스가 거부됩니다.

예시

A. 서비스 SID 만들기

다음 PowerShell 명령은 System Center Operations Manager 상태 서비스에 서비스 SID를 만듭니다.

sc.exe --% sidtype "HealthService" unrestricted

중요합니다

--% 는 명령의 나머지 부분 구문 분석을 중지하도록 PowerShell에 지시합니다. 이 기능은 레거시 명령 및 애플리케이션을 사용할 때 유용합니다.

B. 서비스 SID 쿼리

서비스 SID를 확인하거나 서비스 SID가 있는지 확인하려면 PowerShell에서 다음 명령을 실행합니다.

sc.exe --% qsidtype "HealthService"

중요합니다

--% 는 명령의 나머지 부분 구문 분석을 중지하도록 PowerShell에 지시합니다. 이 기능은 레거시 명령 및 애플리케이션을 사용할 때 유용합니다.

C. 새로 만든 서비스 SID를 로그인으로 추가

다음 예제에서는 T-SQL을 사용하여 System Center Operations Manager 상태 서비스에 대한 로그인을 만듭니다.

CREATE LOGIN [NT SERVICE\HealthService] FROM WINDOWS
GO

D. 기존 서비스 SID를 로그인으로 추가

다음 예제에서는 T-SQL을 사용하여 클러스터 서비스에 대한 로그인을 만듭니다. 클러스터 서비스에 권한을 직접 부여하면 SYSTEM 계정에 과도한 권한을 부여할 필요가 없습니다.

CREATE LOGIN [NT SERVICE\ClusSvc] FROM WINDOWS
GO

E. 서비스 SID에 사용 권한 부여

클러스터 서비스에 가용성 그룹을 관리하는 데 필요한 권한을 부여합니다.

GRANT ALTER ANY AVAILABILITY GROUP TO [NT SERVICE\ClusSvc]
GO

GRANT CONNECT SQL TO [NT SERVICE\ClusSvc]
GO

GRANT VIEW SERVER STATE TO [NT SERVICE\ClusSvc]
GO

비고

서비스 SID 로그인을 제거하거나 sysadmin 서버 역할에서 제거하면 SQL Server 데이터베이스 엔진에 연결하는 SQL Server의 다양한 구성 요소에 문제가 발생할 수 있습니다. 몇 가지 문제는 다음과 같습니다.

  • SQL Server 에이전트가 SQL Server 서비스를 시작하거나 연결할 수 없음
  • SQL Server 설치 프로그램에는 다음 Microsoft 기술 자료 문서에 언급된 문제가 발생합니다. https://mskb.pkisolutions.com/kb/955813

SQL Server의 기본 인스턴스의 경우 다음 Transact-SQL 명령을 사용하여 서비스 SID를 추가하여 이 상황을 해결할 수 있습니다.

CREATE LOGIN [NT SERVICE\MSSQLSERVER] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\MSSQLSERVER]

CREATE LOGIN [NT SERVICE\SQLSERVERAGENT] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\SQLSERVERAGENT]

명명된 SQL Server 인스턴스의 경우 다음 Transact-SQL 명령을 사용합니다.

CREATE LOGIN [NT SERVICE\MSSQL$SQL2019] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\MSSQL$SQL2019]

CREATE LOGIN [NT SERVICE\SQLAgent$SQL2019] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\SQLAgent$SQL2019]

이 예제에서는 SQL2019 SQL Server의 인스턴스 이름입니다.

다음 단계

서비스 sid 구조에 대한 자세한 내용은 SERVICE_SID_INFO 구조를 참조하세요.

로그인을 만들 때 사용할 수 있는 추가 옵션 에 대해 알아봅니다.

서비스 SID에서 Role-Based 보안을 사용하려면 SQL Server에서 역할을 만드는 방법을 읽어봅니다.

SQL Server에서 서비스 SID에 권한을 부여하는 다양한 방법을 알아봅니다.

SQL Server에 대한 서비스 계정을 구성하는 방법에 대한 자세한 내용은 Windows 서비스 계정 및 권한 구성을 참조하세요.