Plan du site  
français  English
pixel
pixel

Articles - Étudiants SUPINFO

Chapitre 08 - Privilèges et utilisateurs

Présentation

Dans un environnement multiutilisateur, vous voulez certainement gérer l’accès à la base de données et la sécurité d’utilisation de la dernière.

Avec la sécurité du serveur de base de données Oracle, vous pouvez réalisez les actions suivantes :

  • Contrôler l’accès à la base de données

  • Donner l’accès à des objets spécifiques de la base de données

  • Vérifier les privilèges donnés et reçus avec le dictionnaire des données Oracle

  • Créer les synonymes pour les objets de la base de données

La sécurité de la base peut être classifiée en deux catégories : la sécurité du système et la sécurité des données.

La sécurité du système couvre l’accès à la base de données ainsi que l’utilisation de la base de données au niveau du système. Par exemple, le nom d’utilisateur et le mot de passe, l’espace disque alloué aux utilisateurs et les opérations que les utilisateurs peuvent réaliser sur le système.

La sécurité des données couvre l’accès et l’utilisation des objets de la base de données ainsi que les actions que les utilisateurs peuvent effectuer sur les objets.

Privilèges

Le droit d’exécuter la requête SQL spécifique s’appelle un privilège.

L’administrateur de base de données (DBA) est un utilisateur haut niveau qui a le droit de créer des utilisateurs et de leur donner des droits d’accès à la base de données et aux objets. Les utilisateurs ont besoin des privilèges système pour accéder à la base de données et des privilèges objet pour manipuler le contenu des objets de la base de données. Les utilisateurs peuvent recevoir le privilège permettant d’accorder des privilèges à d’autres utilisateurs ou à des rôles qui sont des groupes nommés de privilèges.

Les schémas

Un schéma est une collection d’objets comme des tables, des vues ou des séquences. Le schéma appartient à un utilisateur et porte son nom.

Privilèges système

Il existe plus de 100 privilèges système disponibles pour les utilisateurs et les rôles. Les privilèges système sont habituellement donnés par l’administrateur de la base de données.

Les privilèges spécifiques du DBA

Voici quelques privilèges système dont le DBA dispose :

Privilège système

Operations autorisées

CREATE USER

Permet de créer d’autres utilisateurs Oracle

DROP USER

Permet de supprimer d’autres utilisateurs

DROP ANY TABLE

Permet de supprimer une table dans n’importe quel schéma

BACKUP ANY TABLE

Permet de sauvegarder et de restaurer n’importe quelle table dans n’importe quel schéma avec l’utilitaire d’export

SELECT ANY TABLE

Permet d’interroger les tables, les vues ou les vues matérialisées dans n’importe quel schéma

CREATE ANY TABLE

Permet de créer des tables dans n’importe quel schéma

L’administrateur de la base de données a la plupart des privilèges permettant, entre autre, de :

  • Créer de nouveaux utilisateurs

  • Supprimer des utilisateurs

  • Supprimer des tables

  • Récupérer les tables

Les privilèges spécifiques des utilisateurs

Une fois que le DBA ait créé un utilisateur, il peut lui accorder des privilèges.

Voici les privilèges système généralement accordés aux développeurs d’applications.

Privilège système

Operations autorisées

CREATE SESSION

se connecter à la base de données

CREATE TABLE

créer des tables dans le schéma de l’utilisateur

CREATE SEQUENCE

créer des séquences dans le schéma de l’utilisateur

CREATE VIEW

créer des vues dans le schéma de l’utilisateur

CREATE PROCEDURE

créer des procédures stockées, des fonctions ou des packages dans le schéma de l’utilisateur

Après qu’un utilisateur soit créé, le DBA peut lui donner des privilèges systèmes en utilisant la syntaxe suivante :

GRANT privilege [, privilege...]
TO user [, user| role, PUBLIC...];

Dans la syntaxe :

  • privilege est le privilège système qui sera assigné

  • user | role | PUBLIC est le nom de l’utilisateur, le nom du rôle ou PUBLIC qui indique que tous les utilisateurs auront le privilège

