♣ Tech & Biz Salon/Tech

GRANT, SYNONYM 문 추출하기

TasteGod 2009. 11. 24. 06:52

FOODADM 이라는 계정이 있는데, 이 계정은 모델 관리자가 비번을 알고 있다.

FOODDEV 라는 계정이 있는데, 이 계정은 애플리케이션단에서 이용하는 계정이다.

 

테이블들 주요 OBJECT 의 OWNER 는 FOODADM 이고

FOODDEV 는 FOODADM 의 OBJECT 들에 SYNONYM 을 가지고 있고, SYNONYM 이 바라보는 오브젝트에 대한 권한을 부여받아 사용한다.

 

위와 같은 구조로 써 본 경험들이 있겠죠?

 

GRANT 정보, SYNONYM 정보, DATABASE LINK 등...

조금만 관심이 있다면, 오라클 DICTIONARY 들을 접근해보고, 각종 메타정보를 쉽게 파악할수 있을텐데 ( 직접 쿼리하지 않고, TOAD 같은 툴에서도 쉽게 볼수가 있지요.. )

해당 DICTIONARY 들에 대해서도 모르고, TOAD에서도 보지도 않고...

"~에서 ~ 보는  DB LINK 명이 뭐죠?" 이런 걸 물어보는 구력이 오래된 분들 보면 ...

직접 확인하면 되는 수준의 건을 왜 그렇게 요청하는건지... 직접 확인하라고 하고 앞으로는 안 알려줘야겠다는...

 

암튼.. 업무때 자주 쓰는 간단한 쿼리 올립니다.  GRANT, SYNONYM 생성문입니다.

 

 GRANT 생성문 추출
SELECT
'GRANT SELECT, INSERT, UPDATE, DELETE ON '
|| OBJ_NM
|| ' TO FOODDEV;'
FROM
(
    SELECT OBJECT_NAME AS OBJ_NM FROM ALL_OBJECTS
    WHERE 0 = 0
    AND OWNER = 'FOODADM'
   AND OBJECT_TYPE = 'TABLE'
    AND NOT ( OBJECT_NAME LIKE 'BIN$%'
    OR OBJECT_NAME  LIKE 'FS_%' )
    MINUS
    SELECT TABLE_NAME AS OBJ_NM FROM ALL_TAB_PRIVS_RECD
    WHERE 0 = 0
    AND TABLE_NAME NOT LIKE 'BIN$%'
    AND PRIVILEGE NOT IN ('EXECUTE')
    AND OWNER = 'FOODADM'
    AND GRANTEE = 'FOODDEV'
    GROUP BY TABLE_NAME
)

SYNONYM 생성문 추출

SELECT
 'CREATE SYNONYM ' || 'FOODDEV.'|| TABLE_NAME || ' FOR ' || 'FOODADM.' || TABLE_NAME
  || ';'
FROM
(
 SELECT TABLE_NAME FROM ALL_TABLES
 WHERE OWNER = 'FOODADM'
 MINUS
 SELECT SYNONYM_NAME AS TABLE_NAME FROM ALL_SYNONYMS
 WHERE TABLE_OWNER = 'FOODADM'
 AND OWNER = 'FOODDEV'
)
ORDER BY TABLE_NAME;

 

이 글은 스프링노트에서 작성되었습니다.