Exemple : Création d'une vue de base de données dans DB2 à l'aide de la commande sdetable

Vous pouvez utiliser la commande sdetable pour créer une vue dans une géodatabase dans IBM DB2. La vue est alors automatiquement inscrite avec ArcSDE.

Cette rubrique contient un exemple d'utilisation d'une vue créée par sdetable pour limiter l'accès utilisateur à des données 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);

A noter que la table contient une colonne de nombres entiers de valeur non nulle qui peut être utilisée comme identifiant de ligne ArcSDE.

Créer une vue à l'aide de la commande sdetable

Supposons que vous vouliez que le responsable du service 101 consulte toutes les colonnes de la table "employees", mais uniquement les lignes concernant les employés du service 101. Utilisez sdetable pour créer une vue avec toutes les lignes dans lesquelles le numéro de service est 101. L'option –w spécifie la clause WHERE de la requête stockée avec la définition de la vue.

sdetable –o create_view –T view_dept_101 –t employees 
–c 'emp_id,name,department,hire_date' -w "department = 101" 
–u gdb –p gdb.bdg –i sde:db2 -s mydb2server -D testdb

Attribute        Administration Utility
__________________________________
Successfully created view view_dept_101.

Pour plus d'informations sur la commande sdetable, consultez le manuel Administration Command Reference.

La commande sdetable définit la vue dans le catalogue système DB2, comme si vous l'aviez créée vous-même à l'aide de la commande DB2 CREATE VIEW. Pour l'afficher, interrogez la vue système DB2 SYSCAT.VIEWS.

db2 => SELECT viewschema, viewname, text 
FROM syscat.views 
WHERE viewname = 'VIEW_DEPT_101';

VIEWSCHEMA

VIEWNAME

TEXT

Géodatabase

VIEW_DEPT_101

CREATE VIEW view_dept_101 
AS SELECT = emp_id, name, department, hire_date 
FROM GDB.EMPLOYEES 
WHERE department = 101

View_dept_101 dans SYSCAT.VIEW

ArcSDE ajoute le nom du propriétaire au nom de la table dans la requête. Si vous créez votre propre vue avec SQL (Structured Query Language), cette opération n'est pas effectuée automatiquement, sauf si vous qualifiez le nom de la table lors de la création de la vue.

Notez que les noms de la vue et de son propriétaire sont convertis en majuscules avant d'être stockés dans SYSCAT.VIEWS. DB2 effectue cette conversion, pas ArcSDE. Par conséquent, lorsque vous interrogez ces valeurs de texte spécifiques, vous devez les entrer en majuscules.

AttentionAttention :

Certains utilisateurs créent des vues enregistrées avec sdetable –o create_view, puis modifient la définition de la vue en utilisant SQL. Cela évite la syntaxe complexe de ligne de commande sdetable –o create_view (surtout l'option –c) ou permet d'inclure une définition de la vue plus complexe ou étendue, une qui utilise des connexions aux bases de données externes par exemple. Bien que modifier une vue puisse résoudre certains problèmes, vous risquez également de créer une vue qui ne fonctionne pas bien avec ArcSDE ou ses clients, tels qu'ArcGIS Desktop.

Accorder des privilèges sur la vue

Le propriétaire de la vue peut accorder des privilèges sur la vue à des utilisateurs spécifiques sans toutefois leur permettre d'accéder à la table de base (employees). Dans cet exemple, des privilèges Select sont accordés sur la vue view_dept_101 à l'utilisateur mgr100 :

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 view_dept_101 TO USER mgr100;
DB20000I  The SQL command completed successfully.
RemarqueRemarque :

Dans cet exemple, le propriétaire de la table et celui de la vue sont la même personne. S'ils étaient différents, le propriétaire de la table devrait accorder au propriétaire de la vue des privilèges de sélection dans la table, et lui permettre d'accorder des privilèges Select à d'autres utilisateurs. Si le privilège est accordé à l'aide de SQL, il convient d'inclure WITH GRANT OPTION dans l'instruction. Si le privilège est accordé à l'aide de la commande sdetable avec l'opération grant, l'option inherit (–I) doit être spécifiée.

Tester les privilèges

Connectez-vous en tant que mgr100 et sélectionnez des enregistrements dans view_dept_101.

db2 => connect to testdb user mgr100 using mgr100
   Database Connection Information
 Database server        = DB2 9.5.5
 SQL authorization ID   = MGR100
 Local database alias   = TESTDB

db2 => SELECT * FROM gdb.view_dept_101;

emp_id         name        dept      hire_date
29             YAN WU      101       04/15/2002
67             LEE VAN     101       11/01/2004
78             SUE CHOO    101       05/31/2005
105            DAN HO      101       10/01/2006
111            ANN ANG     101       12/15/2006
135            BILL BO     101       10/15/2007 

Comme prévu, tous les enregistrements de la table employees du service 101 sont renvoyés.

Les vues existent en tant qu'objets de la structure, indépendamment des tables qui les composent. Dans la requête suivante, l'utilisateur mgr100 n'a pas accès à la table employees. Pour mgr100, la table employees ne semble donc pas exister.

db2 => SELECT * FROM gdb.employees;
SQL0551N  "MGR100" does not have the privilege to perform operation "SELECT" 
on object "GDB.EMPLOYEES".  SQLSTATE=42501

3/6/2012