Connessione a Oracle senza nome utente o password
-
03-07-2019 - |
Domanda
Oracle ha questo concetto di consentire agli utenti del database di essere identificati dall'utente del sistema operativo che sta eseguendo il programma che si sta connettendo a Oracle. Vedi qui .
Questo ti permette di fare, come ad esempio quell'utente su una macchina unix, un comando come:
sqlplus /
Sto tentando di scrivere un programma Java per Oracle 10.2 che si connette senza un nome utente o una password. La scelta ovvia di url:
jdbc:oracle:thin:/@localhost:1521:MYDBSID
non funziona, dando un errore (mi dispiace non ho l'errore disponibile al momento).
Ho provato anche molte altre forme di farlo, ma senza fortuna.
Qualcuno ha qualche suggerimento su come posso connettere un programma Java a Oracle usando il metodo di identificazione del sistema operativo?
Soluzione
Il driver JDBC Thin è un'implementazione Java pura al 100% che non è in grado di raccogliere le informazioni necessarie dal sistema operativo.
Il driver OCI JDBC può farlo! Usa jdbc: oracle: oci8: / @ MYDBSID
, richiederà l'installazione del driver Oracle su quella macchina, non è un problema se si tratta di un server (è più veloce da avviare e supporta molte altre funzionalità rispetto al driver sottile)
Altri suggerimenti
Il driver jdbc fornito da Oracle non ha la capacità di raccogliere il nome utente e la password del sistema operativo dall'URL fornito. Supponiamo che ci siano provider di driver JDBC di terze parti per ORACLE, uno di questi potrebbe fornire la funzionalità richiesta. dovresti cercare su Google
Grazie a quelli che hanno risposto. Siamo andati con il driver OCI.
Ho trovato documentazione per suggerire che Oracle 11g supporta supporta l'autenticazione dell'utente del sistema operativo tramite il thin driver:
Non ho una configurazione 11g per testarlo, quindi non posso essere sicuro che funzioni.
Se si accede a Oracle da un appserver J2EE, è possibile ottenere un risultato simile utilizzando JNDI per acquisire un'origine dati.
Il thin driver 11g può connettersi utilizzando l'autenticazione Kerberos.
prova a seguire jdbc: oracle: thin: username / password @ localhost: 1521: MYDBSID
devi specificare le informazioni sull'account
sqlplus / as sysdba su una macchina unix che passa attraverso l'autenticazione del sistema operativo
Il supporto dell'autenticazione del sistema operativo nel thin driver JDBC è stato aggiunto in 11g (è possibile scaricare il thin driver JDBC da 11.2.0.4 su OTN).
Nota che devi consentire l'autenticazione del SO remoto sul server (su TCP) altrimenti funzionerà solo con sqlplus usando IPC o BEQ localmente. Nel tuo file init.ora, aggiungi questo:
REMOTE_OS_AUTHENT = TRUE
Quindi se l'utente è " osuserdemo " sul computer client, creare un utente del database come questo e riavviare il DB:
CREATE USER OSUSERDEMO IDENTIFIED EXTERNALLY;
GRANT CONNECT,CREATE SESSION,RESOURCE TO OSUSERDEMO;
E il thin driver JDBC dovrebbe essere in grado di connettersi senza nome utente o password.
Vale la pena notare che questa funzione, considerata altamente non protetta, è stata disattivata in 12c.
jdbc: oracle: oci: @
funziona con ojdbc6.jar e Oracle 11g2