Deutsch

How To: Widerrufen von Datenbankberechtigungen in den ArcGIS-Geodatabase-Metadatentabellen

Zusammenfassung

In den Anweisungen wird beschrieben, wie die Berechtigungen INSERT, UPDATE und DELETE in den gdb_*-Geodatabase-Tabellen in Enterprise-Geodatabase-Instanzen für Oracle und SQL*Server widerrufen werden (gilt für ArcGIS 9.x und 10.x).

Wenn eine Geodatabase erstellt wird, werden einige Geodatabase-Metadatentabellen mit Namen im Format gdb_* im Schema des Administrators (SDE-Schema in Oracle und SQL*Server bzw. DBO-Schema in SQL*Server) erstellt, wobei jeweils automatisch die Berechtigungen SELECT, INSERT, UPDATE und DELETE an PUBLIC erteilt werden. Diese Berechtigungen sind erforderlich, um die Erstellung von Objektklassen, Feature-Classes, Feature-Datasets, Domänen, Netzwerken und Topologien, die Replikation usw. in der Geodatabase zu ermöglichen. Allerdings machen es diese offenen Berechtigungen auch möglich, dass Benutzer eine Geodatabase böswillig beschädigen können, indem sie mit SQL die Tabellen direkt modifizieren.

Um Missbrauch und Schäden zu verhindern, können Sie die an PUBLIC erteilten Berechtigungen INSERT, UPDATE und DELETE für die gdb_*-Tabellen widerrufen. Wenn die Standardberechtigungen in den gdb_*-Geodatabase-Tabellen entfernt wurden, sind Benutzer nicht mehr in der Lage, Objekte in der Geodatabase zu erstellen oder grundlegende Tasks, wie zum das Ausführen vieler der Geoverarbeitungswerkzeuge, mit denen die Geodatabase erstellt oder aktualisiert werden kann, auszuführen.

Es wird empfohlen, vor dem Widerrufen von Berechtigungen in einer Produktionsumgebung die ArcGIS-Anwendung zu testen, um genau zu ermitteln, welche Geodatabase-Funktionalität für Benutzer ohne die Berechtigungen zum Einfügen, Aktualisieren oder Löschen in den gdb_*-Geodatabase-Tabellen nicht verfügbar ist.

Der Geodatabase-Administrator kann INSERT, UPDATE und DELETE explizit bestimmten Benutzern in der Datenbank, die Geodatabase-Eigenschaften erstellen und ändern müssen, erteilen.

Vorgehensweise

Die folgenden Prozeduren sind Beispiele für die Vorgehensweise beim Widerrufen der an PUBLIC erteilten Berechtigungen INSERT, UPDATE und DELETE für die gdb_*-Tabellen in Oracle und SQL*Server. In zusätzlichen Prozeduren wird gezeigt, wie INSERT, UPDATE und DELETE an PUBLIC erteilt werden, wenn diese Berechtigungen wiederhergestellt werden müssen.
 

Mit der folgenden Prozedur werden die an PUBLIC erteilten Berechtigungen INSERT, UPDATE und DELETE für die gdb_*-Tabellen in Oracle widerrufen. Führen Sie diese Prozedur als SDE-Benutzer in SQL*Plus aus.
 

Code:
DECLARE

CURSOR each_table IS
SELECT DISTINCT table_name
FROM user_tab_privs_made
WHERE table_name LIKE 'GDB_%'
       AND privilege IN ('INSERT','UPDATE','DELETE')
AND grantee = 'PUBLIC'
ORDER BY table_name;

BEGIN

IF USER <> 'SDE' THEN
RAISE_APPLICATION_ERROR(-20000, 'USER must be SDE to execute this procedure.');
END IF;

FOR each_row IN each_table LOOP
    EXECUTE IMMEDIATE 'REVOKE INSERT, UPDATE, DELETE ON '||each_row.table_name||' FROM PUBLIC'; 
END LOOP;

END;
/


Im folgenden Code wird die Vorgehensweise in Oracle gezeigt, um PUBLIC die Berechtigungen INSERT, UPDATE und DELETE für die gdb_*-Tabellen zu erteilen. Führen Sie diese Prozedur als SDE-Benutzer in SQL*Plus aus.
 
Code:
DECLARE

  CURSOR each_table IS
    SELECT DISTINCT table_name
      FROM user_tab_privs_made
     WHERE table_name LIKE 'GDB_%'
       AND privilege = 'SELECT'
       AND grantee = 'PUBLIC'
  ORDER BY table_name;

BEGIN

  IF USER <> 'SDE' THEN
    RAISE_APPLICATION_ERROR(-20000, 'USER must be SDE to execute this procedure.');
  END IF;

  FOR each_row IN each_table LOOP
    EXECUTE IMMEDIATE 'GRANT INSERT, UPDATE, DELETE ON '||each_row.table_name||' TO PUBLIC'; 
  END LOOP;

END;
/
 

Mit der folgenden Prozedur werden die an PUBLIC erteilten Berechtigungen INSERT, UPDATE und DELETE für die gdb_*-Tabellen in SQL*Server widerrufen. Führen Sie diese Prozedur als SDE- oder DBO-Benutzer in SQL*Server Management Studio aus.
 

Code:
Declare @TName varchar(100)
Declare @SQLStr varchar (500)

Declare	each_table	cursor
for
select name from sys.tables where name like 'GDB_%'

open each_table
Fetch each_table into @TName
while (@@fetch_status=0) 
Start
	set @SQLStr = 	'REVOKE INSERT, UPDATE, DELETE ON ' + @TName + ' FROM PUBLIC cascade'
exec (@SQLStr)

	Fetch each_table into @TName
End
close each_table
Deallocate each_table


Mit der folgenden Prozedur werden die Berechtigungen INSERT, UPDATE und DELETE für die gdb_*-Tabellen in SQL*Server an PUBLIC erteilt. Führen Sie diese Prozedur als SDE- oder DBO-Benutzer in SQL*Server Management Studio aus.
 
Code:
Declare @TName varchar(100)
Declare @SQLStr varchar (500)

Declare	each_table	cursor
for
	select name from sys.tables where name like 'GDB_%'

open each_table
Fetch each_table into @TName
while (@@fetch_status=0) 
Start
	set @SQLStr = 	'GRANT INSERT, UPDATE, DELETE ON ' + @TName + ' TO PUBLIC'
	exec (@SQLStr)

	Fetch each_table into @TName
End
close each_table
Deallocate each_table