Exemple : création d'une vue de base de données dans DB2 à l'aide de SQL
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 IBM DB2 pour restreindre 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 integer not null, name varchar(32),
department smallint 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.
db2 => connect to testdb user gdb using gdb.dbg
Database Connection Information
Database server = DB2 9.5.5
SQL authorization ID = GDB
Local database alias = TESTDB
db2 => GRANT SELECT
ON employees
TO USER rocket WITH GRANT OPTION;
DB20000I The SQL command completed successfully.
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 :
db2 => connect to testdb user rocket using nopeeking
Database Connection Information
Database server = DB2 9.5.5
SQL authorization ID = ROCKET
Local database alias = TESTDB
db2 => CREATE VIEW view_dept_201
AS SELECT emp_id, name, department, hire_date
FROM gdb.employees
WHERE department = 201;
DB20000I The SQL command completed successfully.
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 :
db2 => connect to testdb user rocket using nopeeking
Database Connection Information
Database server = DB2 9.7.4
SQL authorization ID = ROCKET
Local database alias = TESTDB
db2 => GRANT SELECT ON view_dept_201 TO USER mgr200;
DB20000I The SQL command completed successfully.
Tester les privilèges
Connectez-vous en tant qu'utilisateur mgr200 et sélectionnez les enregistrements de la vue view_dept_201 :
db2 => connect to testdb user mgr200 using mgr200
Database Connection Information
Database server = DB2 9.7.4
SQL authorization ID = MGR200
Local database alias = TESTDB
db2 => 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.