Als PDF Downloaden!

Werbung
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
Herunterladen