Exemple : création d'une vue de base de données dans Oracle à l'aide de SQL

Complexité : Débutant Exigences en matière de données : Utiliser vos propres données

Vous pouvez utiliser SQL pour créer une vue sur des tables et des classes d'entités dans une géodatabase d'entreprise.

Les exemples donnés dans cette rubrique illustrent comment créer une vue simple dans Oracle pour limiter l'accès utilisateur à des colonnes spécifiques. L'exemple est basé sur une table dont la définition est la suivante :

CREATE TABLE employees (
  emp_id      number(38) unique not null,
  name        varchar2(32),
  department  number not null,
  hire_date   date not null);

Accorder des privilèges sur la table

Si l'utilisateur qui crée la vue n'est pas le propriétaire de la table ou des tables sur lesquelles la vue repose, le propriétaire des tables doit au moins accorder au créateur de la vue les privilèges nécessaires pour réaliser des sélections dans la table. Si le propriétaire de la vue doit être en mesure d'accorder des privilèges sur la vue à d'autres utilisateurs, le propriétaire de la table doit accorder au propriétaire de la vue la possibilité d'accorder des privilèges à d'autres utilisateurs.

Dans cet exemple, la table sur laquelle repose la vue (employés) est la propriété de l'utilisateur gdb. L'utilisateur qui crée la vue est l'utilisateur rocket. En outre, l'utilisateur rocket doit accorder des privilèges sur la vue à d'autres utilisateurs. Par conséquent, l'utilisateur gdb doit accorder à l'utilisateur rocket le privilège de sélection dans la table des employés et inclure WITH GRANT OPTION afin que l'utilisateur rocket puisse accorder à d'autres utilisateurs les privilèges SELECT sur la vue.

conn gdb/gdb.bdg

GRANT SELECT 
ON gdb.employees 
TO rocket WITH GRANT OPTION;

Créer une vue

Dans cet exemple, l'utilisateur rocket crée une vue sur la table des employés afin de limiter l'accès aux enregistrements où le département a la valeur 201 uniquement :

CREATE VIEW view_dept_201 
AS SELECT (emp_id,name,department,hire_date)
FROM gdb.employees 
WHERE department = 201;

Accorder des privilèges sur la vue

Vous pouvez accorder des privilèges sur la vue à des utilisateurs spécifiques sans avoir à leur accorder l'accès à la table de base (employés). Dans cet exemple, des privilèges SELECT sont accordés à l'utilisateur mgr200 sur la vue view_dept_201 :

conn rocket/nopeeking

GRANT SELECT ON rocket.view_dept_201 TO mgr200;

Tester les privilèges

Connectez-vous en tant qu'utilisateur mgr200 et sélectionnez les enregistrements de la vue view_dept_201 :

conn mgr200/topsecret

SELECT * FROM rocket.view_dept_201; 

EMP_ID     NAME       DEPT     HIRE_DATE 
112        LOLLI POP  201      06/30/2007 
134        VAN CHIN   201      10/15/2007 
150        DON GUN    201      03/01/2009

Comme prévu, seuls les enregistrements correspondant aux employés du département 201 sont renvoyés.

5/10/2014