web-dev-qa-db-fra.com

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

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 en accordant une subvention directe (c.-à-d. 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.
29
dgf

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 de 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 une attribution directe (c.-à-d. Accorder une sélection sur atable à joe))? Le résultat de cette requête doit également montrer à travers quel rôle l'utilisateur a cet accès ou s'il s'agissait d'une subvention 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' ;
35
Philᵀᴹ

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

vues du dictionnaire de données

présent dans 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'objet 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, vérifiez ceci

J'espère que cela t'aides.

2
Vimalnath