【问题标题】:Alter session set current_schema privilege更改会话集 current_schema 权限
【发布时间】:2016-05-04 10:18:50
【问题描述】:

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

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

所以我必须有替代品。

1 - 使用前缀更改我的表名

select * from other_schema.table

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

alter session set current_schema=other_schema

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

Oracle 文档说

除非另有说明,否则您不需要任何特权来执行此语句的其他操作。

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

请注意,我的应用用户将拥有 other_schema 的所有权限。

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

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

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

【问题讨论】:

    标签: oracle session privileges alter


    【解决方案1】:

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

    • create session
    • alter session

    当您的用户仅直接授予 create session 权限时,您可以不使用 any alter session ... 语句。

    Se Oracle 文档: Addressing The CONNECT Role Change

    请注意,设置事件需要 ALTER SESSION 权限。 很少有数据库用户需要更改会话权限。

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

    其他alter session不需要alter session权限 命令。

    SQL> ALTER SESSION SET NLS_TERRITORY = FRANCE;
    

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

    【讨论】:

      【解决方案2】:

      CONNECT 角色在 10gR2 中已更改。它曾经拥有 RESOURCE 的大部分权限,但这些在 10gR2 中被撤销。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-02
        • 2021-02-01
        • 1970-01-01
        相关资源
        最近更新 更多