비 sysadmin 계정이 SQL Server 2000에서 "xp_cmdshell" 확장 저장 프로시저를 실행 하도록 설정 하는 방법


요약


이 문서에서는 sysadmin 고정 서버 역할의 구성원이 아닌 SQL 로그인에서 사용할 Microsoft WINDOWS 수준의 SQL Server 에이전트 프록시 계정을 구성 하는 방법에 대해 설명 합니다. 또한 프록시 계정을 설정 하려고 할 때 발생할 수 있는 문제를 해결 하는 데 도움이 되는 추가 정보에 대 한 참조가 포함 되어 있습니다.

소개


Xp_cmdshell 확장 저장 프로시저는 Microsoft SQL Server 2000 내에서 Windows 명령 셸을 호출 합니다. Xp_cmdshell 확장 저장 프로시저가 sysadmin 고정 서버 역할의 구성원에 의해 실행 되는 경우 명령 셸의 Windows 프로세스는 SQL server의 windows 서비스 계정에 대 한 보안 컨텍스트를 사용 하 여 실행 됩니다. 예를 들어, SQL Server가 컴퓨터에 대 한 관리자 권한이 있는 Windows 로그온에서 실행 되는 경우 xp_cmdshell 확장 저장 프로시저를 사용 하 여 명령 프롬프트를 여는 사용자는 windows에 대 한 액세스 권한을 로컬 관리자로 받게 됩니다. 기본적으로 xp_cmdshell 확장 저장 프로시저를 실행 하는 권한은 sysadmin 고정 서버 역할의 구성원 에게만 부여 됩니다. 이 권한은 권한 승격을 막는 데 도움이 됩니다. 낮은 수준의 권한으로 새 Windows 프로세스를 시작 하려는 경우 SQL Server 에이전트 프록시 계정을 사용 하 여 적절 한 수준의 권한으로 Windows 계정을 구성할 수 있습니다.

추가 정보


Sysadmin 서버 역할의 구성원이 아니고 Sql server 에이전트 프록시 계정이 올바르게 설정 되지 않은 sql server 로그인에서 xp_cmdshell 확장 저장 프로시저를 실행 하려고 하면 다음과 같은 오류 메시지가 나타날 수 있습니다.
메시지 50001, 수준 1, 상태 50001 xpsql .cpp: GetProxyAccount에서 줄 499의 오류 997
메시지 50001, 수준 1, 상태 50001 xpsql .cpp: GetProxyAccount에서 줄 499의 오류 317
메시지 50001, 수준 1, 상태 50001 xpsql: GetProxyAccount의 499 줄에서 오류 0
메시지 50001, 수준 1, 상태 50001 xpsql .cpp: GetProxyAccount에서 줄 499의 오류 87
비 sysadmin 사용자가 SQL Server 2000에서 xp_cmdshell 확장 저장 프로시저를 실행 하도록 허용 해야 하는 경우 프록시 계정과 SQL server 시작 계정을 로컬 관리자 그룹의 구성원으로 구성 해야 합니다. SQL Server가 sysadmin 고정 서버 역할의 구성원이 아닌 사용자에 대 한 작업 또는 명령을 실행 하는 경우 SQL Server 에이전트 및 xp_cmdshell 확장 저장 프로시저에서 프록시 계정을 사용 합니다. 프록시 계정에 대 한 Windows 보안 자격 증명은 LSA (로컬 보안 기관) 비밀 데이터베이스에 저장 됩니다. Windows 관리자만이 정보에 액세스할 수 있습니다. 따라서 SQL Server 시작 계정이 로컬 관리자 그룹의 구성원이 아니면 사용자는 Windows 보안 자격 증명을 저장 하거나 검색 하 여 프록시 계정으로 로그온 할 수 없으며, xp_cmdshell 확장 저장 프로시저가 실패 합니다. 비 sysadmin 사용자가 xp_cmdshell 확장 저장 프로시저를 실행할 수 있도록 하려면 SQL Server 시작 계정이 로컬 관리자 그룹의 구성원 이어야 합니다. Sysadmin 고정 서버 역할의 구성원이 아닌 SQL Server 로그인에 대 한 프록시 계정을 구성 하려면 다음 방법 중 하나를 사용 합니다.

방법 1: SQL Server 엔터프라이즈 관리자 사용

Windows 계정 구성

비 sysadmin 사용자가 xp_cmdshell 확장 저장 프로시저를 실행할 수 있도록 Windows 계정을 설정 하려면 다음 단계를 따릅니다.
  1. SQL Server 엔터프라이즈 관리자를 시작 합니다.
  2. SQL Server 엔터프라이즈 관리자에서 MICROSOFT Sql server를 확장 한 다음 SQL server 그룹을 확장 합니다.
  3. 프록시 계정을 설정할 SQL Server 인스턴스를 확장 합니다.
  4. 관리를 확장 하 고 SQL Server 에이전트를 마우스 오른쪽 단추로 클릭 한 다음 속성을 클릭 합니다.
  5. SQL Server 에이전트 속성 대화 상자에서 작업 시스템 탭을 클릭 합니다.
  6. Sysadmin이 아닌 작업 단계 프록시 계정에서 sysadmin 권한만 있는 사용자만 CmdExec 및 ActiveScripting 작업 단계를 실행할 수 있음 확인란을 선택 취소 합니다.
  7. SQL Server 에이전트 프록시 계정대화 상자에서 사용자 이름상자에 Windows 계정 이름을 입력 합니다.
  8. 비밀 번호 상자에 Windows 비밀 번호를 입력 합니다.
  9. Domain ( 도메인 ) 상자에 Windows 계정이 속한 도메인을 입력 한 다음 확인을 두 번 클릭 합니다.

