有没有办法执行类似的查询
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是我们想要假装的用户。
如果我正确理解你的问题,应该可以
alter session set current_schema = <username>;
Run Code Online (Sandbox Code Playgroud)
然后运行你的语句。
更新您的新要求 ( where x = USER) 不适用于此方法(正如您已经发现的那样)。但是,您可以更改user为sys_context('userenv', 'current_schema')将返回更改后的架构的名称。
您可以,但您需要使用未记录的包来执行此操作。该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)
| 归档时间: |
|
| 查看次数: |
23942 次 |
| 最近记录: |