Vous êtes sur la page 1sur 13

Système de gestion de bases de données

Chapitre 3 Administrer la sécurité des utilisateurs

I. Introduction
La gestion des utilisateurs est au coeur de la sécurité de la base de données, c’est l’une
des tâches les plus basiques d’un administrateur. Le SGBD Oracle utilise son propre ensemble
d'usagers qui est distinct de celui défini pour l'accès et les ressources du système
informatique. Chaque usager est repéré par un nom et un mot de passe. Chaque utilisateur de
la base de données doit avoir un ou plusieurs privilèges pour exécuter un type particulier
d'instruction SQL ou d'accéder à l'objet d'un autre utilisateur.

II. Comptes utilisateurs de base de données:


1. Créer un utilisateur:
Pour accéder à la base de données, un utilisateur doit indiquer un compte utilisateur de base
de données valide et s'authentifier via ce compte. Chaque utilisateur de base de données
possède son propre compte. Cette méthode est recommandée par Oracle car elle permet
d'éviter toute faille dans la sécurité et fournit des données significatives pour certaines
activités d'audit.

Syntaxe de création d'un compte utilisateur

CREATE USER nom_ut IDENTIFIED BY mdp


[DEFAULT TABLESPACE nom_def_TS]
[TEMPORARY TABLESPACE nom_tmp_TS]
[QUOTA {val|UNLIMITED} ON nom_TS]
[PROFILE nom_prof]
[PASSWORD EXPIRE]
[ACCOUNT {LOCK|UNLOCK}]

Chaque compte utilisateur comporte les éléments suivants:

ABDELLI Maher Page 13


Système de gestion de bases de données

- Un nom utilisateur unique nom_ut : Les noms utilisateur ne peuvent pas dépasser
30 octets, ne doivent pas contenir de caractères spéciaux et doivent commencer par
une lettre.
- Une méthode d'authentification mdp: La méthode la plus courante est l'authentification
par mot de passe, mais Oracle Database 10g prend en charge plusieurs autres
méthodes d'authentification, notamment l'authentification par biométrie, par certificat
et par système tiers.
- Un tablespace par défaut nom_def_TS : Il s'agit de l'emplacement dans lequel
l'utilisateur crée des objets s'il n'a pas indiqué d'autre tablespace. Notez que le fait
qu'un utilisateur dispose d'un tablespace par défaut n'implique pas qu'il bénéficie du
privilège permettant de créer des objets dans ce tablespace, ni qu'il dispose d'un quota
d'espace dans ce tablespace. En effet, les privilèges et les quotas sont accordés
séparément.
- Un tablespace temporaire nom_tmp_TS : Il s'agit de l'emplacement dans lequel
l'utilisateur peut créer des objets temporaires, tels que des tris et des tables
temporaires.
- Un profil utilisateur nom_prof : Il s'agit d'un ensemble de restrictions concernant les
ressources et les mots de passe qui est affecté à l'utilisateur.
- Lorsque le mot clé composé PASSWORD EXPIRE est précisé, l’utilisateur sera obligé
de modifier son mot de passe dès la première connexion. Ainsi, même celui qui a créé
l’utilisateur en question ne connaitra plus le mot de passe.
- Un groupe de consommateurs de ressources : Il est utilisé par le gestionnaire de
ressources.
- Un statut de verrouillage ACCOUNT {LOCK|UNLOCK}] : Les utilisateurs n'ont accès
qu'aux comptes "déverrouillés".

Exemple :
La requête suivante est un exemple de création de l’utilisateur ADER dont le mot de passe
expire et auquel on affectera un quota de 20M sur son tablespace par défaut data. :

CREATE USER ADER IDENTIFIED BY ADER1

DEFAULT TABLESPACE data

QUOTA 20M ON data

PASSWORD EXPIRE;

A noter que spécifier le tablespace data comme tablespace par défaut de ADER ne suffit pas
pour lui permettre d’y stocker des segments, il faut qu’il ait un quota dessus.

2. Modifier un utilisateur:
Un utilisateur peut être modifié via la requête ALTER USER dont la syntaxe est la suivante :

ABDELLI Maher Page 14


Système de gestion de bases de données

ALTER USER nom_utilisateur

[IDENTIFIED BY mdp]

[DEFAULT TABLESPACE nom_def_TS]

[TEMPORARY TABLESPACE nom_tmp_TS]

[QUOTA {val|UNLIMITED} ON nom_TS]

[PROFILE nom_prof]

[PASSWORD EXPIRE]

