Vous êtes sur la page 1sur 5

Bases de Données

TP n°3 : Langage de contrôle de données sous Oracle


 Gestion des utilisateurs et ses ressources
 Gestion des privilèges et des rôles
 Gestion des transactions
 Application

Enseignant : Mme Ben Saïd Salma

Les types et la responsabilité des utilisateurs diffèrent d’un utilisateur à un autre. Un administrateur a tout le
pouvoir sur oracle (Création de base de données, Création, modification, suppression des tables, Gestion de
sécurité, Gestion des historiques…). Ce qui n’est pas le cas pour un simple utilisateur à pouvoir restreint.
- Administrateur de la base de données (DBA): la responsabilité d’un DBA peut inclure l’installation et
la mise à jour de Oracle et les outils d’application, Création et gestion de la structure d’une base de données,
Gestion des sauvegardes, Gestion de la sécurité… Lors de l’installation un administrateur a été créé avec
l’authentification suivante :
Utilisateur : System Mot de passe : System
- Utilisateur de la base de donnée : l’ajout, la modification et la suppression des données s’il est autorisé à
le faire. Exemple d’utilisateur avec l’authentification suivante :
Utilisateur : VotrePréNom Mot de passe : VotreNom

I. Gestion des utilisateurs

1. Création d’un utilisateur authentifié


CREATE USER name IDENTIFIED BY password;

2. Suppression d'un utilisateur

Vous pouvez supprimer un utilisateur en utilisant la commande DROP USER. Pour supprimer, de plus, tous les
objets ( tables, vues, procédures, trigger …) créés par cet utilisateur, utilisez le paramètre CASCADE.

DROP USER name CASCADE ;

3. Modification d'un utilisateur

 Modifier un mot de passe :

ALTER USER name IDENTIFIED BY new_password ;

 Expiration et modification d’un mot de passé à la première connexion :

ALTER USER name PASSWORD EXPIRE ;

 Verrouiller et déverrouiller un compte utilisateur :

ALTER USER name ACCOUNT LOCK ;

ALTER USER name ACCOUNT UNLOCK ;

Remarque : On ne peut pas renommer un utilisateur

SELECT * FROM DBA_USERS ; liste des utilisateurs

1
II. Gestion des utilisateurs et ses ressources
Plusieurs personnes peuvent travailler simultanément sur une base de données, toutefois ces personnes n'ont pas
forcément les mêmes besoins: certains peuvent modifier des données dans la table, tandis que d’autres n’ont le
droit que de la consulter. Ainsi, il est possible de définir des permissions pour chaque personne authentifiée.
Cette tâche incombe à l'administrateur de la base de données (en anglais DBA, DataBase Administrator). Il doit
dans un premier temps définir les besoins de chacun, puis les appliquer à la base de données sous forme de
permissions.
La clause GRANT permet d'attribuer des permissions à un ou plusieurs utilisateurs sur un ou plusieurs éléments
de la base de données. Par contre la commande REVOKE supprime un privilège à un ou plusieurs utilisateurs.

GRANT ……… TO ……… ; REVOKE ……… FROM ……… ;

Lorsqu'un utilisateur est créé avec l'instruction CREATE USER, il ne dispose encore d'aucun droit car aucun
privilège ne lui a encore été assigné, par ailleurs il ne peut même pas se connecter à la base. Il faut donc lui
assigner les privilèges nécessaires
Il doit pouvoir se connecter, créer des tables, des vues... Ce sont des privilèges systèmes.
En fait, il existe deux grandes familles de privilèges. Les privilèges systèmes et les privilèges objets. Dans ce qui
suit nous verrons la syntaxe générale d’attribution de ces privilèges, soit à un utilisateur soit à un rôle.

1. Les privilèges de niveau système

Elles permettent à l’utilisateur de faire certaines actions sur n’importe quel objet de la base de données. Il existe
plusieurs privilèges de niveau système, voici quelques exemples :

Accorder un privilège de niveau système


Syntaxe :

GRANT {system_priv | role} [, {system_priv | role}]...


TO {user | role | PUBLIC} [, {user | role | PUBLIC}]...
[WITH ADMIN OPTION] ;

Exemple:
GRANT CREATE TABLE
TO scott
WITH ADMIN OPTION;

L'option WITH ADMIN OPTION permet de pouvoir ensuite donner ce privilège à d’autres utilisateurs.

2. Les privilèges de niveau objet

