Beispiel: Erstellen einer Datenbanksicht in DB2 mit SQL

Komplexität: Einsteiger Datenanforderung: Eigene Daten verwenden

Sie können mithilfe von SQL eine Sicht auf Tabellen und Feature-Classes in einer Enterprise-Geodatabase erstellen.

Anhand der Beispiele unter diesem Thema wird gezeigt, wie eine einfache Sicht in IBM DB2 erstellt wird, um den Benutzerzugriff auf bestimmte Spalten einzuschrä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);

Erteilen von Berechtigungen für die Tabelle

Wenn der Benutzer, der die Sicht erstellt, nicht der Besitzer der Tabelle(n) ist, auf denen die Sicht basiert, muss der Tabellenbesitzer dem Ersteller der Sicht mindestens eine Berechtigung zur Auswahl aus der Tabelle erteilen. Wenn der Besitzer der Sicht in der Lage sein muss, auch anderen Benutzern Berechtigungen für die Sicht zu erteilen, muss der Tabellenbesitzer dem Besitzer der Sicht die Berechtigung erteilen, anderen Benutzern Berechtigungen zu erteilen.

In diesem Beispiel befindet sich die Tabelle, auf der die Sicht basiert (employees), im Besitz von Benutzer "gdb". Der Benutzer, der die Sicht erstellt, ist Benutzer "rocket". Darüber hinaus muss Benutzer "rocket" anderen Benutzern Berechtigungen für die Sicht erteilen. Deshalb erteilt der Benutzer "gdb" dem Benutzer "rocket" die Berechtigung, aus der Tabelle "employees" auszuwählen und WITH GRANT OPTION einzuschließen, damit "rocket" anderen Benutzern SELECT-Berechtigungen für die Sicht erteilen kann.

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.

Erstellen von Sichten

In diesem Beispiel erstellt Benutzer "rocket" eine Sicht für die Tabelle "employees", um den Zugriff auf die Datensätze zu beschränken, deren Abteilung ("department") 201 ist:

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.

Erteilen von Berechtigungen für die Sicht

Sie können 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 "mgr200" eine SELECT-Berechtigung für die Sicht "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.

Testen der Berechtigungen

Melden Sie sich als "mgr200" an, und wählen Sie Datensätze aus "view_dept_201" aus:

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

Wie erwartet werden nur Datensätze für Mitarbeiter in Abteilung 201 zurückgegeben.

9/11/2013