TME : gestion des autorisations
2ème séance de TME: terminer le TME précédent avant de commencer celui-ci (voir LesTme)
Documentation
- Rappel sur la terminologie d'Oracle :
^terme Oracle | ^signification |
table | relation |
column | attribut d'une relation |
row | n-uplet ou tuple |
object | tout ce qui est défini dans la base : relation, procédure, type, ... |
schema | l'ensemble des objets de l'utilisateur |
owner | le propriétaire d'un objet |
grantor | celui qui accorde un privilège ou un rôle |
grantee | celui qui reçoit un privilège ou un rôle |
grantable | transmissible |
- Dictionnaire du SGBD : les vues commençant par user contiennent seulement les informations relatives à l'utilisateur courant. Elles ont moins d'attributs que les vues commençant par all ou par bda.
les différents concepts pour les autorisations en Oracle (à compléter)
Voir les autorisations d'un utilisateur
- les tables qu'un utilisateur possède : user_tables
- les privilèges objets que l'utilisateur a reçus ou accordés : user_tab_privs
- les privilèges système que l'utilisateur a reçus : user_sys_privs
- les rôles que l'utilisateur a reçus : user_role_privs
Voir la définition d'un rôle
- les privilèges objets qu'un rôle a reçus : role_tab_privs
- les privilèges système qu'un rôle a reçus : role_sys_privs
- les rôles qu'un rôle a reçus : role_role_privs
Accorder, révoquer un privilège ou un rôle
Les instructions grant et revoke
Exercice
- Ecrire la requête r0.sql qui retourne tous les noms de table dont vous êtes propriétaire.
- Créer une table T(A:number) Quel est le nom complet de cette table ? Vérifiez sa création avec r0.
- insérer le n-uplet <12> dans T.
- Votre voisin a-t-il accès à cette table ?
- Ecrire la requête r1.sql qui permet de retrouver les tables pour lesquelles vous avez reçu un droit (préciser lequel) et de qui, ainsi que r2.sql qui permet de retrouver les tables pour lesquelles vous avez accordé un droit (préciser lequel) et à qui.
- Acccorder à votre voisin les droits de lire et insérer dans votre table T. Vérifier grâce à r1 et r2.
- Ecrire la requête r3.sql qui retourne le ou les rôles qui vous sont attribués.
- Lorsque l'utilisateur reçoit un rôle, il reçoit implicitement (par transitivité) tous les privilèges accordés à ce rôle. Ecrire r4.sql retournant les tables auxquelles vous avez accès (select, insert, delete, update) par l'intermédiaire d'un rôle.
- Il est possible d'accorder un rôle à un autre rôle. Ecrire la requête r5.sql qui retourne les rôles que vous avez obtenu par l'intermédaire d'un autre rôle.
- Ecrire la requête r6.sql qui retourne toutes les tables auxquelles vous avez accès par l'intermédiaire d'un rôle accordé à un rôle que vous possédez.
- Soit r7.sql la requête qui fait l'union des noms de tables retournés par les requêtes r0, r1, r4 et r6. La requête r7 donne-elle l'ensemble des tables auxquelles vous avez accès ? Sinon, est-il possible d'écrire une telle requête en SQL ?