В чем разница между USER() и SYS_CONTEXT('USERENV','CURRENT_USER')?

В базе данных Oracle, каковы различия между следующими:

  • user()
  • sys_context('USERENV' , 'CURRENT_USER')
  • sys_context('USERENV', 'SESSION_USER')

Являются ли эти значения также возможными связанными значениями с тем, кем является «текущий пользователь»?

  • sys_context('USERENV', 'CURRENT_SCHEMA')
  • sys_context('USERENV', 'AUTHENTICATED_IDENTITY')

Меня особенно интересуют, какие из них могут изменяться, что может их изменять, какие не могут изменять значение , какие из них имеют разные значения в зависимости от типа подключения, и какие из них всегда являются схемой, используемой для входа в базу данных.

В большинстве моих тестов значения всегда одинаковы. Единственным исключением может быть выполнение следующего для изменения 'CURRENT_SCHEMA':

alter session set current_schema=<SCHEMA>

Выполнение следующих действий приводит к ошибке:

alter session set current_user=<USER> --even as sys/system, which is good I suppose

Таким образом, для всего этого существует своего рода безопасность/правила. Однако должна быть какая-то причина наличия SESSION_USER и CURRENT_USER. Я также предполагаю, что user() может быть ярлыком для sys_context('USERENV', 'CURRENT_USER'), но я не смог найти документации по этому вопросу.

14
задан Andrew Martinez 18 June 2012 в 15:50
поделиться