动态DDL执行与SchemaObjects显示授权问题

动态DDL执行与SchemaObjects显示授权问题,第1张

动态DDL执行与SchemaObjects显示授权问题,第2张

这是一个常见的问题,也很容易被忽略,尤其是在过程中动态执行DDL语句时。我们必须使用显示授权的方法来保证DDL的执行权限,而不能使用角色转移的方法。这里有一个简单的测试过程来验证这一点。

参考描述:

如果被引用的项确实是声明的,并且您认为您有权限引用该项,请检查权限;如果仅通过角色授予权限,则这是预期的行为,并记录在案。存储对象(包、过程、函数、触发器、视图)在对象所有者的安全域中运行,除PUBLIC之外不启用任何角色。同样,您将仅被告知该物品未申报

测试步骤:

SQL >创建由pass标识的用户chris

用户已创建。

SQL >授予Chris DBA;

格兰特成功了。

SQL >连接Chris/pass;

已连接。

SQL >创建表test1(name varchar 2(10));

表已创建。

-这里成功了。

SQL >删除表test1

桌子掉了。

SQL >创建或替换过程chris_cr_tbl

2是

3开始

4立即执行' create table test1(name varchar 2(10))';

5结束;

6 /
过程已创建。

SQL > exec chris _ cr _ tbl

BEGIN chris _ cr _ tbl结束;

*

第1行出错:

ORA-01031:权限不足

ORA-06512:在“克里斯。克里斯_铬_TBL”,第4行

ORA-06512:在第1行

-这里失败了

SQL >连接测试/oracle

已连接。

SQL >授予chris创建表的权限;

格兰特成功了。

-明确授予

SQL >连接克里斯/通过

已连接。

SQL > exec chris _ cr _ tbl

PL/SQL过程已成功完成。

SQL > select table _ name from all _ tables where owner = ' CHRIS ';

表名

-

测试1

SQL >删除表test1

桌子掉了。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 动态DDL执行与SchemaObjects显示授权问题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情