在 Oracle 数据库中,以下各项有什么区别:
- 用户()
- 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') 的快捷方式,但我找不到有关此事的文档。