한 Schema의 모든 테이블에 대한 객체 권한을 부여하는 프로시저로, DBMS_SQL을 이용해서 구현되어 있다.
-- DBMS_SQL패키지를 사용하기 위해서는 아래의 스크립트를 실행해야 한다. -- SYS user로 접속해서 스크립트를 실행 시키고 대상 유저한테 권한을 부여 한다. C:\> SQLPLUS / NOLOG SQL> CONN / AS SYSDBA SQL> @$ORACLE_HOME$/rdbms/admin/dbmssql.sql SQL> GRANT create any table TO scott; SQL> GRANT execute on dbms_sql TO scott;
첫번째 IN 파라미터는 'select', 'insert', 'update'...와 같은 privilege를 지정 합니다.
두번째 IN 파라미터는 권한을 부여할 schema를 지정 합니다.
SQL> CREATE OR REPLACE PROCEDURE grant_on_table (privs IN VARCHAR2, user_name IN VARCHAR2) AS cursor1 INTEGER; cursor2 INTEGER; t_name VARCHAR2(30); rows_proces1 INTEGER; rows_processed INTEGER; BEGIN cursor1 := DBMS_SQL.OPEN_CURSOR; cursor2 := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE (cursor1, 'select table_name from user_tables', dbms_sql.v7); DBMS_SQL.DEFINE_COLUMN (cursor1, 1, t_name, 30); rows_processed := DBMS_SQL.EXECUTE (cursor1); LOOP if DBMS_SQL.FETCH_ROWS (cursor1) > 0 then DBMS_SQL.COLUMN_VALUE (cursor1, 1, t_name); DBMS_SQL.PARSE(cursor2,'grant '|| privs ||' on '|| t_name || ' to ' || user_name,dbms_sql.native); rows_proces1 := DBMS_SQL.EXECUTE(cursor2); else exit; end if; END LOOP; DBMS_SQL.CLOSE_CURSOR (cursor2); DBMS_SQL.CLOSE_CURSOR (cursor1); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(sqlerrm); if DBMS_SQL.IS_OPEN (cursor1) then DBMS_SQL.CLOSE_CURSOR (cursor1); end if; END; /
먼저 권한을 부여할 유저로 접속을 해서 위의 프로시저를 생성 합니다. C:\> SQLPLUS scott/tiger -- soctt유저의모든 객체 권한을 test유저에게 부여 합니다. SQL> EXEC grant_on_table('all', 'test'); -- test유저로 접속한 다음에 권한이 부여?는지 확인 합니다. SQL> COMM test/test SQL> SET PAGESIZE 1000 SQL> SET LINESIZE 300 SQL> COL grantee FORMAT A15 SQL> COL privilege FORMAT A10 SQL> COL owner FORMAT A10 SQL> COL table_name FORMAT A10 SQL> SELECT grantee, privilege, owner, table_name FROM USER_TAB_PRIVS; GRANTEE PRIVILEGE OWNER TABLE_NAME --------- ---------- ---------- ---------- TEST ALTER SCOTT EMP TEST DELETE SCOTT EMP TEST INDEX SCOTT EMP ... 위와 같이 권한이 부여된 것을 확인 할 수 있다.
- 강좌 URL : http://www.gurubee.net/lecture/1340
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.