Elles permettent les manipulations sur des objets spécifiques. Par défaut, un utilisateur ne peut utiliser que ses
propres schémas (objects). Pour qu’un autre utilisateur puisse le faire, il faut lui donner ce privilège. Il faut donc
obligatoirement avoir le droit de donner ce privilège (en étant le propriétaire des objets ou en tant que
administrateur). Les privilèges OBJET donnent des droits sur les objets d'un schéma à un utilisateur. Les
privilèges objets sont donnés par le propriétaire du dit objet ou par l’administrateur.

2
Accorder un privilège de niveau objet
Syntaxe :

GRANT {object_priv[(column_list)][, object_priv[(column_list)] ]... | ALL [PRIVILEGES] }


ON [schema.] object
TO {user | role | PUBLIC} [,{user | role | PUBLIC}]...
[WITH GRANT OPTION]

Il est possible de limiter le privilège à la colonne (ou la liste de colonnes) entre parenthèses de l’objet cité. Dans
le cas d'une autorisation collective, il est possible d'utiliser des mots clés spécifiques:

- Le mot clé ALL permet d'accorder tous les privilèges aux utilisateurs listés.
- Le mot clé PUBLIC permet d'accorder les privilèges listés, à l'ensemble des utilisateurs.
- L'option WITH GRANT OPTION permet de définir si l'utilisateur peut lui-même accorder à un autre
utilisateur les permissions qu'on lui accorde sur les éléments.

Exemple : Dans cet exemple, est attribué à l’utilisateur scott le privilège de sélection de toute la table Empl, et
la mise à jour des deux colonnes nom et prenom de la table Empl. La deuxième instruction lui retire le pouvoir
de consultation de la table Empl.

GRANT SELECT, UPDATE(nom,prenom)


ON Empl
TO scott;

REVOKE SELECT ON Empl


FROM scott;

A titre d'exemple, supposons que Marc, propriétaire de la table confiserie veuille la rendre accessible en
consultation à Nathalie : il devra alors entrer la requête suivante :

GRANT SELECT ON Marc.confiserie


TO nathalie;

Autres exemples
GRANT SELECT, UPDATE(name,volume_sucre)
ON Marc.confiserie
TO nathalie
WITH GRANT OPTION;

Dans le dernier exemple on précise que l'utilisatrice Nathalie a le droit de délivrer elle aussi ce privilège.

Les principales actions sont:

- DELETE: privilège de supprimer les données d'une table


- INSERT: privilège d'ajouter des données à une table
- SELECT: privilège d'accéder aux données d'une table
- UPDATE: privilège de mise à jour les données d'une table

Puis préciser sur quelle table le privilège a été accordé par la clause ON schema.object

S'il faut donner plusieurs privilèges à plusieurs utilisateurs en même temps, oracle met à notre disposition la
notion de rôle.

SELECT * FROM SESSION_PRIVS ; liste des privilèges de la session courante

3
3. Les Rôles
Les rôles sont des groupes nommés de privilèges associés qui sont accordés à des utilisateurs ou à d'autres rôles.
Les rôles sont accordés et révoqués comme n'importe quel autre privilège (GRANT, REVOKE). Ils peuvent être
activés ou désactivés pour chaque utilisateur.
Voici la syntaxe pour créer un rôle :

CREATE ROLE nomderole [NOT IDENTIFIED | IDENTIFIED {BY password | EXTERNALLY} ] ;

Lorsqu’un rôle est créé avec identification par un mot de passe, l’utilisateur qui reçoit ce rôle doit l’activer en
précisant le mot de passe à travers la commande SET ROLE nomderole IDENTIFIED BY password ; au
niveau de sa session.
Exemple:
CREATE ROLE nomderole ;

Une fois ce rôle est créé, il vous suffit de lui donner des privilèges (sur objets ou bien systèmes).

GRANT SELECT,INSERT,UPDATE
ON Empl
TO nomderole ;

GRANT CREATE TABLE


TO nomderole ;

Ensuite, il suffit de donner ce rôle à un utilisateur, en utilisant simplement la commande GRANT. On peut aussi
donner le rôle lors de la modification d’un utilisateur par la commande ALTER USER.

GRANT nomderole ALTER USER nomuser


TO user1, user2, user3 ; DEFAULT ROLE nomderole ;

Pour supprimer un rôle déjà créé, il suffit d'utiliser la commande DROP ROLE.

DROP ROLE nomderole ;

Nous pouvons créer nos propres rôles comme nous pouvons utiliser les rôles prédéfinis. Pour chaque rôle
prédéfini un ensemble de privilège lui sont associés.

