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

问题描述 投票:2回答:3

有没有办法执行像这样的查询

select count(*) from some_table;

以sys或sysadmin等数据库“超级用户”身份登录时作为特定用户?

如何实现这一目标?

UPDATE

我们有这样的条款:

where column_user_name=user

所以DB需要认为user指定的当前用户是我们想要假装的用户。

oracle
3个回答
3
投票

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

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

SELECT *
  FROM some_user.some_table_name

2
投票

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

alter session set current_schema = <username>;

然后运行你的声明。

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.