programing

Oracle 디렉토리에 대한 사용 권한을 쿼리하는 방법은 무엇입니까?

batch 2023. 6. 30. 22:12
반응형

Oracle 디렉토리에 대한 사용 권한을 쿼리하는 방법은 무엇입니까?

all_directorys에 디렉토리가 있지만 디렉토리와 관련된 권한, 즉 해당 디렉토리에 부여된 권한을 확인해야 합니다.

이렇게 하면 디렉토리에 부여된 역할, 사용자 및 권한이 제공됩니다.

SELECT * 
  FROM all_tab_privs 
 WHERE table_name = 'your_directory';  --> needs to be upper case

그리고 네, 그것은 모두에 있습니다.TAB_privs view ;-) 이 뷰에는 PL/SQL 개체와 해당 실행 권한도 포함되므로 "ALL_OBJECT_PRIBS"와 같은 이름이 더 좋습니다.

다음을 사용하여 모든 디렉터리에 대한 모든 권한을 볼 수 있습니다.

SELECT *
from all_tab_privs
where table_name in
  (select directory_name 
   from dba_directories);

다음은 수행한 작업 등을 백업해야 할 경우 권한을 부여하기 위한 SQL 문입니다.

select 'Grant '||privilege||' on directory '||table_schema||'.'||table_name||' to '||grantee 
from all_tab_privs 
where table_name in (select directory_name from dba_directories);

Oracle 11g R2(최소 11.2.02)를 사용하는 경우 datapump_dir_objs라는 이름의 보기가 있습니다.

SELECT * FROM datapump_dir_objs;

보기는 다음을 표시합니다.NAME디렉터리 개체의PATH게다가READ그리고.WRITE현재 연결된 사용자에 대한 사용 권한.그러나 현재 사용자가 읽거나 쓸 수 있는 권한이 없는 디렉터리 개체는 표시되지 않습니다.

디렉토리를 사용하여 읽고 쓸 수 있는 Oracle 사용자를 의미하는지 아니면 Oracle Directory Object와 기본 운영 체제 디렉토리 간의 권한 상관 관계를 의미하는지 잘 모르겠습니다.

DCookie가 Oracle 측면을 다루었기 때문에 다음은 여기에 있는 Oracle 설명서에서 발췌한 것입니다.

디렉토리에 부여된 권한은 운영 체제 디렉토리에 대해 정의된 권한과 독립적으로 생성되며, 두 권한이 정확히 일치하거나 일치하지 않을 수 있습니다.예를 들어 샘플 사용자 hr에게 디렉토리 개체에 대한 읽기 권한이 부여되었지만 해당 운영 체제 디렉토리에 Oracle Database 프로세스에 대해 정의된 읽기 권한이 없는 경우 오류가 발생합니다.

이 스크립트를 조금 확장하면 all_tab_privs에 나타나는 모든 개체 유형 및 이름에 대한 권한을 볼 수 있습니다.

/*

usage: @obj-privs <object-type> <object-name>

object-type can be any type of object; table, directory, index, etc.
case does not matter

object-name can be any legal name - case matters

Wild cards work for both object-type and object-name


@obj-privs dir% MYDIR
@obj-privs table INV%
@obj-privs synonym %


*/


set pagesize 100
set linesize 200 trimspool off

col grantor format a15
col grantee format a30
col table_schema format a30 head 'OWNER'
col table_name format a30 head 'OBJECT_NAME'
col privilege format a15

col  v_object_name new_value v_object_name noprint
col  v_object_type new_value v_object_type noprint

set feed off term off echo off pause off verify off
select upper('&1') v_object_type from dual;
select '&2' v_object_name from dual;

set feed on term on feed on


select
   p.table_name
   , p.table_schema
   , p.privilege
   , p.grantee
   , p.grantor
   , o.object_type
from all_tab_privs p
join all_objects o on o.owner = p.table_schema
   and o.object_name = p.table_name
   and p.table_name like '&v_object_name'
   and o.object_type like '&v_object_type'
order by p.table_name, p.table_schema, p.grantee
/

다음은 디렉터리의 예입니다.

SQL# @obj-privs dir% %

OBJECT_NAME                    OWNER                          PRIVILEGE       GRANTEE                        GRANTOR         OBJECT_TYPE
------------------------------ ------------------------------ --------------- ------------------------------ --------------- ---------------------------------------------------------------------
DATA_PUMP_DIR                  SYS                            WRITE           EXP_FULL_DATABASE              SYS             DIRECTORY
DATA_PUMP_DIR                  SYS                            READ            EXP_FULL_DATABASE              SYS             DIRECTORY
DATA_PUMP_DIR                  SYS                            WRITE           IMP_FULL_DATABASE              SYS             DIRECTORY
DATA_PUMP_DIR                  SYS                            READ            IMP_FULL_DATABASE              SYS             DIRECTORY
ORACLE_OCM_CONFIG_DIR          SYS                            READ            ORACLE_OCM                     SYS             DIRECTORY
ORACLE_OCM_CONFIG_DIR          SYS                            WRITE           ORACLE_OCM                     SYS             DIRECTORY
ORACLE_OCM_CONFIG_DIR2         SYS                            WRITE           ORACLE_OCM                     SYS             DIRECTORY
ORACLE_OCM_CONFIG_DIR2         SYS                            READ            ORACLE_OCM                     SYS             DIRECTORY

8 rows selected.

다음은 이름에 USER가 있는 테이블에 대한 또 다른 예입니다.

SQL# @obj-privs tab% %USER%

OBJECT_NAME                    OWNER                          PRIVILEGE       GRANTEE                        GRANTOR         OBJECT_TYPE
------------------------------ ------------------------------ --------------- ------------------------------ --------------- ---------------------------------------------------------------------
BDSQL_USER_MAP                 SYS                            INSERT          BDSQL_ADMIN                    SYS             TABLE
BDSQL_USER_MAP                 SYS                            DELETE          BDSQL_ADMIN                    SYS             TABLE
BDSQL_USER_MAP                 SYS                            SELECT          BDSQL_ADMIN                    SYS             TABLE
BDSQL_USER_MAP                 SYS                            READ            BDSQL_USER                     SYS             TABLE
KU$_USER_MAPPING_VIEW_TBL      SYS                            SELECT          SELECT_CATALOG_ROLE            SYS             TABLE
SDO_PREFERRED_OPS_USER         MDSYS                          UPDATE          PUBLIC                         MDSYS           TABLE
SDO_PREFERRED_OPS_USER         MDSYS                          INSERT          PUBLIC                         MDSYS           TABLE
SDO_PREFERRED_OPS_USER         MDSYS                          SELECT          PUBLIC                         MDSYS           TABLE
SDO_PREFERRED_OPS_USER         MDSYS                          DELETE          PUBLIC                         MDSYS           TABLE
USER_PRIVILEGE_MAP             SYS                            READ            PUBLIC                         SYS             TABLE

10 rows selected.

언급URL : https://stackoverflow.com/questions/6390388/how-to-query-the-permissions-on-an-oracle-directory

반응형