How to query the permissions on an Oracle directory?

Viewed 136149

I have a directory in all_directories, but I need to find out what permissions are associated with it, i.e. what has been granted on it?

5 Answers

Expanding on this a bit, this script will allow you to see the privileges for any object type and name that appears in 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
/

Here is an example for directories:

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.

Here is another for tables with USER in the name:

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.
Related