Ich habe den Host, den Port, die Benutzerkennung und das Passwort, aber es fehlt die SID für die Verbindung zum Oracle DBMS. Wie kann ich die Liste der SIDs auf diesem Server finden?
Antworten
Zu viele Anzeigen?Ein besserer Weg ist, wenn Sie Zugriff auf den Hostrechner und die Oracle-Installation haben, den Befehl zu verwenden: lsnrctl status
. Dies funktioniert sowohl auf Unix-, Linux- als auch auf Windows-Rechnern. Der Befehl status zeigt Ihnen alle Hörer (und ihre zugehörigen SIDs) an.
C:\>lsnrctl status
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 15-JUN-2009 16:16:34
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
Start Date 13-JUN-2009 12:04:14
Uptime 2 days 4 hr. 12 min. 19 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Default Service XE
Listener Parameter File C:\oracle\XE\app\oracle\product\10.2.0\server\network\admin\listener.ora
Listener Log File C:\oracle\XE\app\oracle\product\10.2.0\server\network\log\listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC_FOR_XEipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ThinkpadT61)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=8080))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "XEXDB" has 1 instance(s).
Instance "xe", status READY, has 1 handler(s) for this service...
Service "XE_XPT" has 1 instance(s).
Instance "xe", status READY, has 1 handler(s) for this service...
Service "xe" has 1 instance(s).
Instance "xe", status READY, has 1 handler(s) for this service...
The command completed successfully
Im obigen Beispiel können Sie eine Verbindung zur XE-Datenbank mit den Conect Strings XEXDB, XE_XPT oder XE herstellen.
Die kurze Antwort lautet, dass Sie Zugriff auf das Host-Betriebssystem benötigen:
Für Unix, ps -ef | grep pmon
zeigt Ihnen einen oder mehrere Prozesse mit Namen wie ora_pmon_xxxx
y xxxx
ist der Name der Instanz.
Unter Windows gibt es vermutlich eine ähnliche Signatur in der Aufgabenliste.
In der Praxis werden Ihnen diese Informationen in der Regel von demjenigen mitgeteilt, der die Datenbank verwaltet, wenn Ihr Verbindungskonto erstellt wird.
Die Frage lautet: Welche ORACLE_SIDs oder Dienste werden von dem Listener unterstützt, der auf Host X, Port Y, läuft. Je nachdem, wie sicher dieser Listener konfiguriert ist, können Sie dies mit dem Befehl lsnrctl von einem Client aus sehen, der lsnrctl installiert hat. Um dies tun zu können, benötigen Sie eine Oracle-Server-Installation auf diesem Client. Wenn Sie diese haben, können Sie den Befehl
lsnrctl
set current_listener (description=(address=(host=X)(port=Y)(protocol=tcp)))
status
Die Standardeinstellung der 10g-Listener-Füllung führt zu folgendem Ergebnis: TNS-01189: Der Listener konnte den Benutzer nicht authentifizieren
Der Grund dafür ist, dass ab 10g Oracle standardmäßig Folgendes hat Sicherheit EIN: Lokale OS-Authentifizierung was bedeutet, dass nur der lokale Betriebssystembenutzer, der den Listener gestartet hat, lsnrctl-Befehle an den Listener senden kann. Der Listener wird sich weigern, anderen Benutzern zu antworten.
Es gibt ein nmap-Skript, das vielleicht helfen kann: oracle-sid-brute:
http://nmap.org/nsedoc/scripts/oracle-sid-brute.html
Es wurde mit nmap auf meinem System installiert.
nmap --script oracle-sid-brute -p 1521-1560 [host]
Dies wäre nur dann hilfreich, wenn die SID in einer Liste abgeglichen werden kann. Die Standardliste befindet sich hier: