Gesperrte Schemata in Application Express

05.
Juni
2006
Veröffentlicht von: Hildegard Asenbauer

Ist es Ihnen schon passiert, dass Sie in Application Express ein Schema einem Workspace zuordnen wollten, aber dieses Schema wurde Ihnen nicht angeboten?

Über das Package FLOWS_020000.HTMLDB_SITE_ADMIN_PRIVS kann ein Datenbankadministrator Schemata freigeben oder sperren.

In der APEX Version 3.2 wurde das Schema umbenannt. Der korrekte Name lautet nun, z.B. in der Version 4.0, APEX_040000.HTMLDB_SITE_ADMIN_PRIVS. Es gibt aber auch ein Synonym für das Package mit dem Namen APEX_SITE_ADMIN_PRIVS. ;-)

Es beinhaltet folgende Prozeduren:

  • UNRESTRICT_SCHEMA: Dadurch wird ein Schema generell freigegeben für die Verwendung.
  • RESTRICT_SCHEMA: Dadurch wird ein Schema generell gesperrt für die Verwendung.
  • CREATE_EXCEPTION: Dadurch wird ein an sich gesperrtes Schema für einen bestimmten Workspace freigegeben.
  • REMOVE_EXCEPTION: Dadurch wird eine solche Freigabe für einen bestimmten Workspace wieder aufgehoben.
  • REMOVE_SCHEMA_EXCEPTIONS: Dadurch werden alle über CREATE_EXCEPTION gemachte Freigaben für ein bestimmtes Schema zurückgenommen.
  • REMOVE_WORKSPACE_EXCEPTIONS: Dadurch werden alle über CREATE_EXCEPTION gemachte Freigaben für einen bestimmten Workspace zurückgenommen.
  • REPORT: Dadurch wird ein SELECT erzeugt, über den angezeigt werden kann, welche Sperren und Ausnahmen es gibt. 

Alle Freigaben und Sperren müssen mit COMMIT abgeschlossen werden, um in Kraft zu treten. Wird ein Schema gesperrt, so sind bereits getroffene Workspace-Zuordnungen davon nicht betroffen. Generell freigegebene Schemata verschwinden aus WWW_FLOW_RESTRICTED_SCHEMAS, begrenzt freigegebene jedoch nicht. Mit CREATE_EXCEPTION erzeugte Ausnahmen sind in WWV_FLOW_RSCHEMA_EXCEPTIONS zu finden:

SELECT schema_id, workspace_name FROM FLOWS_020000.WWV_FLOW_RSCHEMA_EXCEPTIONS;

Die Prozedur REPORT erzeugt nur einen SELECT-Befehl, der die beiden Tabellen verknüpft und gibt diesen SELECT-Befehl über DBMS_OUTPUT aus, nicht jedoch dessen Ergebnis. Der ausgegebene Select lautet (unabhängig vom angemeldeten User):

SELECT a.schema "SCHEMA", b.workspace_name "WORKSPACE"
FROM WWV_FLOW_RESTRICTED_SCHEMAS a, WWV_FLOW_RSCHEMA_EXCEPTIONS b
WHERE b.schema_id(+) = a.id;

Beispiele: 

BEGIN
   FLOWS_020000.HTMLDB_SITE_ADMIN_PRIVS.UNRESTRICT_SCHEMA(p_schema => 'SCOTT');  
   COMMIT;
END;
/

BEGIN
   FLOWS_020000.HTMLDB_SITE_ADMIN_PRIVS.RESTRICT_SCHEMA(p_schema => 'HAS');
   COMMIT;
END;
/

BEGIN
   FLOWS_020000.HTMLDB_SITE_ADMIN_PRIVS.CREATE_EXCEPTION
     (p_schema => 'HAS',
      p_workspace => 'SCHULUNG');
   COMMIT;
END;
/

BEGIN
   FLOWS_020000.HTMLDB_SITE_ADMIN_PRIVS.REMOVE_EXCEPTION
       (p_schema => 'HAS',
        p_workspace =>'SCHULUNG');
    -- oder:
   FLOWS_020000.HTMLDB_SITE_ADMIN_PRIVS.REMOVE_WORKSPACE_EXCEPTIONS
     (p_workspace => 'SCHULUNG');
    -- oder:  
   FLOWS_020000.HTMLDB_SITE_ADMIN_PRIVS.REMOVE_SCHEMA_EXCEPTIONS
     (p_schema => 'HAS');
   COMMIT;
END;
/

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.