[Note]

Les privilèges systèmes de l’utilisateur courant peuvent être trouvés dans la vue du dictionnaire des données SESSION_PRIVS.

Assigner des privilèges système

Le DBA utilise la commande GRANT pour donner des privilèges système à un utilisateur. Après que l’utilisateur ait reçu les privilèges, il peut immédiatement les utiliser.

Dans l’exemple, l’utilisateur Scott a reçu les privilèges permettant d’ouvrir des sessions, de créer des tables, des séquences et des vues.

GRANT create session, create table, create sequence, create view
TO scott;
Grant succeeded.

Gestion des utilisateurs

Création des utilisateurs

Le DBA crée un utilisateur en exécutant l’ordre SQL CREATE USER. Après la création, l’utilisateur ne dispose d’aucun privilège. Le DBA peut alors lui en accorder. Ces privilèges déterminent ce que l’utilisateur peut faire au niveau de la base de données.

Syntaxe :

CREATE USER user
IDENTIFIED BY password;

Dans la syntaxe :

  • user est le nom de l’utilisateur à créer

  • password spécifie le mot de passe que l utilisateur doit utiliser afin de se connecter à la base de données

Dans l’exemple suivant, l’utilisateur HR est créé avec le mot de passe HR.

CREATE USER HR
IDENTIFIED BY HR;
User created.

Changer votre mot de passe

Le DBA crée un compte et l’initialise avec un mot de passe pour chaque utilisateur. Vous pouvez changer votre mot de passe en utilisant la requête ALTER USER.

Syntaxe :

ALTER USER user IDENTIFIED BY password;

Dans la syntaxe :

  • user est le nom de l’utilisateur

  • password spécifie le nouveau mot de passe

Bien que la requête puisse être utilisée pour changer votre mot de passe, elle a plusieurs autres options. Vous devez avoir le privilège ALTER USER pour changer toute autre option.

[Note]

La commande SQL*Plus PASSWORD ou PASSW peut être utilisé pour changer le mot de passe d’un utilisateur quand l’utilisateur est connecté. Cette commande n’est pas disponible dans iSQL*Plus.

L’utilisateur HR peut changer son mot de passe en utilisant la requête suivante :

ALTER USER HR
IDENTIFIED BY employ;
User altered.

Les privilèges objet

Un privilège objet est un privilège ou un droit permettant de réaliser une action particulière sur une table, une vue, une séquence ou une procédure spécifique. Chaque objet a un jeu particulier de privilèges pouvant être accordés.

Le tableau suivant montre les privilèges pour les différents objets. Remarquez que les seuls privilèges SELECT et ALTER s'appliquent à une séquence. Utilisation du privilège UPDATE, REFERENCES et INSERT peut être limité à certaines colonnes. Un privilège SELECT peut être limité en créant une vue avec un sous-ensemble de colonnes et en accordant le privilège seulement sur la vue. Un privilège accordé sur un synonyme est converti en privilège sur la table de base référencée par le synonyme.

Privilège objet Table Vue Séquence Procédure
ALTER    
DELETE    
EXECUTE      
INDEX      
INSERT    
REFERENCES      
SELECT  
UPDATE    

Assigner des privilèges objet

Différents privilèges objet sont disponibles pour les différents types d’objets de schéma. Un utilisateur a tous les privilèges objets sur les objets se trouvant dans son schéma. Un utilisateur peut donner n’importe quel privilège objet sur n’importe quel objet lui appartenant à tout utilisateur ou rôle.

Syntaxe :

GRANT object_priv [(columns)]|ALL ON object
TO {user|role|PUBLIC}
[WITH GRANT OPTION];

Dans la syntaxe :

  • object_priv est un privilège objet

  • ALL spécifie que tous les privilèges objet

  • columns spécifie que les colonnes de la table ou de la vue auxquelles les privilèges s’appliquent.

  • ON object est l’objet sur lequel les privilèges s’appliquent

  • TO identifie à qui les privilèges ont assignés

  • PUBLIC assigne les privilèges objets à tous les utilisateurs

