samedi 1 novembre 2014

ORA-01951, ORA-01952 et ORA-01045

J'ai vu une question étrange sur un forum et j'ai décidé de la recréer dans une base de données sur Oracle version 12.1. D'abord j'ai créé un utilisateur:

SQL> conn / as sysdba
Connecté.
SQL> create user a identified by b
  2  /
 
Utilisateur créé.

SQL>

Ensuite j'ai découvert que l'utilisateur pouvait faire un login, apparemment, sans le privilège CREATE SESSION:

SQL> conn a/b
Connecté.
SQL>

Après avoir fait son login, l'utilisateur avait un rôle et deux privilèges:

SQL> col role format a30
SQL> select * from session_roles
  2  /
 
ROLE
------------------------------
CONNECT
 
SQL> col privilege format a30
SQL> select * from session_privs
  2  /
 
PRIVILEGE
------------------------------
SET CONTAINER
CREATE SESSION

SQL>

Cependant, quand j'ai essayé de révoquer le rôle, j'ai vu une erreur ORA-01951 et quand j'ai essayé de révoquer le privilège, j'au vu une erreur ORA-01952:

SQL> conn / as sysdba
Connecté.
SQL> revoke connect from a
  2  /
revoke connect from a
*
ERREUR à la ligne 1 :
ORA-01951: ROLE 'CONNECT' non accordé à 'A'
 
SQL> revoke create session from a
  2  /
revoke create session from a
*
ERREUR à la ligne 1 :
ORA-01952: privilèges du système non accordés à 'A'

SQL>

J'ai noté qu'on avait accordé CONNECT à PUBLIC:

SQL> col granted_role format a30
SQL> select granted_role
  2  from dba_role_privs
  3  where grantee = 'PUBLIC'
  4  /
 
GRANTED_ROLE
------------------------------
CONNECT

SQL>

Alors je l'ai révoqué:

SQL> revoke connect from public
  2  /
 
Suppression de privilèges (REVOKE) acceptée.

SQL>

... et le problème a disparu:

SQL> conn a/b
ERROR:
ORA-01045: l'utilisateur A n'a pas le privilège CREATE
SESSION ; connexion refusée
 
Avertissement : vous n'êtes plus connecté à ORACLE.
SQL>

Aucun commentaire:

Enregistrer un commentaire