暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 获取ORA-01031: 执行过程时权限不足

askTom 2016-07-13
149

问题描述

你好:

当在过程中使用在线选项重建索引时,我遇到了 “ORA-01031: 权限不足” 错误。

我知道该角色不能在过程中使用,因此向系统授予一些特权 (其DBA'

用户: 系统
特权:
-系统的2个角色
使用ADMIN选项向系统授予AQ_ADMINISTRATOR_ROLE;
将DBA授予具有ADMIN选项的系统;
更改用户系统默认角色全部;

授予系统更改任何索引;
授予对系统进行任何分析;
授权创建任何表到系统;
授予系统创建物化视图;
向系统授予创建会话;
向系统授予创建表;
授予将任何表放到系统;
授予对系统执行任何程序;
授权执行任何程序到系统;
向系统授予全局查询重写;
授予系统选择任何字典;
向系统授予选择任何表;
在任何表格下授予系统;
使用管理选项向系统授予无限的表空间;
-系统的41个对象特权
将 <所有者.tablename> 上的SELECT授予系统;


我的程序:
创建或替换过程系统。重建索引是
开始
立即执行 'alter index 重建在线';
结束GatherIndexStats;
/

我可以使用系统在sqlplus中重建索引。但是当我运行以下内容时:
SQL>开始
2系统。重建索引;
3提交;
4端;
5/
开始
*
第1行的错误:
ORA-01031: 权限不足
ORA-06512: 在 “系统。重建索引”,第32行
ORA-06512: 在2号线


SQL>

我搜索了很多,但仍然不知道授予系统哪种特权。

有人能帮忙吗?

提前谢谢。



专家解答

不要在系统中创建对象!

如果您希望管理员用户进行这样的维护操作,请创建自己的。然后授予它您需要的特权。

不管怎样,继续你的问题。要在PL/SQL中执行命令,您需要直接授予特权。不是通过角色。

因此,您的过程的所有者需要 “alter any index” 特权 (或拥有索引):

SQL> create user u identified by u;

User created.

SQL> grant connect to u;

Grant succeeded.

SQL> create table u.t (x int);

Table created.

SQL> create index u.i on u.t(x);

Index created.

SQL>
SQL> create or replace procedure p is
  2  begin
  3     execute immediate 'alter index u.i rebuild';
  4  end p;
  5  /

Procedure created.

SQL>
SQL> exec p;
BEGIN p; END;

*
ERROR at line 1:
ORA-01418: specified index does not exist
ORA-06512: at "CHRIS.P", line 3
ORA-06512: at line 1


SQL> alter index u.i rebuild;

Index altered.

SQL> conn sys/xxxx as sysdba
Connected.
SQL> grant alter any index to chris;

Grant succeeded.

SQL> conn chris/xxxx
Connected.
SQL> exec p;

PL/SQL procedure successfully completed.

SQL> drop user u cascade;

User dropped.


另外,值得一问。你为什么要建立一个程序来做到这一点?重建索引真的有必要吗?

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1860329900346402725
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::p11_question_id:2913600659112
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论