WITH GRANT OPTION permet à l’utilisateur de donner les privilèges objets à d’autres utilisateurs et rôles

Si la requête GRANT inclut WITH GRANT OPTION alors la personne recevant le privilège en question pourra à son tour donner ce privilège à d’autres utilisateurs. Si la clause WITH GRANT OPTION est absente l’utilisateur ayant reçu un privilège objet ne peut pas l’assigner à quelqu’un d’autre.

Règles :

  • Vous pouvez assigner les privilèges sur un objet s’il est dans votre schéma ou si le privilège sur l’objet en question vous a été assigné en utilisant WITH GRANT OPTION.

  • Le propriétaire de l’objet peut accorder n’importe quel privilège sur cet objet à tout utilisateur ou rôle de la base de données.

  • Le propriétaire de l’objet acquière automatiquement tous les privilèges objet sur ce dernier.

La requête suivante donne aux utilisateurs Sue et Rich le privilège permettant d’interroger votre table EMPLOYEES

GRANT select ON employees
TO sue, rich;
Grant succeeded.

La requête ci-dessous donne le privilège UPDATE sur les colonnes DEPARTMENT_NAME et LOCATION_ID de la table DEPARTMENTS à l’utilisateur Scott ainsi qu’au rôle manager.

GRANT update (department_name, location_id) ON departments
TO scott, manager;
Grant succeeded.

Maintenant, si Sue et Rich veulent utiliser la requête SELECT pour obtenir des données de la table EMPLOYEES, ils doivent utiliser la syntaxe suivante :

SELECT * FROM HR.employees;

Autrement, ils peuvent créer un synonyme pour la table et lancer une requête SELECT sur le synonyme :

CREATE SYNONYM emp FOR HR.employees;
SELECT * FROM emp;

WITH GRANT OPTION

L’utilisateur ayant reçu un privilège avec la clause WITH GRANT OPTION l’assigner à un autre utilisateur ou à un autre rôle. Si le privilège est retiré à cet utilisateur, tous les utilisateurs à qui il avait donné ce privilège se le verront enlever de manière automatique.

L’exemple suivant donne à l’utilisateur Scott le privilège SELECT et INSERT sur votre table DEPARTMENTS. Scott pourra accorder ces privilèges aux autres.

GRANT select, insert ON departments
TO scott
WITH GRANT OPTION;
Grant succeeded.

PUBLIC

Le propriétaire peut donner l’accès à sa table à tous les utilisateurs en utilisant le mot-clé PUBLIC.

Cette requête autorise tous les utilisateurs du système à interroger les données de la table DEPARTMENTS d’Alice.

GRANT select ON alice.departments
TO PUBLIC;
Grant succeeded.

Confirmation des privilèges accordés

Si vous tentez de réaliser une opération non autorisée comme par exemple supprimer une ligne d’une table sur laquelle vous n’avez pas le privilège DELETE, le serveur Oracle retourne une erreur.

Si vous recevez un message d’erreur du serveur Oracle « Table ou vue inexistante » alors vous avez réalisé une des actions suivantes :

  • Si vous interroger une table ou une vue qui n’existe pas.

  • Si vous tentez de réaliser une opération sur une table ou une vue pour laquelle vous n’avez pas de privilège approprié.

Vous pouvez interroger le dictionnaire de données pour afficher les privilèges que vous possédez. Le tableau décrit les différentes vues du dictionnaire de données.

Vue du dictionnaire de données

Description

ROLE_SYS_PRIVS

Les privilèges système accordés à un rôle.

ROLE_TAB_PRIVS

Les privilèges sur les tables accordés à un rôle.

USER_ROLE_PRIVS

Les rôles accessibles par l’utilisateur.

USER_TAB_PRIVS_MADE

Les privilèges objet accordés sur les objets de l’utilisateur.

USER_TAB_PRIVS_RECD

Les privilèges objet accordés à l’utilisateur.

USER_COL_PRIVS_MADE

Les privilèges objet accordés sur les colonnes des objets de l’utilisateur.