[ACCOUNT {LOCK|UNLOCK}]

Exemple 1 : Modifier le mot de passe d’un utilisateur

ALTER USER ADER

IDENTIFIED BY ADER2 ;

Exemple 2 : verrouiller un compte utilisateur

ALTER USER ADER

ACCOUNT LOCK

3. Supprimer un utilisateur:
La requête DROP permet la suppression d’un utilisateur. Son utilisation dans sa forme
la plus simple ne réussit pas si l’utilisateur en question possède un schéma (et donc des
objets). Dans ce cas, il faut ajouter le mot clé CASCADE à la fin de la requête, ce qui
provoquera et la suppression de l’utilisateur et de son schéma. La syntaxe de la requête de
suppression est la suivante :

Syntaxe

DROP USER nom_utilisateur [CASCADE] ;

Exemple :

DROP USER ADER CASCADE ;

ABDELLI Maher Page 15


Système de gestion de bases de données

4. Comptes prédéfinis sous Oracle


Pour pouvoir s'authentifier, il faut évidemment avoir des utilisateurs. Certains sont
définis par défaut dans Oracle et quelques uns avec des droits particulièrement élevés.

Les utilisateurs privilégiés possèdent des droits d'administration ou des droits système, par
exemple :

- SYS : dispose du rôle d’administrateur de base de données (DBA) et est propriétaire du


dictionnaire ; Pour vous connecter au compte SYS, vous devez utiliser la clause AS
SYSDBA.

- SYSTEM : a par défaut le rôle DBA, mais pas le privilège SYSDBA.

5. Recommandation :
Selon le principe du moindre privilège, ces comptes ne sont pas utilisés pour les opérations de
routine. Les utilisateurs qui ont besoin de privilèges DBA disposent de comptes distincts
auxquels sont affectés les privilèges requis. Ainsi, Jim peut avoir un compte ayant peu de
privilèges, nommé jim, et un compte doté de privilèges élevés, appelé jim_dba. Cette méthode
permet d'appliquer le principe du moindre privilège. Elle élimine tout besoin de recourir à un
partage de compte et permet de réaliser des audits sur des actions individuelles.

Les comptes SYS et SYSTEM sont obligatoires dans la base de données. Par conséquent,
vous ne pouvez pas les supprimer.

III. Les privilèges


1. Définition :
On nomme privilège le droit d'exécuter un type particulier d'instruction SQL ou d'accéder à
l'objet d'un autre utilisateur. La base de données Oracle vous permet de contrôler les
opérations que les utilisateurs peuvent effectuer ou non au sein de la base.

2. Types de privilèges
Les privilèges sont répartis en deux catégories :

- Privilèges système,
- Privilèges objet.

a- Privilèges système :

ABDELLI Maher Page 16


Système de gestion de bases de données

Chaque privilège système autorise un utilisateur à effectuer une certaine opération de base de
données ou une certaine classe d'opérations. Un privilège système est un privilège qui est relié
avec le langage de définition de données et le langage de contrôle de données. C’est un
privilège qui donne le droit d’utiliser les requêtes CREATE, ALTER, et DROP sur les
différents types d’objets relatifs à la base de données et aussi les requêtes GRANT et
REVOKE qui permettent d’attribuer/retirer des privilèges.

La requête d’attribution d’un privilège système est la suivante :

GRANT priv1[,priv2…] TO {user1[,user2…]|PUBLIC}

[WITH ADMIN OPTION]

Les privilèges système priv1[,priv2…] sont présentés dans le dictionnaire de


données dans la vue SYSTEM_PRIVILEGE_MAP.
Voici par ailleurs quelques exemples : ALTER SYSTEM, CREATE SESSION, ALTER
USER, DROP USER, DROP ANY TABLE,GRANT ANY PRIVILEGE etc.

Avec l’option WITH ADMIN OPTION, l’utilisateur récepteur pourra à son tour
attribuer le privilège en question à d’autres utilisateurs.

Exemple :

SQL>CONNECT SYSTEM/admin;

SQL>GRANT CREATE TABLE, CREATE SESSION TO HR

WITH ADMIN OPTION;

L’utilisateur SYSTEM autorise l’utilisateur HR a créer des table et créer une session pour se
connecter.

SQL>CONNECT HR/HR;

SQL>GRANT CREATE TABLE TO USER1;

L’utilisateur HR après avoir obtenue les prévilèges système CREATE TABLE, CREATE
SESSION avec l’option WITH ADMIN OPTION , il pourra alors autoriser d’autre utilisateur,
comme ici USER1 , a créer des tables.

