Perché "As SYSDBA" non funziona da SQL Developer?
-
29-09-2020 - |
Domanda
Sono uno sviluppatore/consulente DBA di SQL Server che sta aiutando un cliente che ha recentemente perso il suo DBA Oracle.Ho svolto sviluppo su Oracle, ma non molto lavoro DBA e non in ambienti multi-home come questo.
Il problema: Posso connettermi utilizzando "SYS As SYSDBA" da SQL Plus, ma non da SQL Developer sullo stesso sistema.tuttavia, io Potere connettersi utilizzando "sistema" con SQL Plus O Sviluppatore SQL.
Dettagli:
Su questo server, nel mio account Windows Admin (inserito anche come amministratore del server in Oracle Admin Asst.), funziona questo comando DOS:
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>sqlplus /@MyDb as sysdba
e, Seleziona * da V$INSTANCE mostra che è in MyDb e che sia lo strumento che il db sono 11.2.0.3
Anche questo:
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>sqlplus sys/<pwd>@MyDb as sysdba
(ANCHE:entrando nel sbagliato funziona anche la password(!))
Utilizzando l'opzione del menu di avvio SQL-Plus dallo stesso (server, account e home), funzionano anche questi:
Enter user-name: /@MyDb as sysdba
Enter user-name: sys/<pwd>@MyDb as sysdba
Seleziona * da V$INSTANCE mostra che è in MyDb e che sia tool che db sono 11.2.0.3
Tentativo di accedere a MyDb dallo stesso con SQL Developer, riesce per il nome utente "system", ma fallisce per "sys" "as sysdba" con "ORA-01031: privilegi insufficienti".Tuttavia, questo fa funzionare quando ci si connette ad altri database su altri server.
Ho effettuato ricerche in merito e la maggior parte dell'aiuto pubblicato per questo sembra essere rivolto a casi in cui non è possibile stabilire alcuna connessione, il che non è il caso in questo caso.Giusto per evitare alcuni di questi:
- Il problema non è che la rete non sia configurata, perché SQL Developer funziona per "sistema" sia localmente che in remoto.
- Il problema non è che il DB/istanza non sia avviato, perché, ancora una volta, funziona per "sistema"
- Non è che mi sto connettendo al database sbagliato, ho controllato che fosse "sistema"
- Per quanto ne so, non è che sto usando la sintassi sbagliata in SQL Developer per connettermi a un DB "Come SYSDBA" perché funziona quando mi connetto ad altri server su altri DB.
Anche la mia sensazione è quella
- c'è qualche impostazione che dice "non consentire SYSDBA tramite una connessione di rete", O
- c'è qualche problema di configurazione/autorizzazione nel Listener della rete Oracle che gli impedisce di controllare il mio account amministratore di Windows e, inoltre, la password sys non è quella che mi era stata detta, e infine Oracle sta fornendo un messaggio di errore ottuso per questo.
Qualsiasi aiuto o guida su questo sarebbe molto apprezzato.
OK, quindi utilizzando le istruzioni di @BalasPapp, sono riuscito a trovare di più quanto segue:
- Questo database è servito da secondo Percorso della home Oracle 11g chiamata OraDb11g_home3
D:\Oracle\app\product\11.2.0\dbhome_1D:\Oracle\app\product\11.2.0\dbhome_1
. - Sono stati mostrati i servizi Windows NO parametri di avvio per esso (tranne il nome del DB, ovviamente).
- il comando
show parameter remote_login_passwordfile
mostra un valore di "ESCLUSIVO".
Contenuti di Listener.ora:
# listener.ora Network Configuration File: D:\Oracle\app\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\Oracle\app\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\Oracle\app\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <SERVERNAME>.<networkname>.local)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = D:\Oracle\app
Contenuto di sqlnet.ora:
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SQLNET.AUTHENTICATION_SERVICES = (NTS)
L'uscita di lsnrctl status
:
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>lsnrctl status
LSNRCTL for 64-bit Windows: Version 11.2.0.3.0 - Production on 23-DEC-2015 12:03:55
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<SERVERNAME>.<networkname>.local)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 64-bit Windows: Version 11.2.0.3.0 - Production
Start Date 02-DEC-2015 16:25:41
Uptime 20 days 19 hr. 38 min. 17 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File D:\Oracle\app\product\11.2.0\dbhome_1\network\admin\listener.ora
Listener Log File D:\Oracle\app\diag\tnslsnr\<SERVERNAME>\listener\alert\log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=<SERVERNAME>.<networkname>.local)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "<DBNAME>" has 1 instance(s).
Instance "<DBNAME>", status READY, has 1 handler(s) for this service...
The command completed successfully
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>
Parametri durante la connessione da SQL Developer:
Username: system (or sys)
Password: <...>
Connection
Type: Basic
Role: Default (or SYSDBA)
Hostname: localhost
Port: 1521
SID (or Service name, both work/fail the same):
<dbname>
(Neither OS Authentication nor Kerberos is set)
Funziona per "system, Default", fallisce per "sys, SYSDBA" con "Privilegi insufficienti".Ho provato anche molte combinazioni di autenticazione del sistema operativo e impostazioni di Keberos, senza alcun risultato.
Infine, questi sono gli unici due .ora
file in /database
rubrica:
SNCF<DBNAME>.ORA (18MB)
SPFILE<DBNAME>.ORA (4kb)
Entrambi sembrano essere file binari nel Blocco note.
ANCHE: select * from v$pwfile_users
non restituisce righe.
Soluzione
Per connetterti utilizzando 'as sysdba' da un client su sql*net devi avere il file
- parametro remote_login_passwordfile da avere 'esclusivo'
- file della password (orapw${ORACLE_SID}) presente per l'istanza a cui provi a connetterti
- chiedere all'utente di concedere sysdba nel database (sys ha questo valore predefinito e utilizza la password del file passwd.
Il percorso predefinito per il file della password è $ORACLE_HOME/dbs ma a partire da Oracle v12 può anche essere archiviato in ASM.In tal caso lo trovi utilizzando srvctl