DBMS_REDEFINITION.start_redef_table 的权限不足错误

Posted

技术标签:

【中文标题】DBMS_REDEFINITION.start_redef_table 的权限不足错误【英文标题】:Insufficient privilege error with DBMS_REDEFINITION.start_redef_table 【发布时间】:2014-05-22 11:27:28 【问题描述】:

我正在尝试对现有表进行分区,而不使用 Oracle 删除和重新创建它。

我的 Oracle 10g 支持应用程序中的 DBMS_REDEFINITION 包

我已按照 oracle 文档中的说明向用户授予了所有必要的权限。

grant CREATE ANY TABLE to DDUSER;
grant ALTER ANY TABLE to DDUSER;
grant DROP ANY TABLE to DDUSER;
grant LOCK ANY TABLE to DDUSER;
grant SELECT ANY TABLE to DDUSER;
grant execute on dbms_redefinition to DDUSER;

我可以执行以下程序

begin
Dbms_Redefinition.Can_Redef_Table('DDUSER', 'TABLE');
end;
This throws no error neither any result (Assuming this is as expected)

但是当我试图跑步时

BEGIN
  DBMS_REDEFINITION.start_redef_table(
    uname      => 'DDUSER',        
    orig_table => 'TABLE',
    int_table  => 'TABLE_1');
END;

我遇到以下错误:

错误报告: ORA-01031: 权限不足 ORA-06512:在“SYS.DBMS_REDEFINITION”,第 50 行 ORA-06512:在“SYS.DBMS_REDEFINITION”,第 1343 行 ORA-06512:在第 2 行 01031. 00000 - “权限不足”

你能帮我吗,我在这里缺少什么特权? 或者是否知道包 DBMS_REDEFINITION 的第 50 行中执行了哪个操作?

【问题讨论】:

您在运行DBMS_REDEFINITION.start_redef_table 之前是否已经创建了TABLE_1 是的,已经创建好了。 你在这方面有什么运气吗? (即我面临同样的......) 我刚刚发现 DBMS_REDEFINITION 包中的过程的权限要求在 oracle db 版本之间有所不同。在 11.2.0.1 版本中,它需要大量 create any 全局授权,而在 11.2.0.4 版本中,只需要 create 模式本地授权。 我也遇到了同样的错误。你们中的任何人都可以帮我解决同样的问题吗? 【参考方案1】:

试试这个:

grant DROP ANY INDEX to DDUSER;
grant CREATE ANY INDEX to DDUSER;

如果表格包含索引(很可能就是这种情况),您必须创建新索引。

【讨论】:

感谢您的回复。但是这也没有运气,得到同样的错误。 我假设您必须询问 Oracle 支持。他们应该知道在包 DBMS_REDEFINITION 的第 50 行执行了哪个操作。 似乎很公平。在这种情况下,您能否指导我如何获得 Oracle 支持。有专门的团队吗? 转到 Oracle 支持页面并打开“SR”。按照表格。【参考方案2】:

我刚刚遇到了这个问题。我在 start_redef_table 上遇到了完全相同的错误。

所以在搜索了很多之后,我给了用户以下权限并且它起作用了。

grant execute on dbms_redefinition package to myuser(你已经有)

然后

grant CREATE ANY TABLE to myuser;

grant  ALTER ANY TABLE to myuser;

grant  DROP ANY TABLE to myuser;

grant LOCK ANY TABLE to myuser;

grant SELECT ANY TABLE to myuser;

赋予这些权限后 start_redef_table 工作正常。

【讨论】:

将上述所有系统权限授予非 dba 用户是否安全?【参考方案3】:

在 Oracle 12c 上,有额外的系统权限“REDEFINE ANY TABLE”。

这对我有用。

grant REDEFINE ANY TABLE  to myUser;
grant ADMINISTER DATABASE TRIGGER to myUser;
grant ALTER ANY INDEX to myUser; 
grant ALTER ANY MATERIALIZED VIEW to myUser;
grant ALTER ANY SEQUENCE to myUser;
grant ALTER ANY TRIGGER to myUser;
grant CREATE ANY INDEX to myUser;
grant CREATE ANY MATERIALIZED VIEW to myUser;
grant CREATE ANY SEQUENCE to myUser;
grant CREATE ANY TABLE to myUser;
grant CREATE ANY TRIGGER to myUser;
grant CREATE ANY VIEW to myUser;
grant CREATE MATERIALIZED VIEW to myUser;
grant CREATE SESSION to myUser;
grant CREATE VIEW to myUser;
grant DROP ANY INDEX to myUser;
grant DROP ANY MATERIALIZED VIEW to myUser;
grant DROP ANY SEQUENCE to myUser;
grant DROP ANY TRIGGER to myUser;
grant DROP ANY VIEW to myUser;
grant EXECUTE ANY PROCEDURE to myUser;
grant INSERT ANY TABLE to myUser;
grant MERGE ANY VIEW to myUser;
grant SELECT ANY DICTIONARY to myUser;
grant SELECT ANY TABLE to myUser;
grant UNDER ANY VIEW to myUser;
grant UPDATE ANY TABLE to myUser;

祝你好运

【讨论】:

【参考方案4】:

你缺少 CREATE Materialized View 添加后我成功重新定义为普通用户

对于 Oracle 12.1 指令说 https://docs.oracle.com/database/121/ARPLS/d_redefi.htm#ARPLS67511

我认为在其他版本中可能是一样的

grant CREATE MATERIALIZED VIEW 
grant CREATE TABLE 
grant EXECUTE on dbms_redefinition 

【讨论】:

以上是关于DBMS_REDEFINITION.start_redef_table 的权限不足错误的主要内容,如果未能解决你的问题,请参考以下文章