Beispiel: Erstellen einer Datenbanksicht in DB2 mit dem Befehl "sdetable"
Sie können den Befehl "sdetable" verwenden, um eine Sicht in einer Geodatabase in IBM DB2 zu erstellen. Dabei wird die Sicht automatisch in ArcSDE registriert.
Das Beispiel in diesem Thema verdeutlicht, wie Sie mithilfe einer mit dem Befehl "sdetable" erstellten Sicht den Benutzerzugriff auf bestimmte Daten einschränken. Das Beispiel basiert auf einer Tabelle mit der folgenden Definition:
CREATE TABLE employees(emp_id integer not null, name varchar(32), department smallint not null, hire_date date not null);
Beachten Sie, dass die Tabelle bereits eine Spalte vom Typ "Integer" ohne Nullwerte enthält, die für die Zeilen-ID in ArcSDE verwendet werden kann.
Erstellen einer Sicht mit dem Befehl "sdetable"
Angenommen, Sie möchten, dass der Manager von Abteilung 101 alle Spalten der Tabelle "employees" sehen kann, aber nur die Zeilen mit den Angestellten von Abteilung 101. Sie können "sdetable" verwenden, um eine Sicht mit allen Zeilen zu erstellen, in denen die Abteilungsnummer 101 lautet. Durch die Option "–w" wird die WHERE-Klausel der Abfrage angegeben, die in der Sichtdefinition gespeichert ist.
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.
Weitere Informationen zum Befehl "sdetable" finden Sie in der Administration Command Reference.
Mit dem Befehl "sdetable" wird die Sicht im DB2-Systemkatalog so definiert, als ob Sie die Sicht mit dem Befehl "DB2 CREATE VIEW" selbst erstellt hätten. Um dies zu sehen, fragen Sie die Systemsicht DB2 SYSCAT.VIEWS ab.
db2 => SELECT viewschema, viewname, text FROM syscat.views WHERE viewname = 'VIEW_DEPT_101';
VIEWSCHEMA |
VIEWNAME |
TEXT |
---|---|---|
GDB |
VIEW_DEPT_101 |
CREATE VIEW view_dept_101 AS SELECT = emp_id, name, department, hire_date FROM GDB.EMPLOYEES WHERE department = 101 |
In diesem Beispiel wurde von ArcSDE in der Abfrage außerdem der Name des Besitzers dem Tabellennamen hinzugefügt. Wenn Sie eine eigene Sicht mit SQL (Structured Query Language) erstellen, wird dies nicht automatisch durchgeführt, es sei denn, Sie qualifizieren den Tabellennamen beim Erstellen der Sicht.
Beachten Sie, dass die Namen der Sicht und des Besitzers in Großbuchstaben konvertiert werden, bevor sie in SYSCAT.VIEWS gespeichert werden. Dies wird von DB2 durchgeführt, nicht von ArcSDE. Wenn Sie also diese speziellen Textwerte abfragen, müssen Sie sie in Großbuchstaben eingeben.
Einige Benutzer erstellen registrierte Sichten mit dem Befehl "sdetable –o create_view" und ändern die Sichtdefinition anschließend mit SQL. Dies ist nützlich, wenn eine komplexe Syntax beim Befehl "sdetable –o create_view" vermieden werden soll (vor allem mit der Option "–c") oder eine komplexere oder erweiterte Sichtdefinition erforderlich ist, wie z. B. eine Definition mit Verknüpfungen zu externen Datenbanken. Das Ändern einer Sicht kann zwar einige Probleme lösen, es kann jedoch auch dazu führen, dass die Sicht nicht mehr optimal mit ArcSDE oder ArcSDE-Clients wie ArcGIS Desktop funktioniert.
Erteilen von Berechtigungen für die Sicht
Der Besitzer der Sicht kann bestimmten Benutzern Berechtigungen für die Sicht erteilen, ohne den Benutzern Zugriff auf die Basistabelle (employees) zu erteilen. In diesem Beispiel erhält der Benutzer "mgr100" eine SELECT-Berechtigung für die Sicht "view_dept_101":
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.
In diesem Beispiel sind der Besitzer der Tabelle und der Besitzer der Sicht identisch. Wenn es verschiedene Besitzer gibt, muss der Tabellenbesitzer dem Besitzer der Sicht eine Berechtigung zur Auswahl aus der Tabelle sowie die Fähigkeit, die SELECT-Berechtigung anderen Benutzern zu erteilen, gewähren. Wenn die Berechtigung mit SQL erteilt wird, schließen Sie WITH GRANT OPTION in die Anweisung ein. Wenn die Berechtigung mit dem Befehl "sdetable" zusammen mit "grant" erteilt wird, müssen Sie die Übernahmeoption (–I) angeben.
Testen der Berechtigungen
Melden Sie sich als "mgr100" an, und wählen Sie Datensätze aus "view_dept_101" aus.
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
Wie erwartet werden nur Datensätze für Mitarbeiter in Abteilung 101 zurückgegeben.
Sichten sind Schemaobjekte, die unabhängig von den Tabellen sind, anhand derer sie ausgefüllt werden. In der folgenden Abfrage hat der Benutzer "mgr100" keinen Zugriff auf die Tabelle "employees", sodass es für "mgr100" so wirkt, als wäre die Tabelle "employees" nicht vorhanden.
db2 => SELECT * FROM gdb.employees; SQL0551N "MGR100" does not have the privilege to perform operation "SELECT" on object "GDB.EMPLOYEES". SQLSTATE=42501