AUTHID DEFINER 参数不起作用

Posted

技术标签:

【中文标题】AUTHID DEFINER 参数不起作用【英文标题】:AUTHID DEFINER param does not work 【发布时间】:2016-07-27 09:30:05 【问题描述】:

我使用 AUTHID DEFINER 参数在 USER A 模式上创建了一个过程。此过程会在不存在的情况下创建一些表,然后在所有表中执行插入操作。

此参数在插入操作中正常工作,但在创建表操作中不能正常工作。我从另一个名为 USER B 的用户调用该过程,因此参数理论上应该允许 USER B 作为 USER A 执行该过程并在 USER A 模式中创建表,然后插入所有数据。

任何人都知道为什么当我调用该过程时返回一个权限不足的错误?我尝试直接在 USER A 模式中执行“创建表”语句,它可以工作......

谢谢。

【问题讨论】:

特权是如何应用的?通过角色(例如角色 DBA)?必须像 GRANT CREATE TABLE TO USER_A; 一样明确授予它 我不确定你的意思是什么,但是当我执行“select * from session_privs;”时用户 B 只有 CREATE SESSION 和 SYNONYM 权限。另一方面 USER_A 也有 CREATE TABLE 权限和其他... GRANT EXECUTE ON procedure_XY TO USER_B;了吗? 是的,USER_B 也有执行授权。 以 USER_A 身份查询 user_sys_privs 进行双重检查。 【参考方案1】:

USER A 可能已授予 RESOURCE 角色,这使您能够手动创建表 - 这就是您能够“直接在 USER A 架构中执行“创建表”语句的原因。

但在执行 PL/SQL 代码时,应用不同的权限,因为角色在过程中被禁用,请参阅Oracle documentation。

因此,您需要将 CREATE TABLE 权限显式授予 USER A。

【讨论】:

以上是关于AUTHID DEFINER 参数不起作用的主要内容,如果未能解决你的问题,请参考以下文章

SqlDataReader 参数不起作用

为啥高度参数在标签小部件中不起作用?

为啥这个带参数的 sqlsrv 查询不起作用?

卷曲参数数组不起作用

激活参数在 GridSearch 中不起作用

Android recyclerView 项目布局参数不起作用