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

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

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

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

  • System Center Operations Manager 상태 서비스(NT SERVICE\HealthService)
  • WSFC(Windows Server 장애 조치(failover) 클러스터링) 서비스(NT SERVICE\ClusSvc)

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

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

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

보안

서비스 계정 제거

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

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

시스템 계정에는 지금까지 LocalSystem(NT AUTHORITY\SYSTEM in en-us) 또는 NetworkService(en-us의 NT AUTHORITY\NETWORK SERVICE) 계정에 대한 로그인을 만들고 해당 로그인 권한을 부여하여 사용 권한이 부여되었습니다. 이 메서드는 시스템 계정으로 실행되는 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

Important

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

B. 서비스 SID 쿼리

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

sc.exe --% qsidtype "HealthService"

Important

--% 는 명령의 나머지 부분 구문 분석을 중지하도록 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에서 역할 기반 보안을 사용하려면 SQL Server에서 역할을 만드는 방법을 읽어봅니다.

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

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