2011-03-22 2 views

답변

3

저장 프로 시저 내에 DDL (예 : GRANT)을 사용하는 것은 좋지 않은 생각입니다.

동적 인 SQL (EXECUTE IMMEDIATE)을 사용해야하지만 솔직히 왜 저장된 프로 시저에서이 작업을 수행하겠습니까?

+0

항상 그렇듯이 부작용 중 하나는 DDL이 암시 적 COMMIT를 수행한다는 것입니다. – DCookie

+0

@ DCookie : 예와 '1525'는 부작용으로 인해 일반적으로 "나쁜 아이디어"라고 묘사했습니다. – Quassnoi

+0

많은 권한을 가진 dbms 명령을 실행하는 관리 스크립트 용으로 자주 실행되거나 둘 이상의 사용자가 실행하지 마십시오. 그런 문제를 해결하는 좋은 방법이 있습니까? –

1

현재 사용자가 소유 한 모든 테이블에서 다른 사용자에게 개체 권한 (SELECT, UPDATE 등)을 부여하는 PL/SQL 저장 프로 시저입니다. - "appuser".

CREATE OR REPLACE PROCEDURE grant_privs 
IS 
    CURSOR ut_cur IS SELECT table_name from user_tables; 
    ut_rec ut_cur%rowtype; 
BEGIN 
    FOR ut_rec IN ut_cur 
    LOOP 
     EXECUTE IMMEDIATE 'GRANT ALL ON ' || ut_rec.table_name || ' TO appuser'; 
    END LOOP; 
END; 
/

웹 응용 프로그램의 데이터베이스 변경 사항을 배포 한 후 자동으로 실행되었습니다. 현재 사용자가 데이터베이스 테이블을 소유합니다. 데이터베이스 변경 사항을 배포 한 후 "appuser"가 모든 테이블에서 SQL 문을 실행할 수 있도록 저장 프로 시저가 실행되었습니다. 보안상의 이유로 제한된 시스템 권한 만 가진 "appuser"로 연결된 웹 응용 프로그램.

이 문제는 솔루션과 솔루 션의 유스 케이스입니다.