Oracle 11 저장 프로 시저에 GRANT 문을 배치하려고하면 GRANT가 예기치 않은 기호임을보고합니다. GRANT는 무언가에 의해 시작될 필요가 있습니까, 아니면 오라클이 단순히 SP 내부에서 GRANTS를 실행하지 못하도록합니까?Oracle Store 프로 시저에서 GRANT를 사용할 수 있습니까?
3
A
답변
3
저장 프로 시저 내에 DDL
(예 : GRANT
)을 사용하는 것은 좋지 않은 생각입니다.
동적 인 SQL
(EXECUTE IMMEDIATE
)을 사용해야하지만 솔직히 왜 저장된 프로 시저에서이 작업을 수행하겠습니까?
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"로 연결된 웹 응용 프로그램.
이 문제는 솔루션과 솔루 션의 유스 케이스입니다.
항상 그렇듯이 부작용 중 하나는 DDL이 암시 적 COMMIT를 수행한다는 것입니다. – DCookie
@ DCookie : 예와 '1525'는 부작용으로 인해 일반적으로 "나쁜 아이디어"라고 묘사했습니다. – Quassnoi
많은 권한을 가진 dbms 명령을 실행하는 관리 스크립트 용으로 자주 실행되거나 둘 이상의 사용자가 실행하지 마십시오. 그런 문제를 해결하는 좋은 방법이 있습니까? –