SQL Server 로그인 계정 추가

Xp_cmdshell 확장 저장 프로시저를 실행할 수 있는 권한을 부여 하려는 SQL Server 로그인 계정을 추가 하려면 다음 단계를 따릅니다.
  1. SQL Server Enterpise 관리자에서보안을 확장 합니다.
  2. 로그인 창에서 사용 권한을 부여할 SQL Server 로그인 계정을 마우스 오른쪽 단추로 클릭 한 다음속성을 클릭 합니다.참고 계정이 아직 추가 되지 않은 경우 Windows 프록시 계정을 로그인 계정으로 만들 수 있습니다.
  3. SQL Server 로그인 속성 대화 상자에서 데이터베이스 액세스 탭을 클릭 합니다.
  4. 이 로그인으로 액세스할 수 있는 데이터베이스 지정 목록에서 master 데이터베이스에 대해 허용 확인란을 클릭 하 여 선택한 다음 확인을클릭 합니다.
  5. 데이터베이스를 확장 하 고master를 확장 한 다음 저장 프로시저 확장을 클릭 합니다.
  6. Xp_cmdshell 확장 저장 프로시저를 찾아 마우스 오른쪽 단추로 클릭 한 다음속성을 클릭 합니다.
  7. 확장 저장 프로시저 속성 대화 상자에서 사용 권한을클릭 합니다.
  8. 실행 권한을 부여할 SQL Server 로그인 계정에 대 한 EXEC 확인란을 클릭 하 여 선택한 다음 확인 을 두 번 클릭 합니다.

방법 2: Transact-sql 스크립트 실행

다음 Transact-sql 스크립트를 실행 하 여 Windows 계정이 xp_cmdshell 확장 저장 프로시저를 실행할 수 있도록 설정 합니다.
-- Set database to master.USE masterGO-- Add a valid Windows account as proxy account.EXECUTE xp_sqlagent_proxy_account N'SET'                        , N'<DomainName>'                        , N'<WindowsAccount>'                        , N'<WindowsPassword>'GO-- Get the proxy account to determine whether it is set up correctly. EXECUTE xp_sqlagent_proxy_account N'GET'GO-- Enable non-system administrators to run the job and to execute xp_cmdshell.EXECUTE msdb..sp_set_sqlagent_properties @sysadmin_only = 0GO
참고 이 스크립트에서 DomainName< 는 Windows 계정이 속한 도메인입니다>. <windowsaccount> 는 Windows 계정 이름입니다. <WindowsPassword> 는 Windows 계정의 암호입니다. Xp_cmdshell 확장 저장 프로시저를 실행할 수 있는 권한을 부여 하려는 SQL Server 로그인 계정을 추가 하려면 다음 transact-sql 스크립트를 실행 합니다.
USE masterGO-- Grant database access to the SQL Server login account that you want to provide access.EXEC sp_grantdbaccess '<SQLLogin>'GO-- Grant execute permission on xp_cmdshell to the SQL Server login account.GRANT exec ON xp_cmdshell TO <SQLLogin>GO
참고 이 스크립트에서 <SQLLogin>xp_cmdshell 확장 저장 프로시저를 실행할 수 있는 권한을 부여 하려는 SQL Server 로그인입니다.참고 프록시 계정은 SQL Server 에이전트 작업 또는 명령줄 명령이 실행 되는 보안 컨텍스트를 포함 하는 Windows 계정입니다. SQL Server 에이전트 프록시 계정에 대 한 Windows 계정을 설정 하는 경우 Windows 수준의 "일괄 작업으로 로그온" 사용자 권한을 계정에 부여 해야 합니다.

참조


Xp_cmdshell 확장 저장 프로시저에 대 한 자세한 내용은 SQL Server 온라인 설명서의 "transact-sql 참조" 항목을 참조 하세요. SQL Server 에이전트 프록시 계정에 대 한 자세한 내용을 보려면 다음 MSDN (Microsoft Developer Network) 웹 사이트를 방문 하세요.프록시 계정에 대해 적절 한 사용 권한을 설정 하는 방법에 대 한 자세한 내용은 다음 문서 번호를 클릭 하 여 Microsoft 기술 자료 문서를 참조 하세요.
283811 Sql server 2000 또는 sql server에서 sql server 구성 관리자에서 sql 엔터프라이즈 관리자를 사용 하지 않고 SQL Server 또는 SQL Server 에이전트 서비스 계정을 변경 하는 방법 2005