Beispiel: Erstellen einer Datenbanksicht in Oracle mit dem Befehl "sdetable"

Komplexität: Einsteiger Erforderliche Daten: Eigene Daten verwenden

Sie können den Befehl "sdetable" verwenden, um eine Sicht in einer Geodatabase in Oracle 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      number(38) unique not null,
  name        varchar2(32),
  department  number not null,
  hire_date   date not null);

Beachten Sie, dass die Tabelle bereits eine Spalte für Zahlen (ohne NULL-Werte) 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 "where department = 101" 
–u gdb –p gdb.bdg –i sde:oracle11g:ora1 -s myodbserver

Attribute        Administration Utility
__________________________________
Successfully created view view_dept_101.
TippTipp:

Weitere Informationen zum Befehl "sdetable" finden Sie in der Administration Command Reference.

Daraufhin können Sie ALL_VIEWS abfragen, um eine Beschreibung von "view_dept_101" zu erhalten.

set lines 60
set pages 10000
set long 2000
column text format a60 wrapped;

SELECT view_name, text_length, text 
FROM all_views
WHERE owner = 'GDB' and view_name = 'VIEW_DEPT_101';

VIEW_NAME

TEXT_LENGTH

TEXT

VIEW_DEPT_101

112

SELECT "EMP_ID","NAME","DEPARTMENT","HIRE_DATE", 
FROM GDB.EMPLOYEES 
WHERE department = 101

In diesem Beispiel wurde von ArcSDE der Name des Besitzers dem Tabellennamen in der Abfrage hinzugefügt. Wenn Sie Ihre eigene Sicht mit SQL erstellen, wird dies nicht automatisch durchgeführt.

Beachten Sie, dass die Namen der Sicht und des Besitzers in Großbuchstaben konvertiert werden, bevor sie in ALL_VIEWS gespeichert werden. Dies wird von Oracle durchgeführt, nicht von ArcSDE. Wenn Sie also diese speziellen Textwerte abfragen, müssen Sie sie in Großbuchstaben eingeben.

VorsichtVorsicht:

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":

SQL> GRANT SELECT ON view_dept_101 TO mgr100;

Grant succeeded.
HinweisHinweis:

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.

conn mgr100/mgr100
Connected.
SQL> 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 CHO    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.

SQL> SELECT * FROM gdb.employees;
select * from gdb.employees
                  *
ERROR at line 1:
ORA-00942: table or view does not exist

7/10/2012