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