咨询Oracle中创建唯一约束与主键约束所需的权限
解决创建带主键/唯一键的表时出现的ORA-01031权限不足问题
嘿,我来帮你搞定这个权限坑!你遇到的ORA-01031: insufficient privileges错误,根源藏在Oracle的约束创建逻辑里:当你给表添加主键或唯一约束时,Oracle会自动在当前用户的schema下生成对应的唯一索引,而你给tuser1的权限里刚好缺少了创建自身schema索引的必要权限。
权限分析
你之前给tuser1授权了CREATE ANY INDEX,但这个权限是允许用户在其他用户的schema下创建索引;而用户在自己的schema里建表时,由约束自动触发的索引创建操作,需要的是CREATE INDEX权限——这是针对自身schema的索引创建权限,和CREATE ANY INDEX是两个不同的权限。
解决方案
以SYS用户重新连接数据库,执行以下授权语句,补上缺失的CREATE INDEX权限:
GRANT CREATE SESSION, CREATE TABLE, CREATE INDEX, CREATE ANY INDEX, CREATE INDEXTYPE, UNLIMITED TABLESPACE TO tuser1;
验证操作
授权完成后,切换回tuser1,重新执行你的建表语句:
CREATE TABLE tab1 ( atomic INT UNIQUE, symbol VARCHAR2(2) UNIQUE, name CHAR(15) ); CREATE TABLE tab2 (empno NUMBER, name VARCHAR2(30), sal NUMBER, CONSTRAINT pk_tab2 PRIMARY KEY (empno));
这时候应该就能顺利执行,不会再弹出权限不足的错误了。
内容的提问来源于stack exchange,提问作者bprasanna




