Exemple : Création d'une vue de base de données dans DB2 avec SQL et inscription avec ArcSDE

Complexité : Débutant Exigences relatives aux données : Utilisez vos propres données

Vous pouvez utiliser SQL pour créer une vue dans une géodatabase ArcSDE. Pour interroger la vue avec ArcGIS, vous devez l'inscrire avec ArcSDE.

Pour inscrire la vue avec ArcSDE, la table sous-jacente à partir de laquelle la vue est créée doit contenir une colonne d'identifiant de ligne appropriée. Les identifiants de ligne sont des colonnes de nombres entiers non nuls et uniques utilisées par ArcSDE pour identifier des lignes dans une table ou une vue. Vous pouvez créer une vue sans inscrire de colonne d'identifiant de ligne, mais sa fonctionnalité est limitée dans ArcGIS, car il est nécessaire d'inscrire une colonne d'identifiant de ligne pour effectuer des sélections et des requêtes dans ArcGIS.

L'exemple de cette rubrique illustre la procédure d'inscription avec ArcSDE d'une vue créée dans IBM DB2 à l'aide de SQL. 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 (emp_id). Cette colonne doit être incluse dans la définition de la vue pour que vous puissiez l'inscrire avec ArcSDE.

Accorder des privilèges sur la table

Si l'utilisateur à l'origine de la vue n'est pas le propriétaire de la table sur laquelle repose la vue, ce dernier doit accorder au créateur de la vue le privilège de sélectionner des éléments dans la table. Si le propriétaire de la vue a besoin d'accorder des privilèges sur la vue à d'autres utilisateurs, le propriétaire de la table doit lui permettre de le faire.

Dans cet exemple, la table sur laquelle est basée la vue (employees) appartient à l'utilisateur gdb. L'utilisateur qui crée la vue est l'utilisateur rocket. En outre, cet utilisateur 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électionner des éléments dans la table employees et inclure WITH GRANT OPTION pour que rocket puisse accorder à d'autres utilisateurs des 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 "employees" pour autoriser l'accès uniquement aux enregistrements contenant le service 201.

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 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_201 à l'utilisateur mgr200 :

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 => GRANT SELECT ON view_dept_201 TO USER mgr200;
DB20000I  The SQL command completed successfully.

Tester les privilèges

Connectez-vous en tant que mgr200 et sélectionnez des enregistrements dans view_dept_201.

db2 => connect to testdb user mgr200 using mgr200
   Database Connection Information
 Database server        = DB2 9.5.5
 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, tous les enregistrements de la table "employees" du service 201 sont renvoyés.

Inscription de la vue dans ArcSDE

Pour interroger une vue ou sélectionner des enregistrements à partir d'une application cliente ArcGIS, vous devez inscrire la vue avec ArcSDE. Cela permet d'ajouter un enregistrement à la table système TABLE_REGISTRY dans ArcSDE.

Pour inscrire la vue, utilisez la commande sdetable avec l'opération register. Seul le propriétaire de la vue peut l'inscrire avec ArcSDE. Le nom de l'utilisateur rocket et le mot de passe doivent donc être fournis avec la commande sdetable lors de l'inscription de view_dept_201.

sdetable -o register -t rocket.view_dept_201 -c emp_id -C SDE 
-i sde:dbe -s mydb2server -D testdb -u rocket -p nopeeking

Dans cet exemple, l'identifiant de ligne (emp_id) inscrit est conservé par ArcSDE. Si la vue est en lecture seule, vous pouvez inscrire l'identifiant de ligne comme étant géré par l'utilisateur.

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


3/6/2012