Bulletin no : 11984번을 참조했습니다.
한 Schema의 모든 table에 대한 객체 권한을 부여하는 프로시저로, DBMS_SQL을 이용해서 구현되어 있습니다.
DBMS_SQL패키지를 사용하기 위해서는 아래의 스크립트를 실행해야 합니다.
SYS user로 접속해서 스크립트를 실행 시키고 대상 유저한테 권한을 부여 합니다.
> @$ORACLE_HOME$/rdbms/admin/dbmssql.sql
> grant create any table to [user_name];
> grant execute on dbms_sql to [user_name];
첫번째 IN 파라미터는 'select', 'insert', 'update'...와 같은 privilege를 지정 합니다.
두번째 IN 파라미터는 권한을 부여할 schema를 지정 합니다.
실행 예)
-- grant_on_table(권한명, 유저명)
SQL>EXEC grant_on_table('select', 'to_user');
▣ 프로시저
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;
▣ test유저한테 모든 객체 권한을 부여하는 예제
먼저 권한을 부여할 유저로 접속을 해서 위의 프로시저를 생성 합니다.
SQLPLUS scott/tiger
-- soctt유저의모든 객체 권한을 test유저에게 부여 합니다.
SQL>EXEC grant_on_table('all', 'test');
PL/SQL 처리가 정상적으로 완료되었습니다.
test유저로 접속한 다음에 권한이 부여?는지 확인 합니다.
SQL>conn 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
...
위와 같이 권한이 부여된 것을 확인 할 수 있습니다.
'Programming > PL&SQL' 카테고리의 다른 글
[펌]PL/SQL에서 Unix System 명령 사용하기 (0) | 2008.08.08 |
---|---|
[펌]프로시저에서 테이블 생성 방법(DBMS_SQL 패키지) (0) | 2008.08.08 |
[펌]테이블의 데이터를 txt파일로 생성하는 예제(UTIL_FILE Package) (0) | 2008.08.08 |
[펌]오라클에서의 데이터 암호화 기능 (0) | 2008.08.08 |