b- Privileges objet :

ABDELLI Maher Page 17


Système de gestion de bases de données

Les privilèges objet permettent à un utilisateur d'effectuer une action particulière sur un
objet spécifique, tel qu'une table, une vue, une séquence, une procédure, une fonction ou un
package.

Ils portent généralement sur les requêtes de manipulation de données, à savoir INSERT,
UPDATE, DELETE et SELECT, mais aussi EXECUTE lorsqu’il s’agit d’un programme
PL/SQL, qui seront définis sur un objet bien spécifié.

Les privilèges objet peuvent être octroyés par le propriétaire d'un objet, par
l'administrateur, ou par un utilisateur auquel la permission d'accorder des privilèges sur l'objet
a été attribuée explicitement.

GRANT {priv1[(col1[,col2,…])][,priv2…]|ALL PRIVILEGES} ON [schema.]obj

TO {user1[,user2,…]|PUBLIC}

WITH GRANT OPTION;

Voici une liste détaillant les différents Objets Oracle et leurs Privilèges.

Functions
Procedures Sequence Table View
Packages

ALTER - x x -

DELETE - - x x

EXECUTE x - - -

FLASHBACK - - x x

INSERT - - x x

SELECT - x x x

UPDATE - - x x

Exemple:

SQL>connect HR/HR

SQL>GRANT SELECT, UPDATE(last_name,job_id) ON EMPLOYEES TO


ADER;

ABDELLI Maher Page 18


Système de gestion de bases de données

ADER recevra ces deux privilèges sur la table EMPLOYEES.

3. Révoquer des privilèges


a- Privilèges système :
Les privilèges système qui ont été octroyés directement à l'aide de la commande GRANT
peuvent être révoqués via l'instruction SQL REVOKE. Les utilisateurs disposant de l'option
ADMIN OPTION pour un privilège système peuvent révoquer ce privilège pour tout autre
utilisateur de la base de données. La révocation peut être effectuée par un utilisateur différent
de celui qui a initialement octroyé le privilège.

Aucune répercussion en cascade ne se produit lorsqu'un privilège système est révoqué,


que celui-ci ait été ou non accordé avec l'option ADMIN OPTION.

Syntaxe :

REVOKE priv1[,priv2…] FROM {user1[,user2…]|PUBLIC};

A titre d'exemple, considérons le scénario ci-après.

Scénario

1. L'administrateur de base de données (DBA) octroie à Jeff le privilège système


CREATE TABLE, avec l'option ADMIN OPTION.

2. Jeff crée une table.

3. Jeff accorde le privilège système CREATE TABLE à Emi.

4. Emi crée une table.


ABDELLI Maher Page 19
Système de gestion de bases de données

5. Le DBA révoque le privilège système CREATE TABLE pour Jeff.

Résultat

La table de Jeff existe toujours mais aucune autre table ne peut être créée.

La table d'Emi existe toujours et Emi conserve le privilège système CREATE TABLE.

b- Privilèges objet :
La syntaxe de retirement d’un privilège objet est la suivante :

REVOKE {priv1[,priv2…]|ALL PRIVILEGES} ON [schema.]obj

FROM {user1[,user2…]|PUBLIC}

La révocation de privilèges objet accordés avec l'option WITH GRANT OPTION produit
également des effets en cascade.

A titre d'exemple, considérons le scénario ci-après.

Scénario

1. Jeff se voit octroyer le privilège objet SELECT sur la table EMPLOYEES, avec
l'option GRANT OPTION.

2. Jeff accorde à Emi le privilège SELECT sur la table EMPLOYEES.

3. Ultérieurement, le privilège SELECT de Jeff est révoqué. Cette révocation est


répercutée sur Emi.

ABDELLI Maher Page 20


Système de gestion de bases de données

IV. Rôles
1. Définition :
Un rôle est un ensemble de privilèges qui est attribué à l’utilisateur. Ainsi, lorsqu’on un rôle
est attribué à un utilisateur, tous ses privilèges lui sont affectés.

2. Caractéristiques :
Les rôles ont été mis en place afin de faciliter l'administration des privilèges de la base de
données.

Gestion simplifiée des privilèges : Utilisez des rôles pour simplifier la gestion des
privilèges. Plutôt que d'accorder le même ensemble de privilèges à plusieurs utilisateurs,
vous pouvez accorder ces privilèges à un rôle, puis octroyer ce rôle à chaque utilisateur.

