SQL Server EXECUTE AS 문제


13

저장 프로 시저를 사용하려고 할 때 무언가가 없습니다 EXECUTE AS. 저장 프로 시저가에서 데이터를 읽고 source_db집계하여 결과를 저장 target_db합니다.

sp 자체는입니다 target_db. 나는 전용 로그인이 모두 사용자에게 매핑 source_dbtarget_dbSP의 소유자 (그래서 사용자가 app_agent에서 source_db와에서 target_db로그인에 대한 app_agent).

로 로그인하여 app_agent실행하면

EXEC target_db.app_agent_schema.import_data

모든 것이 잘 작동합니다. 하지만 내가 변하면

ALTER PROCEDURE app_agent_schema.import_data WITH EXECUTE AS OWNER` (or `AS SELF`) 

실행 해보십시오.

서버 보안 주체 "app_agent"는 현재 보안 컨텍스트에서 "source_db"데이터베이스에 액세스 할 수 없습니다.

SQL Server 2008을 사용하고 있습니다.

누군가 내 오류를 지적 할 수 있습니까?

감사

업데이트 몇 가지 연구를 한 결과 ALTER DATABASE target_db SET TRUSTWORTHY ON문제 가 해결되었지만 올바른 해결책은 아닙니다.


1
대답은 데이터베이스 수준 의 데이터베이스 간 소유권 체인 옵션을 사용하고 있다고 생각합니다 . 시나리오에서 오류를 재현 할 수 있었지만 정확하게 재현했는지 여부를 알 수있는 세부 정보가 충분하지 않습니다 ... CDOC 옵션이 작동하지 않지만 시도해보십시오.
Jon Seigel

답변:


24

EXECUTE AS를 사용하여 데이터베이스 가장 확장 에서 설명 합니다. EXECUTE AS 컨텍스트는 현재 데이터베이스에서만 신뢰되며 다른 데이터베이스로 넘겨지는 것은 권한 공격 벡터의 확대입니다.

위에 링크 된 기사에 설명 된 두 가지 솔루션이 있습니다.

  • 가장 쉬운 방법은 데이터베이스를 TRUSTWORTHY :로 표시하는 것 ALTER DATABASE [source_db] SET TRUSTWORTHY ON;입니다. 간단하지만, 또한이 수로 위험 dbosource_db사실상를 sysadmin.

  • 안전한 방법은 코드 서명을 사용 하는 것입니다. 예를 보려면 다른 데이터베이스에서 프로 시저 호출을 참조하십시오 . 이것은 더 복잡하지만 100 % buletproff 보안입니다.


0

어떤 사용자가 ALTER PROCEDURE 명령을 실행합니까? 소유자 (자체) 액세스 수준을 원하는 사용자가 아닌 해당 사용자로 설정했을 수 있습니다.


프로 시저를 작성한 동일한 사용자 ( app_agent) app_agentwithout execute as owner/self에 의해 생성 된 프로 시저가있는 경우로 로그인 app_agent하면 SP가 올바르게 실행됩니다. 내가 추가하는 경우 EXECUTE AS SELF(다시, 동일한 사용자) 및 로그인 심지어 app_agent, 내가 얻을...is not able to access the database...
a1ex07
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.