Oracle
 sql >> Database >  >> RDS >> Oracle

Qual è la differenza tra USER() e SYS_CONTEXT('USERENV','CURRENT_USER')?

Dal manuale su:http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions184.htm#SQLRF51825

UTENTE_CURRENT

Il nome dell'utente del database i cui privilegi sono attualmente attivi. Questo può cambiare durante la durata di una sessione per riflettere il proprietario dell'oggetto dei diritti di qualsiasi definitore attivo. Quando nessun oggetto dei diritti del definitore è attivo, CURRENT_USER restituisce lo stesso valore di SESSION_USER. Se utilizzato direttamente nel corpo di una definizione di vista, restituisce l'utente che sta eseguendo il cursore che sta utilizzando la vista; non rispetta le viste utilizzate nel cursore come diritti di definizione.

SESSION_USER

Il nome dell'utente del database all'accesso. Per gli utenti aziendali, restituisce lo schema. Per altri utenti, restituisce il nome utente del database. Questo valore rimane lo stesso per tutta la durata della sessione.

Quindi c'è una differenza tra SESSION_USER e CURRENT_USER soprattutto quando CURRENT_USER viene utilizzato in una procedura o funzione memorizzata.

Devo ammettere che non so cosa significhi il termine "utente aziendale".

A proposito:ce n'è un terzo:

SESSION_USERID

L'identificatore dell'utente del database all'accesso.