trigger tables example ejemplo dba all sql oracle grant

sql - tables - ¿Cómo puedo listar TODAS las concesiones que recibió un usuario?



grant trigger oracle (5)

Necesito ver todas las concesiones en Oracle DB.

Utilicé la función TOAD para comparar esquemas, pero no muestra subvenciones temptables, así que ahí está mi pregunta:

¿Cómo puedo enumerar todas las subvenciones en un Oracle DB?


El método más completo y confiable que conozco sigue siendo mediante el uso de DBMS_METADATA :

select dbms_metadata.get_granted_ddl( ''SYSTEM_GRANT'', :username ) from dual; select dbms_metadata.get_granted_ddl( ''OBJECT_GRANT'', :username ) from dual; select dbms_metadata.get_granted_ddl( ''ROLE_GRANT'', :username ) from dual;

Respuestas interesantes sin embargo.


Lo sentimos muchachos, pero seleccionando desde all_tab_privs_recd donde donatario = ''su usuario'' no dará ningún resultado excepto subvenciones públicas y subvenciones de usuario actuales si ejecuta la selección de un usuario diferente (digamos, SYS). Como dice la documentación,

ALL_TAB_PRIVS_RECD describe los siguientes tipos de subvenciones:

Object grants for which the current user is the grantee Object grants for which an enabled role or PUBLIC is the grantee

Por lo tanto, si es un DBA y desea enumerar todas las concesiones de objetos para un usuario en particular (no SYS), no puede usar esa vista del sistema.

En este caso, debe realizar una consulta más compleja. Aquí se toma uno (trazado) de TOAD para seleccionar todas las concesiones de objeto para un usuario particular:

select tpm.name privilege, decode(mod(oa.option$,2), 1, ''YES'', ''NO'') grantable, ue.name grantee, ur.name grantor, u.name owner, decode(o.TYPE#, 0, ''NEXT OBJECT'', 1, ''INDEX'', 2, ''TABLE'', 3, ''CLUSTER'', 4, ''VIEW'', 5, ''SYNONYM'', 6, ''SEQUENCE'', 7, ''PROCEDURE'', 8, ''FUNCTION'', 9, ''PACKAGE'', 11, ''PACKAGE BODY'', 12, ''TRIGGER'', 13, ''TYPE'', 14, ''TYPE BODY'', 19, ''TABLE PARTITION'', 20, ''INDEX PARTITION'', 21, ''LOB'', 22, ''LIBRARY'', 23, ''DIRECTORY'', 24, ''QUEUE'', 28, ''JAVA SOURCE'', 29, ''JAVA CLASS'', 30, ''JAVA RESOURCE'', 32, ''INDEXTYPE'', 33, ''OPERATOR'', 34, ''TABLE SUBPARTITION'', 35, ''INDEX SUBPARTITION'', 40, ''LOB PARTITION'', 41, ''LOB SUBPARTITION'', 42, ''MATERIALIZED VIEW'', 43, ''DIMENSION'', 44, ''CONTEXT'', 46, ''RULE SET'', 47, ''RESOURCE PLAN'', 66, ''JOB'', 67, ''PROGRAM'', 74, ''SCHEDULE'', 48, ''CONSUMER GROUP'', 51, ''SUBSCRIPTION'', 52, ''LOCATION'', 55, ''XML SCHEMA'', 56, ''JAVA DATA'', 57, ''EDITION'', 59, ''RULE'', 62, ''EVALUATION CONTEXT'', ''UNDEFINED'') object_type, o.name object_name, '''' column_name from sys.objauth$ oa, sys.obj$ o, sys.user$ u, sys.user$ ur, sys.user$ ue, table_privilege_map tpm where oa.obj# = o.obj# and oa.grantor# = ur.user# and oa.grantee# = ue.user# and oa.col# is null and oa.privilege# = tpm.privilege and u.user# = o.owner# and o.TYPE# in (2, 4, 6, 9, 7, 8, 42, 23, 22, 13, 33, 32, 66, 67, 74, 57) and ue.name = ''your user'' and bitand (o.flags, 128) = 0 union all -- column level grants select tpm.name privilege, decode(mod(oa.option$,2), 1, ''YES'', ''NO'') grantable, ue.name grantee, ur.name grantor, u.name owner, decode(o.TYPE#, 2, ''TABLE'', 4, ''VIEW'', 42, ''MATERIALIZED VIEW'') object_type, o.name object_name, c.name column_name from sys.objauth$ oa, sys.obj$ o, sys.user$ u, sys.user$ ur, sys.user$ ue, sys.col$ c, table_privilege_map tpm where oa.obj# = o.obj# and oa.grantor# = ur.user# and oa.grantee# = ue.user# and oa.obj# = c.obj# and oa.col# = c.col# and bitand(c.property, 32) = 0 /* not hidden column */ and oa.col# is not null and oa.privilege# = tpm.privilege and u.user# = o.owner# and o.TYPE# in (2, 4, 42) and ue.name = ''your user'' and bitand (o.flags, 128) = 0;

Esto mostrará una lista de todas las concesiones de objeto (incluidas las concesiones de columna) para su usuario (especificado). Si no desea becas a nivel de columna, elimine todas las partes de la cláusula de inicio de selección con ''unión''.

UPD: Estudiando la documentación encontré otra vista que enumera todas las subvenciones de una manera mucho más simple:

select * from DBA_TAB_PRIVS where grantee = ''your user'';

Tenga en cuenta que no hay vista DBA_TAB_PRIVS_RECD en Oracle.


Si desea algo más que simples becas de mesa directa (por ejemplo, becas por roles, privilegios del sistema como seleccionar cualquier tabla, etc.), aquí hay algunas consultas adicionales:

Privilegios del sistema para un usuario:

SELECT PRIVILEGE FROM sys.dba_sys_privs WHERE grantee = <theUser> UNION SELECT PRIVILEGE FROM dba_role_privs rp JOIN role_sys_privs rsp ON (rp.granted_role = rsp.role) WHERE rp.grantee = <theUser> ORDER BY 1;

Subvenciones directas a tablas / vistas:

SELECT owner, table_name, select_priv, insert_priv, delete_priv, update_priv, references_priv, alter_priv, index_priv FROM table_privileges WHERE grantee = <theUser> ORDER BY owner, table_name;

Subvenciones indirectas a tablas / vistas:

SELECT DISTINCT owner, table_name, PRIVILEGE FROM dba_role_privs rp JOIN role_tab_privs rtp ON (rp.granted_role = rtp.role) WHERE rp.grantee = <theUser> ORDER BY owner, table_name;


Suponiendo que desea enumerar concesiones en todos los objetos que un usuario particular ha recibido :

select * from all_tab_privs_recd where grantee = ''your user''

Esto no devolverá los objetos que posee el usuario. Si los necesita, use all_tab_privs view en su lugar.


select distinct ''GRANT ''||privilege||'' ON ''||OWNER||''.''||TABLE_NAME||'' TO ''||RP.GRANTEE from DBA_ROLE_PRIVS RP join ROLE_TAB_PRIVS RTP on (RP.GRANTED_ROLE = RTP.role) where (OWNER in (''YOUR USER'') --Change User Name OR RP.GRANTEE in (''YOUR USER'')) --Change User Name and RP.GRANTEE not in (''SYS'', ''SYSTEM'') ;