Index Tdm
Précédent Introduction
Go up to Contrôle des accès à la base et sécurité des données

Droits d'accès aux tables

La protection des objets d'une base de données est décentralisée : c'est le créateur d'un objet qui possède tous les droits de lecture, de modification et de suppression de cet objet. Les autres utilisateurs n'ont aucun droit d'accès à cet objet, à moins que le créateur ne les leur accorde explicitement par une commande GRANT :


GRANT privilege ON {nom_table | nom_vue} TO nom_utilisateur
WITH GRANT OPTION ;

Les privilèges pouvant être accordés sont entre autres les suivants :

[update(col,...) ]

SELECT

consultation

INSERT

rajout des lignes

UPDATE(col,...)

modification des lignes (peut-être restreint à certaines colonnes)

DELETE

suppression des lignes

ALTER

modification de la définition de la table

ALL

tous les droits ci-dessus

Un utilisateur ayant reçu un privilège avec l'option GRANT peut le transmettre à son tour (WITH GRANT OPTION).

Exemple : L'utilisateur scott peut autoriser l'utilisateur douglas à lire sa table emp.


GRANT SELECT ON emp TO douglas ;

Les droits peuvent être accordés à tous les utilisateurs en employant le mot réservé PUBLIC à la place du nom d'utilisateur.


GRANT SELECT, UPDATE ON emp TO PUBLIC;

Un utilisateur ayant accordé un privilège peut le reprendre à l'aide de l'ordre REVOKE.


REVOKE PRIVILèGE ON {nom_table | nom_vue} FROM  nom_utilisateur;

Le propriétaire d'une table peut donner des droits de lecture non pas sur la table entière, mais sur une vue basée sur la table. Ainsi, seules les informations faisant partie de la vue seront accessibles.


CREATE VIEW emp1 AS
SELECT nom, fonction, embauche
FROM scott.emp
WHERE n_dept != 10 ;

GRANT SELECT ON emp1 TO PUBLIC;

Tous les utilisateurs pourront sélectionner les employés à travers la vue emp1 : ils ne verront que les colonnes nom, fonction, embauche de la table emp et n'auront pas accès aux employés du département 10. Avec l'option de contrôle (CHECK OPTION), les vues peuvent servir à réaliser les contrôles lors des mises à jour.

Exemple : La vue suivante ne permettrait pas d'insérer dans la table des employés emp un employé dont le numéro de département ne figurerait pas dans la table des départements dept :


CREATE VIEW majemp AS
SELECT * 
FROM emp
WHERE n_dept IN (SELECT n_dept  
                 FROM dept)
WITH CHECK OPTION ;

Comme il est impossible de faire une mise à jour sur une vue comportant une jointure il faut transformer le critère de jointure en une sous-interrogation.

Pour oracle , le nom complet d'une table ou d'une vue est le nom donné par le créateur, préfixé par le nom du créateur. Par exemple scott.emp est le nom complet de la table emp créée par l'utilisateur scott . Ceci permet à plusieurs utilisateurs de créer des objets de même nom sans qu'il y ait confusion. En revanche, pour accéder à un objet dont on n'est pas le créateur, il faut le désigner par son nom complet incluant le nom du créateur.


Index Tdm
Précédent Introduction
Go up to Contrôle des accès à la base et sécurité des données