Gestion dynamique des privilèges : Si les privilèges associés à un rôle sont modifiés,
tous les utilisateurs auxquels ce rôle est accordé bénéficient automatiquement et
immédiatement des privilèges modifiés.

Disponibilité sélective des privilèges : Les rôles peuvent être activés et désactivés
afin d'activer ou de désactiver temporairement les privilèges correspondants. L'activation
d'un rôle peut également être utilisée pour vérifier que le rôle a été accordé à un utilisateur.

3. Implémentation des Rôles :


a) Création d'un rôle
Voici la syntaxe qui permet de créer un rôle :

CREATE ROLE <nom du rôle>


[NOT IDENTIFIED | IDENTIFIED {BY <mot de passe> |
EXTERNALLY}];

ABDELLI Maher Page 21


Système de gestion de bases de données

b) Attribuer/retirer un privilège à un rôle


Pour attribuer/retirer un privilège système à un rôle, il suffit d’utiliser les requêtes
GRANT/REVOKE :

Requête : attribuer un privilège système à un rôle


GRANT priv1[,priv2…] TO rol1[,rol2…]
[WITH ADMIN OPTION];
Lorsqu’un privilège système est attribué à un rôle avec l’option d’administration, tout
utilisateur à qui on affectera le rôle, aura la possibilité de passer ce privilège à d’autres
utilisateurs/rôles.
Requête: retirer un privilège système à un rôle
REVOKE priv1[,priv2…] FROM rol1[,rol2…];
Pour attribuer/retirer un privilège objet à un rôle, il suffit d’utiliser ces requêtes :

Requête : attribuer un privilège objet à un rôle


GRANT priv1[(list_col)][,priv2…]|ALL PRIVILEGES
ON [schema.]obj TO rol1[,rol2…];
Requête: retirer un privilège système à un rôle
REVOKE priv1[,priv2…]|ALL PRIVILEGES
ON [schema.]obj FROM rol1[,rol2…];

Attribuer/retirer un privilège, qu’il soit objet ou système, à un rôle nécessite les mêmes
privilèges d’attribution à un utilisateur. En d’autres termes, si un utilisateur a le droit
d’attribuer/retirer un privilège à un autre utilisateur alors il a le droit de l’attribuer/retirer à un
rôle. C’est pour cette raison qu’on dit qu’un rôle n’appartient à personne.

Remarque :
Il est à noter que si un privilège est attribué deux fois à un utilisateur (une première
fois directement, et une deuxième fois via un rôle), et que par la suite le privilège est
retiré, alors l’utilisateur continuera en possession du privilège à travers le rôle.

c) Assignation d'un rôle à un utilisateur

Voici la syntaxe pour assigner un rôle à un utilisateur ou à un autre rôle :

GRANT <nom du rôle> [,<nom du rôle>] …


TO {<nom du user> | <nom du rôle> | PUBLIC}
[, {<nom du user> | <nom du rôle> | PUBLIC}] …
[WITH ADMIN OPTION];

d) Identification des rôles prédéfinis

Il existe plusieurs rôles qui sont définis automatiquement pour les bases de données Oracle
lorsque vous exécutez les scripts de création de la base. Le rôle CONNECT est accordé
automatiquement à tout utilisateur créé avec Enterprise Manager. Dans les versions
antérieures de la base de données (avant Oracle Database 10g Release 2), le rôle CONNECT

ABDELLI Maher Page 22


Système de gestion de bases de données

incluait davantage de privilèges, tels que CREATE TABLE et CREATE DATABASE LINK.
Ces privilèges ont été supprimés pour des raisons de sécurité.

Rôles prédéfinis Descriptions


Permet d'accéder aux ressources système. Attention ce rôle
donne le privilège système UNLIMITED TABLESPACE. Il
RESOURCE
procure aussi une rétro-compatibilité avec la version 6
d'Oracle.
Permet à l'utilisateur de se connecter et de crée des objets à
CONNECT
la condition que vous lui donniez un quota sur un tablespace.
Donne tout les privilèges système avec l'option WITH
DBA
ADMIN OPTION
EXP_FULL_DATABASE Permet de faire des exports complets de la base de données.
IMP_FULL_DATABASE Permet de faire des imports complets de la base de données.
DELETE_CATALOG_RO Permet de vider les tables d'audit.
LE
EXECUTE_CATALOG_R Permet d'exécuter les packages PL/SQL système.
OLE
SELECT_CATALOG_RO Permet d'avoir accès sur les tables et vues du dictionnaire de
LE données.
Remarques :

