다음을 통해 공유


SQL Server 에이전트 보안 구현

적용 대상: SQL Server Azure SQL Managed Instance

Important

현재 Azure SQL Managed Instance에서는 SQL Server 에이전트 기능이 대부분 지원됩니다. 자세한 내용은 SQL Server와 Azure SQL Managed Instance 간의 T-SQL 차이점을 참조하세요.

SQL Server 에이전트를 사용하면 데이터베이스 관리자가 SQL Server 에이전트 프록시에 의해 결정된 각 작업 단계를 수행하는 데 필요한 사용 권한만 있는 보안 컨텍스트에서 각 작업 단계를 실행할 수 있습니다. 특정 작업 단계의 사용 권한을 설정하려면 필요 사용 권한을 가진 프록시를 만든 다음 해당 프록시를 작업 단계에 할당하십시오. 프록시는 둘 이상의 작업 단계에 대해 지정할 수 있습니다. 동일한 권한이 필요한 작업 단계의 경우 동일한 프록시를 사용합니다.

다음 섹션에서는 SQL Server 에이전트를 사용하여 작업을 만들거나 실행할 수 있도록 사용자에게 부여해야 하는 데이터베이스 역할에 대해 설명합니다.

SQL Server 에이전트에 대한 액세스 권한 부여

SQL Server 에이전트를 사용하려면 사용자가 다음 고정 데이터베이스 역할 중 하나 이상의 멤버여야 합니다.

  • SQLAgentUserRole

  • SQLAgentReaderRole

  • SQLAgentOperatorRole

이러한 역할은 msdb 데이터베이스에 저장됩니다. 기본적으로 사용자는 이러한 데이터베이스 역할의 멤버가 아닙니다. 이러한 역할의 멤버는 명시적으로 부여되어야 합니다. sysadmin 고정 서버 역할 구성원인 사용자에게는 SQL Server 에이전트에 대한 모든 권한이 있고, 이러한 고정 데이터베이스 역할의 구성원이 아니어도 SQL Server 에이전트를 사용할 수 있습니다. 사용자가 이러한 데이터베이스 역할 중 하나의 구성원이 아니거나 sysadmin 역할이 아닌 경우, SQL Server Management Studio를 사용해 SQL Server에 연결할 때 SQL Server 에이전트 노드가 제공되지 않습니다.

이러한 데이터베이스 역할의 멤버는 자신이 소유한 작업을 보고 실행하고, 기존 프록시 계정으로 실행되는 작업 단계를 만들 수 있습니다. 이러한 각 역할과 관련된 특정 권한에 대한 자세한 내용은 SQL Server 에이전트 고정 데이터베이스 역할을 참조하세요.

sysadmin 고정 서버 역할의 멤버에는 프록시 계정을 만들고 수정하고 삭제할 수 있는 권한이 있습니다. sysadmin 역할의 구성원에게는 프록시를 지정하지 않는 작업 단계를 만들 권한이 있고, 대신 SQL Server 에이전트 서비스 계정으로 실행되게 할 수 있습니다. 이 계정은 SQL Server 에이전트를 시작하는 데 사용되는 계정입니다.

지침

SQL Server 에이전트 구현에 대한 보안을 향상시키려면 다음 지침을 따르세요.

  • 프록시용 전용 사용자 계정을 만들고 이러한 프록시 사용자 계정만 작업 단계를 실행하는 데 사용합니다.

  • 프록시 사용자 계정에는 필요한 권한만 부여합니다. 주어진 프록시 계정에 할당된 작업 단계를 실행하는 데 필요한 권한만 부여하세요.

  • Windows 관리자 그룹의 구성원인 Microsoft Windows 계정 아래에서 SQL Server 에이전트 서비스를 실행하면 안 됩니다.

  • 프록시는 SQL Server 자격 증명 저장소만큼만 안전합니다.

  • 사용자 쓰기 작업으로 NT 이벤트 로그에 쓸 수 있는 경우 SQL Server 에이전트를 통해 경고를 올립니다.

  • NT 관리자 계정을 서비스 계정이나 프록시 계정으로 지정하지 마세요.

  • SQL Server와 SQL Server 에이전트에는 서로의 자산에 대한 액세스 권한이 있습니다. 두 서비스가 단일 프로세스 공간을 공유하고 SQL Server 에이전트는 SQL Server 서비스의 sysadmin입니다.

  • TSX(대상 서버)를 MSX(마스터 서버)와 함께 등록하면 MSX sysadmin이 SQL Server가 아니라 TSX 인트턴스에 대한 제어권을 장악하게 됩니다.

  • ACE는 확장 프로그램이며 자기 자신을 호출할 수 없습니다. Chainer ScenarioEngine.exe(Microsoft.SqlServer.Chainer.Setup.exe라고도 함)가 ACE를 호출할 수 있습니다. 다른 호스트 프로세스도 ACE를 호출할 수 있습니다.

  • ACE는 SSDP가 소유한 다음과 같은 구성 DLL에 따라 다릅니다. 이러한 DLL의 API를 ACE가 호출하기 때문입니다.

    • SCO -가상 계정에 대한 새 SCO 자격 증명이 포함된 Microsoft.SqlServer.Configuration.Sco.dll

    • 클러스터 - Microsoft.SqlServer.Configuration.Cluster.dll

    • SFC - Microsoft.SqlServer.Configuration.SqlConfigBase.dll

    • 확장 - Microsoft.SqlServer.Configuration.ConfigExtension.dll

연결된 서버

몇몇 상황에서는(예: Azure SQL Managed Instance를 사용하는 경우), 연결된 서버를 통해 원격 서버에서 Transact-SQL(T-SQL) 쿼리를 실행하는 SQL 에이전트 작업을 실행하려면 로컬 로그인을 원격 서버의 로그인에 매핑해야 합니다.

sp_addlinkedsrvlogin을 사용해 로컬 서버 로그인과 T-SQL 쿼리를 실행하는 데 필요한 권한이 있는 원격 서버 로그인 사이 매핑을 만듭니다. SQL 에이전트 작업이 연결된 서버를 통해 원격 서버에 연결되면, 원격 로그인 컨텍스트에서 T-SQL 쿼리를 실행합니다.

다음 표에 Azure SQL Managed Instance의 SQL 에이전트 작업 소유자에 따라 로그인을 매핑하는 방법을 설명했습니다.

SQL 에이전트 작업 소유자 로그인 매핑 방법
sysadmin이 아닌 사용자 SQL 에이전트 작업을 소유하는 로컬 사용자를 원격 로그인에 매핑합니다.
sysadmin 모든 로컬 사용자를 원격 로그인에 매핑하려면 @locallogin 매개 변수를 NULL로 설정합니다.

참고 사항

로컬 서버가 Azure SQL Managed Instance인 경우, SQL 에이전트 작업에 대한 원격 서버에서 로그인을 만들어야 합니다. 사용자를 정확하게 매핑하지 않으면 다음 예와 같은 오류가 발생할 수 있습니다.

  • Windows logins are not supported in this version of SQL Server
  • Linked servers cannot be used under impersonation without a mapping for the impersonated login