SHOWPLAN 권한 및 Transact-SQL 일괄 처리

Transact-SQL 일괄 처리는 하나 이상의 문으로 구성됩니다. 이 항목에서는 다양한 실행 계획 SET 문 옵션을 Transact-SQL 일괄 처리에 사용할 때 SQL Server에서 해당 옵션에 대한 SHOWPLAN 권한을 어떻게 확인하는지 설명합니다.

보안 정보보안 정보

SHOWPLAN, ALTER TRACE 또는 VIEW SERVER STATE 권한이 있는 사용자는 실행 계획 출력에 캡처된 쿼리를 볼 수 있습니다. 이러한 쿼리에는 암호 같은 중요한 정보가 포함되어 있을 수 있습니다. 따라서 db_owner 고정 데이터베이스 역할의 멤버나 sysadmin 고정 서버 역할의 멤버 같이 중요한 정보를 볼 지위에 있는 사용자에게만 이러한 권한을 부여하는 것이 좋습니다. 또한 실행 계획 파일을 저장하거나 실행 계획 관련 이벤트가 포함된 파일을 추적할 때는 NTFS 파일 시스템이 적용된 위치만 사용하고 중요한 정보를 볼 지위에 있는 사용자에게만 해당 위치에 대한 액세스 권한을 부여하는 것이 좋습니다.

USE 또는 SET 문이 포함된 일괄 처리

USE 또는 SET 문에서는 어떠한 실행 계획 SET 옵션(SHOWPLAN_TEXT, SHOWPLAN_ALL, SHOWPLAN_XML, STATISTICS PROFILE 또는 STATISTICS XML)에 대해서도 SHOWPLAN 권한을 확인하지 않았습니다. 예상 실행 계획 출력을 생성하는 SHOWPLAN_TEXT, SHOWPLAN_ALL 및 SHOWPLAN_XML의 경우 실행 계획 SET 옵션에 대해 실행되는 USE database_name 문을 제외하고 일괄 처리 내의 어떠한 Transact-SQL 문도 실행되지 않습니다.

SHOWPLAN 권한 확인 예

컨텍스트 데이터베이스는 USE database_name 문을 사용하여 일괄 처리로 설정되어 있습니다. Transact-SQL 문에서 참조되는 테이블 또는 뷰 같은 개체가 있는 데이터베이스의 SHOWPLAN 권한이 확인됩니다. 그러나 Transact-SQL 문이 컨텍스트 데이터베이스의 개체를 참조하지 않으면 컨텍스트 데이터베이스에서 SHOWPLAN 권한이 확인되지 않습니다.

일괄 처리에 USE database_name 문이 있는 경우 컨텍스트 데이터베이스가 변경됩니다. 이 경우 특정 문이 일괄 처리로 수행될 때 유효한 컨텍스트 데이터베이스를 SHOWPLAN 권한으로 확인하지 않습니다.

예를 들어 다음 일괄 처리의 경우 AdventureWorks 데이터베이스에서 두 개의 SELECT 문에 대해 SHOWPLAN 권한을 확인합니다. USE 문에서 참조되는 master 또는 tempdb 데이터베이스에서는 SHOWPLAN 권한이 확인되지 않습니다.

SET SHOWPLAN_XML ON
GO
USE tempdb
SELECT * FROM AdventureWorks.Person.Address
USE master
SELECT * FROM AdventureWorks.Person.Address
GO

동적 SQL의 SHOWPLAN 권한 확인

  • EXEC(command_string) 또는 EXEC(character_string) 형식의 동적 SQL 문의 경우 포함된 문자열을 비롯하여 문에 대한 SHOWPLAN 권한 확인이 수행되지 않습니다.

  • my_stored_procedure 형식의 저장 프로시저를 실행하는 동적 SQL 문의 경우 EXEC 문 자체에 대한 SHOWPLAN 권한이 확인되지 않습니다. 그러나 실행 계획이 전체 저장 프로시저 본문에 대해 생성되므로 저장 프로시저의 문에서 참조되는 개체를 포함하는 데이터베이스에서 SHOWPLAN 권한을 확인합니다.

다음 예는 동적 SQL 문에 대해 SHOWPLAN 권한을 확인하는 방법을 보여 줍니다. SELECT 문의 경우 SHOWPLAN 권한을 AdventureWorks 데이터베이스에서 확인합니다. SHOWPLAN 권한 확인은 EXEC 문, tempdb 데이터베이스 또는 master 데이터베이스에서 수행됩니다.

SET SHOWPLAN_XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks.Person.Address');

SET STATISTICS XML이 사용된 다음 예에서 일괄 처리가 master 데이터베이스로 전송된 경우 SHOWPLAN 권한을 SET 문에서 확인하지 않습니다. USE tempdb 문에서 SHOWPLAN 권한을 확인하지 않습니다. 그러나 USE 문에 대해 CONNECT 권한을 확인하므로 사용자는 이미 tempdb 데이터베이스에 있어야 하고 tempdb 데이터베이스에 대한 CONNECT 권한이 있어야 합니다. EXEC 문을 통해 생성된 실행 계획 출력이 없으므로 EXEC 문에 대해 SHOWPLAN 권한을 확인하지 않습니다. USE master 문에서 SHOWPLAN 권한을 확인하지 않습니다. 그러나 AdventureWorks에서 SELECT 문에 대해 SHOWPLAN 권한을 확인합니다.

SET STATISTICS XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks.Person.Address');
보안 정보보안 정보

이전 버전의 SQL Server를 참조하는 쿼리에 대해 SHOWPLAN 권한을 확인하지 않습니다. 하지만 SQL Server 2005 이상 버전에서 실행되는 쿼리의 일부분의 경우 SHOWPLAN 권한을 확인합니다.

오류가 포함된 일괄 처리

실행 계획 SET 문 옵션이 문 실행 오류 또는 사용 권한 확인 오류를 생성하는 Transact-SQL 일괄 처리에 사용되면 컨텍스트 데이터베이스의 상태는 사용되는 SET 옵션 모드에 따라 다음과 같이 결정됩니다.

  • SHOWPLAN_TEXT, SHOWPLAN_ALL 및 SHOWPLAN_XML

    일괄 처리가 실행되기 전에 유효했던 컨텍스트 데이터베이스는 유효한 상태로 유지됩니다. 문 실행이나 사용 권한 확인 오류가 발생하면 전체 일괄 처리에 대해 실행 계획 출력이 생성되지 않습니다. 모든 사용 권한 확인 및 문이 성공적으로 실행되어야 하며, 그렇지 않은 경우 실행 계획 출력이 생성되지 않습니다.

  • STATISTICS PROFILE 및 STATISTICS XML

    마지막 문이 성공적으로 실행되었을 때 유효했던 컨텍스트 데이터베이스는 유효한 상태로 유지됩니다. 각 문이 성공적으로 실행되었던 일괄 처리의 문에 대해 실행 계획 출력이 생성되고 사용 권한이 확인됩니다. 성공적으로 실행되고 사용 권한이 확인된 일괄 처리의 각 문에 대해 실행 계획 출력이 생성됩니다.

변경 내역

업데이트된 내용

실행 계획 파일 또는 추적 파일에 표시될 수 있는 중요한 정보를 보호하는 데 대한 보안 참고 사항을 추가했습니다.

참고 항목

개념