更改会话设置 current_schema 权限

Alter session set current_schema privilege

基本上我有一个使用 oracle 作为数据源的 java 应用程序。现在我的应用程序与用户连接并使用连接用户的模式进行 table 创建等...

现在我有一个要求,我的应用程序也应该在另一个模式下工作。

所以我必须有其他选择。

1 - 将我的 table 名称更改为前缀

select * from other_schema.table

2 - 在 运行 任何查询之前更改会话

alter session set current_schema=other_schema

我很好奇 dba 是否有可能撤销更改会话权限。

Oracle 文档说

You do not need any privileges to perform the other operations of this statement unless otherwise indicated.

https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_2012.htm

请注意,我的应用用户将拥有 other_schema.

的所有权限

我的应用程序将 运行 许多环境。

所以使用第一种方法,它看起来更安全,但可能需要很长时间。

第二个速度更快,但似乎很棘手。

是的,他们有。有一个角色叫CONNECT。这个角色通常(取决于版本)给你两个系统权限:

  • create session
  • alter session

当您的用户只有 create session 直接授予的权限时,您可以 not 使用 any alter session ... 语句.

Se Oracle 文档: Addressing The CONNECT Role Change

Note that the ALTER SESSION privilege is required for setting events. Very few database users should require the alter session privilege.

SQL> ALTER SESSION SET EVENTS ........

The alter session privilege is not required for other alter session commands.

SQL> ALTER SESSION SET NLS_TERRITORY = FRANCE;

所以这真的取决于 Oracle 版本。

CONNECT 角色在 10gR2 中发生了变化。它曾经拥有RESOURCE的大部分权限,但是这些在10gR2中被撤销了。

我刚刚对一个只有 CREATE SESSION 的用户尝试了 ALTER SESSION,令我惊讶的是它起作用了,至少在 11.2.0.4 中是这样。