- Mis à part le rôle DBA, il n'est pas conseillé d'utiliser les rôles prédéfinis d'Oracle
mais plutôt de créer et d'utiliser vos propres rôles.
- Il est à noter que les informations sur les rôles sont accessibles dans les vues du
dictionnaire de donnée DBA_ROLES (ensemble des rôles), DBA_SYS_PRIVS (les
privilèges accordés à chaque rôle).

e) Modifier un rôle

La seule chose qu'il est possible de modifier dans un rôle est son système de protection par
mots de passe. Ceci peut être fait grâce à la syntaxe suivante:

ALTER ROLE <nom du rôle>


{ NOT IDENTIFIED | IDENTIFIED { BY <mot de passe> |
EXTERNALLY }};
Le mot clé EXTERNALLY signifie que l'utilisateur devra être authentifié par le système
d'exploitation avant de pouvoir activer ou désactiver ce rôle.

f) Activation d'un rôle


Il est possible d'activer ou de désactiver un rôle temporairement pour une session. Quand un
rôle est activé, l'utilisateur pourra alors utiliser les privilèges de ce rôle.

Voici la syntaxe qui permet d'activer ou de désactiver un rôle :

ABDELLI Maher Page 23


Système de gestion de bases de données

SET ROLE { <nom du rôle> [IDENTIFIED BY PASSWORD]


[, <nom du rôle> [IDENTIFIED BY PASSWORD>]] … | ALL
[EXCEPT <nom du rôle> [, <nom du rôle>] …] | NONE};
Cette commande désactive tous les rôles et réactive seulement ceux cités dans la commande.

g) Suppression d'un rôle


Afin de s'assurer qu'un rôle ne peut plus être utilisé, il vaut mieux supprimer le rôle avec la
syntaxe suivante :

DROP ROLE <nom du rôle>;

V. Profile
Les profils imposent un ensemble nommé de limites concernant l'utilisation de la base
de données et les ressources des instances. Les profils gèrent également le statut des comptes
et imposent des restrictions sur les mots de passe des utilisateurs (longueur, délai d'expiration,
etc.). Chaque utilisateur se voit affecter un profil et ne peut appartenir qu'à un seul profil à la
fois. Si des utilisateurs sont connectés lorsque vous modifiez leur profil, le changement ne
prend effet que lors de leur prochaine connexion.

Les profils permettent à l'administrateur de contrôler les ressources système suivantes :

• CPU : Les ressources CPU peuvent être limitées par session ou par appel. Avec une
limite CPU/Session de 1 000, une session qui utilise ce profil et qui consomme plus
de 10 secondes de temps CPU (les limites de temps CPU étant exprimées en
centièmes de seconde) reçoit une erreur et est déconnectée :

ORA-02392: exceeded session limit on CPU usage, you are being logged off

• Network/Memory : Chaque session de base de données consomme des ressources


mémoire du système et (si la session est ouverte par un utilisateur qui ne se trouve
pas en local sur le serveur) des ressources réseau. Vous pouvez définir les éléments
suivants :

- Connect Time : Indique le nombre de minutes pendant lesquelles un utilisateur


peut rester connecté avant d'être automatiquement déconnecté.

- Idle Time : Définit le nombre de minutes pendant lesquelles la session d'un


utilisateur peut rester inactive avant d'être automatiquement déconnectée. Le
temps d'inactivité est calculé pour le processus serveur uniquement. Il ne tient

ABDELLI Maher Page 24


Système de gestion de bases de données

pas compte de l'activité des applications. La limite IDLE_TIME n'est pas


affectée par les interrogations longues et les autres opérations.

- Concurrent Sessions : Indique le nombre de sessions simultanées pouvant être


créées à l'aide d'un compte utilisateur de base de données.

- Private SGA : Limite la quantité d'espace consommé dans la mémoire SGA


(System Global Area) pour le tri, la fusion de bitmaps, etc. Cette restriction ne
prend effet que si la session utilise un serveur partagé. (Les serveurs partagés
sont traités dans le chapitre intitulé "Configurer l'environnement réseau
Oracle".)

• Disk I/O : Cette option limite la quantité de données qu'un utilisateur peut lire, par
session ou par appel. Les options Reads/Session et Reads/Call limitent le nombre
total de lectures réalisées à partir de la mémoire et du disque. Elles permettent de
s'assurer, par exemple, qu'aucune instruction consommant beaucoup d'E/S n'utilise
trop intensément la mémoire et les disques.

ABDELLI Maher Page 25

Vous aimerez peut-être aussi