Les rôles prédéfinis de Oracle : CONNECT / RESOURCE / DBA

SELECT * FROM SESSION_ROLES ; liste des rôles de la session courante

SELECT * FROM DBA_ROLE_PRIVS/ SELECT * FROM USER_ ROLE_PRIVS;

III. Gestion des Transactions

Pour permettre à plusieurs utilisateurs d’y accéder simultanément, le SGBD doit gérer les transactions avec le
minimum de conflits tout en veillant à la cohérence de la base de données.

Définition: Une transaction est une unité logique composée d'une ou plusieurs instructions SQL.
Une transaction commence implicitement à l’exécution de la première commande SQL et se termine par
un COMMIT pour validation ou un ROLLBACK pour annuler la transaction.

4
La transaction poursuit l’exécution des commandes SQL une après l’autre jusqu’à ce que l’un des événements
suivants se produit:

 COMMIT: la transaction rencontre une instruction COMMIT explicite, toutes les modifications faites
sur la base de données jusqu’à ce point sont validées. Les modifications deviennent définitives et
visibles à tous les utilisateurs.
 ROLLBACK: la transaction rencontre une instruction ROLLBACK explicite, toutes les modifications
faites sur la base de données jusqu’à ce point sont annulées.
 Instruction LDD : si une instruction LDD est rencontrée tels que CREATE, DROP, RENAME, ou
ALTER, Oracle valide en premier lieu les instructions LMD courantes de la transaction et puis exécute
et valide l’instruction LDD en question. Il s’agit d’un commit implicite.
 Fin normale du programme appelant: si le programme se termine sans erreurs, la transaction est
validée implicitement.
 Arrêt anormal du programme: telle qu’une coupure de réseau où la transaction est annulée
implicitement.

En cours de transaction, seul l'utilisateur ayant effectué les modifications les voit. Ce mécanisme est utilisé par
les systèmes de gestion de bases de données pour assurer l'intégrité de la base en cas de fin anormale d'une tâche
utilisateur : il y a automatiquement ROLLBACK des transactions non terminées.

ORACLE est un système transactionnel qui assure la cohérence des données en cas de mise à jour de la base,
même si plusieurs utilisateurs lisent ou modifient les mêmes données simultanément.

ORACLE utilise un mécanisme de verrouillage pour empêcher deux utilisateurs d'effectuer des transactions
incompatibles et régler les problèmes pouvant survenir. ORACLE permet le verrouillage de certaines unités
(table ou ligne) automatiquement ou sur demande de l'utilisateur. Les verrous sont libérés en fin de transaction.

IV. Application

1. Se connecter en tant que administrateur à la ligne de commande SQL


2. Créer un utilisateur « votrePrenom » avec un mot de passe « votreNom » et lui accorder les rôles
CONNECT et RESOURCE.
3. Créer une table nommée Pilote au niveau de la session « votrePrenom » .
4. Se reconnecter en tant que administrateur et créer un autre utilisateur « PrenomVotreBinome » avec un
mot de passe « SonNom », lui attribuer le rôle CONNECT.
5. Se connecter avec le nom utilisateur « votrePrenom »
6. Attribuer le privilège de sélection sur la table Pilote à l’autre utilisateur « PrenomVotreBinome »
7. Se connecter avec le nom utilisateur « PrenomVotreBinome »,
8. Essayer de sélectionner la table Pilote de l’utilisateur « votrePrenom » (votrePrenom .Pilote)
9. Essayer d’insérer un enregistrement dans la table : votrePrenom .Pilote
10. Que remarquez-vous ? Que faut-il faire ?
11. Annuler les privilèges objet un à un de VotreBinome.
12. Se connecter en tant que administrateur , Créer un rôle nommé role1.
13. Attribuer les privilèges objets de sélection de mise à jour, d’insertion et de suppression sur la table
pilote à role1.
14. Attribuer le rôle créé à l’utilisateur « PrenomVotreBinome ».
15. Se connecter avec le nom utilisateur « PrenomVotreBinome », tester les privilèges accordés.
16. Se connecter en tant que administrateur, verrouiller votre session « votrePrenom », puis essayer de s’y
connecter. Déverrouiller votre compte et écrire la commande SQL permettant de redéfinir un mot de
passe à votre prochaine connexion.
17. Se connecter avec le nom utilisateur « votrePrenom ».

Vous aimerez peut-être aussi