Désolé les gars, mais la sélection de all_tab_privs_recd où impétrant = votre utilisateur "ne donnera aucune sortie à l'exception des subventions publiques et des subventions de l'utilisateur actuel si vous exécutez la sélection à partir d'un autre (disons, SYS) utilisateur . Comme documentation dit,
ALL_TAB_PRIVS_RECD décrit les types de subventions suivantes:
Object grants for which the current user is the grantee
Object grants for which an enabled role or PUBLIC is the grantee
Donc, si vous êtes un DBA et que vous voulez énumérer tous objet subventions pour un particulier (non SYS lui-même), vous ne pouvez pas utiliser cette vue système.
Dans ce cas, vous devez effectuer une requête plus complexe. Voici une prise (tracée) de TOAD pour sélectionner toutes les subventions d'objet pour un utilisateur particulier:
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;
Ceci listera toutes les subventions d'objets (y compris les subventions de colonne) pour votre utilisateur (spécifié). Si vous ne voulez pas d'allocations au niveau des colonnes, supprimez toutes les parties du select commençant par la clause 'union'.
UPD: L'étude de la documentation que j'ai trouvé une autre vue qui répertorie toutes les subventions de manière beaucoup plus simple:
select * from DBA_TAB_PRIVS where grantee = 'your user';
Gardez à l'esprit qu'il n'y a pas vue DBA_TAB_PRIVS_RECD dans Oracle.
Vous ne pouvez pas avoir le droit de voir la table sys.dba_sys_privs. – Hannes
Absolument correct. Voir votre DBA. S'ils refusent, ils peuvent avoir des problèmes de sécurité légitimes. Voir le contenu de ces vues donne à l'utilisateur des informations qu'il ne pourrait pas avoir autrement. – DCookie
Il serait intéressant de rejoindre la table 'role_role_privs', puis de CONNECTER BY PRIOR granted_role = role' pour rechanger les privilèges de rôle transitif ... –