oracle - liste les utilisateurs ayant accès à certaines tables


28

Je suis sûr que cela a déjà été demandé, mais je n'arrive pas à trouver les détails pertinents pour ce qui suit.

Existe-t-il une sorte de table pré-construite qui peut faire ce qui suit (j'ai utilisé dba_tab_privs mais il est limité et ne répond pas à tous mes besoins), sinon quelqu'un a-t-il des questions pour répondre à ce qui suit?

  1. Liste tous les utilisateurs auxquels un rôle particulier a été attribué?
  2. Liste tous les rôles attribués à un utilisateur?
  3. Liste tous les privilèges accordés à un utilisateur?
  4. Liste des tables auxquelles un certain rôle donne accès à SELECT?
  5. Liste toutes les tables à partir desquelles un utilisateur peut sélectionner?
  6. Énumérer tous les utilisateurs qui peuvent sélectionner sur une table particulière (soit en se voyant attribuer un rôle pertinent, soit par le biais d'une subvention directe (c'est-à-dire accorder une sélection sur atable à Joe))? Le résultat de cette requête doit également indiquer par quel rôle l'utilisateur a cet accès ou s'il s'agit d'une attribution directe.

Réponses:


33

Liste tous les utilisateurs auxquels un rôle particulier a été attribué

-- Change 'DBA' to the required role
select * from dba_role_privs where granted_role = 'DBA'

Liste tous les rôles attribués à un utilisateur

-- Change 'PHIL@ to the required user
select * from dba_role_privs where grantee = 'PHIL';

Liste tous les privilèges accordés à un utilisateur

select
  lpad(' ', 2*level) || granted_role "User, his roles and privileges"
from
  (
  /* THE USERS */
    select 
      null     grantee, 
      username granted_role
    from 
      dba_users
    where
      username like upper('%&enter_username%')
  /* THE ROLES TO ROLES RELATIONS */ 
  union
    select 
      grantee,
      granted_role
    from
      dba_role_privs
  /* THE ROLES TO PRIVILEGE RELATIONS */ 
  union
    select
      grantee,
      privilege
    from
      dba_sys_privs
  )
start with grantee is null
connect by grantee = prior granted_role;

Remarque: Extrait de http://www.adp-gmbh.ch/ora/misc/recursively_list_privilege.html

Liste des tables auxquelles un certain rôle donne accès à SELECT?

-- Change 'DBA' to the required role.
select * from role_tab_privs where role='DBA' and privilege = 'SELECT';

Liste toutes les tables à partir desquelles un utilisateur peut sélectionner?

--Change 'PHIL' to the required user
select * from dba_tab_privs where GRANTEE ='PHIL' and privilege = 'SELECT';

Énumérer tous les utilisateurs qui peuvent sélectionner sur une table particulière (soit en se voyant attribuer un rôle pertinent, soit par le biais d'une subvention directe (c'est-à-dire accorder une sélection sur atable à Joe))? Le résultat de cette requête doit également indiquer par quel rôle l'utilisateur a cet accès ou s'il s'agit d'une attribution directe.

-- Change 'TABLENAME' below
select Grantee,'Granted Through Role' as Grant_Type, role, table_name
from role_tab_privs rtp, dba_role_privs drp
where rtp.role = drp.granted_role
and table_name = 'TABLENAME' 
union
select Grantee,'Direct Grant' as Grant_type, null as role, table_name
from dba_tab_privs
where table_name = 'TABLENAME' ;

C'est un bon début, mais le n ° 3 n'inclut pas les privilèges d'objet, le n ° 5 n'inclut pas les SELECTprivilèges disponibles en raison d'un rôle et le n ° 6 est manquant.
Leigh Riffel

Opps, besoin de CONNECTER PAR .. PRIOR pour # 6
Philᵀᴹ

Votre réponse pour # 5 comprend-elle des tableaux que l'utilisateur peut sélectionner via un rôle qui lui a été attribué?
dgf

Est-ce que cela fonctionne si l'utilisateur obtient le privilège d'un rôle auquel un autre rôle a été accordé?
jpmc26

2

Il existe de nombreuses façons d'obtenir les informations que vous souhaitez utiliser:

vues du dictionnaire de données

présent dans l'oracle.

Vous pouvez simplement interroger les vues et récupérer les détails: Par exemple:

sélectionnez * dans DBA_COL_PRIVS;

sélectionnez * dans ALL_COL_PRIVS;

sélectionnez * dans USER_COL_PRIVS;

Cela vous indique:

La vue DBA décrit toutes les autorisations d'objet de colonne dans la base de données. La vue ALL décrit toutes les attributions d'objet de colonne pour lesquelles l'utilisateur actuel ou PUBLIC est le propriétaire, le concédant ou le bénéficiaire de l'objet. La vue UTILISATEUR décrit les octrois d'objets de colonne pour lesquels l'utilisateur actuel est le propriétaire, le concédant ou le bénéficiaire de l'objet.

Pour plus d'informations, consultez ceci

J'espère que cela t'aides.


1
Cela ne semble pas répondre à la question: comment un DBA peut-il savoir à quoi un utilisateur arbitraire spécifique peut accéder?
Jon of All Trades
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.