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 的权限不足错误的主要内容,如果未能解决你的问题,请参考以下文章