Tipps & Tricks: November 2013 Bereich: SQL Erstellung: 11/2013 SG Versionsinfo: 9i, 10g, 11g, 12c Letzte Überarbeitung: 11/2013 SG Nützliche Parameter von SYS_CONTEXT Als DBA steht man oft vor dem Problem der Rechtevergabe an die Benutzer. Zu viele Rechte stellen ein Sicherheitsrisiko dar, zu wenige verhindern möglicherweise das Abfragen wichtiger Daten. Damit normale Benutzer Informationen über die genutzte Instanz abfragen können, ohne dass ihnen Rechte an den nötigen v$-Views zugewiesen werden müssen, gibt es eine Funktion namens SYS_CONTEXT. In diesem Tipp werden von rund 60 Parametern nur die nützlichsten kurz erläutert und die seit Version 12c neu hinzugefügten Parameter aufgezeigt. Diese Parameter sind sehr hilfreich z. B. bei der Erstellung von Automatismen über Skripte. Mit der Funktion SYS_CONTEXT ist es möglich, Werte verschiedener Parameter der aktuellen Instanz abzufragen. Die Parameter sind verbunden mit einem bestimmten Namensraum. Oracle hat standardmäßig zwei Namensräume integriert, nämlich USERENV, der die aktuelle Session beschreibt, und SYS_SESSION_ROLES (verfügbar ab 11.2.0.4), der anzeigt, ob eine bestimmte Rolle für die aktuelle Session aktiv ist. Ein Beispiel für eine Abfrage mit USERENV, ausgegeben wird der Name der Datenbank: SQL> select sys_context ('USERENV', 'DB_NAME') from dual; SYS_CONTEXT('USERENV','DB_NAME') --------------------------------------------------------o11g Die folgende Abfrage zeigt mithilfe von SYS_SESSION_ROLES, ob der angemeldete Benutzer die DBA-Rolle innehat: SQL> show user USER ist "SCOTT" SQL> select sys_context('SYS_SESSION_ROLES', 'DBA') from dual; SYS_CONTEXT('SYS_SESSION_ROLES','DBA') -------------------------------------------------------------FALSE SQL> conn sys/<pwd> as sysdba; SQL> grant dba to scott; SQL> conn scott/tiger SQL> select sys_context('SYS_SESSION_ROLES', 'DBA') from dual; SYS_CONTEXT('SYS_SESSION_ROLES','DBA') -------------------------------------------------------------TRUE Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 1 von 3 Nachfolgend eine Liste von Parametern für den Namensraum USERENV, die für Skripte wohl am gebräuchlichsten sind: CURRENT_USERID: Die ID des Benutzers, dessen Rechte momentan aktiv sind. DATABASE_ROLE: Die Rolle der Datenbank ist entweder PRIMARY, PHYSICAL STANDBY, LOGICAL STANDBY oder SNAPSHOT STANDBY. DB_UNIQUE_NAME: Name der Datenbank, wie er im Initialisierungsparameter angegeben ist. HOST: Gibt den Computernamen (mit Domäne) aus. INSTANCE: Gibt die ID der Instanz aus, zu der die Session verbunden ist. INSTANCE_NAME: Name der Instanz, zu der die Session verbunden ist. NLS-Parameter NLS_CALENDAR: Aktueller Kalender der momentanen Session NLS_CURRENCY: Die Währung der aktuellen Session NLS_DATE_FORMAT: Das Datumsformat der aktuellen Session NLS_DATE_LANGUAGE: Die Sprache, mit der Datumsangaben ausgegeben werden NLS_SORT: Sortierungsart, binär oder nach aktueller Sprache NLS_TERRITORY: Land der aktuellen Session SERVER_HOST: Gibt den Hostnamen der Maschine aus, auf der die Instanz läuft. SERVICE_NAME: Name des Dienstes, zu der eine Session verbunden ist. TERMINAL: Gibt den Computernamen (ohne Domäne) aus. Seit Version 12.1 gibt es drei neue Parameter: CDB_NAME: Gibt den Namen der Container-Datenbank aus: SQL> SELECT sys_context('USERENV', 'CDB_NAME') FROM dual; SYS_CONTEXT('USERENV','CDB_NAME') --------------------------------------------------------o12c CON_ID: Gibt den Identifier des Containers aus: SQL> SELECT sys_context('USERENV', 'CON_ID') FROM dual; SYS_CONTEXT('USERENV','CON_ID') ------------------------------------------------------3 CON_NAME: Gibt den Namen des Containers aus: SQL> SELECT sys_context('USERENV', 'CON_NAME') FROM dual; SYS_CONTEXT('USERENV','CON_NAME') Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 2 von 3 --------------------------------------------------------PDB3 Die Funktion SYS_CONTEXT bietet den Vorteil, dass man immer die gleiche Syntax verwendet und lediglich die Parameter austauschen muss. Auch wenn es für manche Parameter Alternativen gibt, wie beispielsweise für den Parameter "SESSION_USER", der dieselbe Information wie die SQL-Abfrage "show USER" ausgibt, ist es leichter mit einer Syntax zu arbeiten, als sich viele Views zu merken, auf die man evtl. gar keine Rechte hat. Sollten Sie Interesse an weiteren neuen Funktionen der Version 12c haben, so besuchen Sie doch unseren Kurs Oracle Neuerungen 12c! Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 3 von 3