0

是否可以检查另一个 ORACLE 用户是否能够运行特定查询?此检查需要由 ADMIN 帐户执行。

原因是我们有使用 ADMIN 帐户运行的进程。非管理员可以向这些流程提交查询,因此我们希望能够在流程执行期间确认用户是否能够自己运行查询,如果不能,则结束执行。

另一部分是该进程由 Java 程序控制,所以如果在 Oracle 中没有办法做到这一点,也许 Java/JDBC 有解决方案?

Java:1.5 Oracle:10.2+ 所有涉及的表都是 ADMIN 模式的一部分,并且通过 SELECT/INSERT/UPDATE/DELETE table GRANTS 控制访问。

希望我已经足够清楚了

4

2 回答 2

3

您可以尝试未记录的 Oracle 包 DBMS_SYS_SQL,它有一个parse()将用户 ID 作为参数的方法。这是一个包含一些信息的链接:http: //www.pythian.com/blog/using-dbms_sys_sql-to-execute-statements-as-another-user/

于 2013-07-19T13:30:59.917 回答
0

在 SQL Server 中,解决方案称为execute as login. 鉴于此信息,我发现 Oracle 具有等价物(这里是 StackOverflow 参考):

ALTER SESSION SET CURRENT_SCHEMA = schema;

我的建议是在运行查询之前,将架构设置为实际用户。然后,让查询失败并将错误返回给调用程序。

此处的 Oracle 文档。

编辑:

Oracle 的文档明确给出了这个例子:

连接斯科特 ALTER SESSION SET CURRENT_SCHEMA = 乔;选择 * 从雇员;

因为 emp 不是模式限定的,所以表名在模式 joe 下解析。但是如果 scott 对表 joe.emp 没有选择权限,则 scott 无法执行 SELECT 语句。

这给我的印象是它在更改架构时正在更改特权。

于 2013-07-19T13:34:16.123 回答