저장된 프로시저 내부 동적 SQL 문 중 PRB: 보안 컨텍스트

기술 자료 번역 기술 자료 번역
기술 자료: 301299 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

현상

동적 실행 쿼리 (sp_executesql 또는 EXECUTE) 저장된 프로시저를 실행할 때 다음 오류 메시지가 나타날 수 있습니다.
서버: 메시지 229, 수준 14, 상태 5, 줄 1 ' permission ' 권한이 개체 ' object ', 데이터베이스 ' database ' 소유자 ' owner ' 거부되었습니다.

원인

동적 실행 쿼리 (sp_executesql 또는 EXECUTE) 주 저장 프로시저에서 별도의 컨텍스트에서 실행되기 때문에 이 문제가 발생합니다. 그리고 및 보안 컨텍스트가 아닌 저장 프로시저의 소유자는 저장된 프로시저를 실행하는 사용자의 보안 컨텍스트에서 실행됩니다.

참고: 소유권 체인을 결정하는 동안 고려하여가 이 동작을 수행해야 합니다.

해결 과정

이 문제를 해결하려면 다음을 수행합니다.
  • 동적 실행 쿼리에서 언급한 각 내부 개체에 대한 필요한 권한을 정확하게 부여해야 합니다.
  • 원래 테이블을 선택한 다음 EXEC 임시 테이블에 대해 SQL 문 모든 데이터가 포함된 임시 테이블을 만들려면 INTO 절 사용하여 SELECT 문을 실행할 수 있습니다. 처리할 테이블을 작은 경우 가능한 솔루션입니다.

추가 정보

이 문제는 보여 주는 코드입니다:
   create database dynamicSQL
   go
   use dynamicSQL
   create table employee(Name varchar(255), salary money)
   go
   create proc TestError @MySql nvarchar(500) As 
   exec (@mySql)
   go
   set nocount on
   insert employee select 'FunctionFunction', 100000
   insert employee select 'Function', 30000
   set nocount off
   exec sp_addlogin 'FunctionFunction'
   exec sp_adduser 'FunctionFunction'
   exec sp_addlogin 'Function'
   exec sp_adduser 'Function'

   grant execute on TestError to Function

   setuser 'Function'
				
이 문제는 다음 코드에서는 재생하기:
   go
   declare @Sql varchar(500)
   set @Sql = 'select * from employee where Name = ''FunctionFunction'''
   exec TestError @Sql
				
다음 코드를 사용하여 테스트 dynamicSql 데이터베이스와 이 전부 시나리오에 사용된 로그인을 삭제할:
   go
   setuser 
   use master
   drop database dynamicSql
   exec sp_droplogin  'FunctionFunction'
   exec sp_droplogin 'Function'
				
소유권 체인에 대한 자세한 내용은 SQL Server 온라인 설명서의 소유권 체인 사용 을 참조하십시오.

속성

기술 자료: 301299 - 마지막 검토: 2003년 10월 16일 목요일 - 수정: 3.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
키워드:?
kbmt kbprb KB301299 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com