USER_COL_PRIVS_RECD

Les privilèges objet accordés à l’utilisateur sur des colonnes des objets.

USER_SYS_PRIVS

Les privilèges système accordés à l’utilisateur.

Révoquer les privilèges

Vous pouvez retirer les privilèges assignés aux autres utilisateurs en utilisant l’ordre REVOKE.

Quand vous utilisez cet ordre, les privilèges que vous spécifiez sont retirés des utilisateurs désignés. Tous les utilisateurs ayant reçu les privilèges de l’utilisateur dont vous retirez les droits se verront perdre les privilèges concernés automatiquement.

Syntaxe :

REVOKE {privilege [, privilege...]|ALL} 
ON object
FROM {user[, user...]|role|PUBLIC}
[CASCADE CONSTRAINTS];

Dans la syntaxe :

  • CASCADE CONSTRAINTS supprime toutes les contraintes d’intégrité référencées

[Note]

Si un employé a quitté l’entreprise et que vous supprimez ses privilèges, vous devez réassigner tous les privilèges que cet utilisateur a donnés aux autres. Si vous supprimez le compte de l’utilisateur sans lui retirer les privilèges alors les privilèges systèmes que celui-ci a donnés aux autres utilisateurs ne sont pas affectés par l’action.

L’utilisateur Alice peut retirer les privilèges SELECT et INSERT donnés à l’utilisateur Scott sur la table DEPARTMENTS en utilisant la requête suivante.

REVOKE select, insert
ON departments
FROM scott;
Revoke succeeded.
[Note]

Si un utilisateur a reçu le privilège avec la clause WITH GRANT OPTION, cet utilisateur peut aussi donner ce privilège avec la clause WITH GRANT OPTION, donc une longue chaine d’assignations des privilèges est possible. Or, les assignations circulaires ne sont pas autorisées (accorder le privilège à la personne qui l’a accordé en premier).

Si le propriétaire de l’objet retire un privilège de l’utilisateur qui l’a accordé à d’autres utilisateurs, alors la suppression est répercutée en cascade.

Par exemple, si l’utilisateur A donne le privilège SELECT sur une table à l’utilisateur B en incluant la clause WITH GRANT OPTION, l’utilisateur B peut à son tour donner ce privilège SELECT avec la clause WITH GRANT OPTION à l’utilisateur C qui peut donner le privilège SELECT à l’utilisateur D. Si l’utilisateur A retire le privilège à l’utilisateur B alors les privilèges sont automatiquement retirés aux utilisateurs C et D.

Les rôles

Présentation

Un rôle est un groupe nommé de privilèges qui peuvent être assignés à un utilisateur. Cette méthode facilite la gestion des privilèges.

Un utilisateur peut avoir accès à plusieurs rôles et plusieurs utilisateurs peuvent recevoir le même rôle. Les rôles sont spécialement créés pour une application de la base de données.

Créer et assigner un rôle

Tout d’abord, le DBA doit créer le rôle. Ensuite, il peut assigner des privilèges au rôle et assigner le rôle à des utilisateurs.

Syntaxe :

CREATE ROLE role;

Dans la syntaxe :

  • role est le nom du rôle qui sera créé

Après que le rôle soit créé, le DBA peut utiliser la requête GRANT pour assigner les privilèges au rôle tout comme assigner ce rôle aux utilisateurs.

Dans l’exemple, un rôle manager est créé, ensuite les privilèges permettant de créer des tables et des vues lui sont assignés. Le rôle est assigné à De Haan et Kochhar. Désormais, De Haan et Kochhar peuvent créer des tables et des vues.

Si un utilisateur a plusieurs rôles, il reçoit tous les privilèges associés à tous ces rôles.

  • Créer un rôle

    CREATE ROLE manager;
    Role created.
  • Assigner des privilèges au rôle

    GRANT create table, create view
    TO manager;
    Grant succeeded.
  • Assigner le rôle aux utilisateurs

    GRANT manager TO DE HAAN, KOCHHAR;
    Grant succeeded.
A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels