如何在Oracle中以特定用户身份执行查询

时间:2014-02-27 20:18:38

标签: oracle

有没有办法执行像

这样的查询
select count(*) from some_table;

作为特定用户登录为数据库“超级用户”,如sys或sysadmin?

如何实现这一目标?

更新

我们有这样的条款:

where column_user_name=user

因此,数据库需要认为user指定的当前用户是我们想要假装的用户。

4 个答案:

答案 0 :(得分:3)

您可以,但您需要使用未记录的包来执行此操作。 dbms_sys_sql package lets you run SQL as another user。{{3}}。这就是Application Express(APEX)在内部使用的东西。但它没有记录,所以你自己冒风险使用它。

通常,在正常的日常操作中,您不应该像SYS那样连接到数据库。如果您是DBA(使用自己的帐户,而不是SYS),您应该能够从任何用户的表中进行查询,因为您拥有SELECT ANY TABLE权限。所以你应该能够运行

SELECT *
  FROM some_user.some_table_name

答案 1 :(得分:3)

如果我正确理解你的问题,可以使用

alter session set current_schema = <username>;

然后运行你的陈述。

更新您的新要求(where x = USER)无法使用此方法(正如您已经想到的那样)。但是,您可以将user更改为sys_context('userenv', 'current_schema'),这将返回已更改架构的名称。

答案 2 :(得分:0)

您可以使用代理用户身份验证:

SQL> CONNECT/@mytnsname AS SYSDBA
Connected.
SQL> CREATE USER user_impersonating IDENTIFIED BY password1;

User created.

SQL> CREATE USER user_being_impersonated IDENTIFIED BY password2;

User created.

SQL> GRANT CONNECT TO user_impersonating;

Grant succeeded.

SQL> GRANT CONNECT TO user_being_impersonated;

Grant succeeded.

SQL> ALTER USER user_being_impersonated GRANT CONNECT THROUGH user_impersonating;

User altered.

SQL> DISCONNECT;
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
SQL> CONNECT user_impersonating[user_being_impersonated]/password1@mytnsname
Connected.
SQL> SELECT user FROM DUAL;

USER
------------------------------
USER_BEING_IMPERSONATED

SQL> SHOW USER
USER is "USER_BEING_IMPERSONATED"
SQL>

答案 3 :(得分:-1)

你可以使用代理: alter user order_request grant connect through system; 连接系统 [order_request] / cidw_pre