source

다른 사용자로 오라클 저장 프로시저 실행

ittop 2023. 8. 20. 12:38
반응형

다른 사용자로 오라클 저장 프로시저 실행

저는 대부분 오라클 초보자입니다. 그러니 이게 바보 같은 질문이라면 용서해 주세요.

저는 임의의 SQL을 실행하는 저장된 proc를 가진 'CODE'라는 스키마를 가지고 있습니다(지금은 그것과 관련된 잠재적인 보안 문제는 무시해 주십시오).전달된 SQL은 데이터를 선택하지만 모든 데이터는 스키마 A, B 또는 C에 있지만 SQL은 한 번에 하나의 스키마에서만 선택합니다.

예:A 유형의 사용자는 'SELECT * FROM A' 문자열을 생성합니다.USERTABLE' - 유형 B의 사용자는 'SELECT * FROM B' 문자열을 만듭니다.'사용할 수 있습니다.

제가 하려는 것은 사용자가 스키마를 명시적으로 지정하지 않도록 하는 것입니다.프런트엔드 .net 응용 프로그램에서 이미 A, B 또는 C 유형인지 알고 있습니다.저는 세 명 모두 'SELECT * FROM USERTABLE'을 입력하기를 원합니다.

제가 안고 있는 문제는 제가 그것을 하는 방법을 모른다는 것입니다.제 앱은 'CODE' 스키마에서만 proc를 실행할 수 있기 때문에 코드를 복제하고 사용자 A가 'A'를 호출하도록 할 수 없습니다.'SQL 실행'입니다.

저는 몇 가지 시도를 해봤지만, 지금까지 아무 것도 효과가 없었습니다.나는 이그제큐트를 원합니다.SQL proc는 CODE 스키마에 유지되지만, 'USERTABLE'이 전달될 때 때때로 그것이 A를 의미한다는 것을 알아야 합니다.사용자 이름(경우에 따라 B).사용자 이름.

좋은 의견이라도 있나?

사용:

ALTER SESSION SET CURRENT_SCHEMA = schema

이는 SQL Server의 구문과 동일합니다.

다른 옵션은 AUTHID CURRENT_USER 플러그마를 사용하는 것입니다.

패키지, 프로시저, 함수 또는 유형 이름 바로 뒤에 이 두 키워드를 추가하면 CODE 스키마가 아닌 실행 중인 사용자의 권한으로 실행됩니다.이는 AUTHID DEFINEER(코드를 컴파일한 스키마/사용자의 권한)인 기본 동작을 재정의합니다.

예.

CREATE FUNCTION examplefunc
    (pSqlStatement IN VARCHAR2)
RETURN INTEGER
  AUTHID CURRENT_USER
AS 
   lResult INTEGER;
BEGIN
    EXECUTE IMMEDIATE pSqlStatement INTO lResult;
    RETURN lResult;
END examplefunc;

패키지 내부의 기능 및 프로시저에 대해서는 패키지 수준에서만 플러그마를 적용할 수 있습니다.기능별로 권한을 설정할 수 없습니다.

이렇게 하면 함수, 패키지 등의 내부 SQL이 사용자 권한으로 실행됩니다.

유사한 '오래된 SQL 비트를 동적으로 실행' 루틴을 관리하는 데 사용했습니다. 최소한 '일반' 사용자가 저장 프로시저를 사용하여 테이블을 삭제하거나 CODE 스키마에 추가 코드를 설치할 수 없도록 했을 것입니다.

(아직 특정 키워드를 삭제하기 위해 유효성 검사를 추가하지 않은 경우, 즉 SELECT로 시작해야 하며, 내장된 pl/sql 블록을 포함해서는 안 되며 기존 코드를 깨지 않고 빠져나갈 수 있는 모든 것을 추가하는 것도 가치가 있을 수 있습니다.)

언급URL : https://stackoverflow.com/questions/2376664/executing-an-oracle-stored-proc-as-another-user

반응형