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

Jas*_*son 7 oracle

有没有办法执行类似的查询

select count(*) from some_table;
Run Code Online (Sandbox Code Playgroud)

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

如何才能做到这一点?

更新

我们有这样的 where 子句:

where column_user_name=user
Run Code Online (Sandbox Code Playgroud)

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

Ren*_*ger 8

如果我正确理解你的问题,应该可以

alter session set current_schema = <username>;
Run Code Online (Sandbox Code Playgroud)

然后运行你的语句。

更新您的新要求 ( where x = USER) 不适用于此方法(正如您已经发现的那样)。但是,您可以更改usersys_context('userenv', 'current_schema')将返回更改后的架构的名称。


Jus*_*ave 4

您可以,但您需要使用未记录的包来执行此操作。该dbms_sys_sql包允许您以另一个用户的身份运行 SQL。这是 Application Express (APEX) 在内部使用的东西。但它没有记录,因此您需要自行承担使用它的风险。

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

SELECT *
  FROM some_user.some_table_name
Run Code Online (Sandbox Code Playgroud)