Oracle alter table权限不足

时间:2014-03-25 16:00:48

标签: sql oracle permissions privileges database-administration

我刚刚安装了oracle 12c,然后我尝试授予用户各种权限。

我以系统身份登录,并且我已授予create user权限。但是,在授予alter table权利时,它给了我错误

ORA-00990: missing or invalid privilege

关于这个问题的研究让我在SO上找到了另一个post。这篇文章的评论表明,这是因为我没有以GLOBAL用户身份登录。但是我不知道如何以GLOBAL用户身份登录。

我必须创建一个吗?

有没有替代解决方案?

2 个答案:

答案 0 :(得分:8)

没有ALTER TABLE权限。有效权限为listed in the documentation

如果您有CREATE TABLE,那么您可以创建和更改自己的表格。要更改另一个模式中表的定义,您需要ALTER ANY TABLE权限。

奇怪地this page确实引用了ALTER TABLE

  

例如,要在表上创建触发器,用户需要表的ALTER TABLE对象权限和CREATE TRIGGER系统权限。

ALTER TABLE command prerequisites也说:

  

该表必须位于您自己的架构中,或者您必须具有ALTER对象权限,或者您必须具有ALTER ANY TABLE系统权限。

在这种背景下,它更清晰; “ALTER对象权限”表示您已由其所有者直接授予ALTER表,而不是通过ALTER ANY TABLE系统权限,如:

create table t42(id number);
grant alter on t42 to user2;

然后user2可以alter table t42 ...,或者在其上创建触发器(例如),但不能创建任何其他表。

答案 1 :(得分:1)

尝试找出问题是什么,我猜你执行类似

的事情
SQL> conn system/***@***
Connected.
SQL> grant alter table to scott;
grant alter table to scott
      *
error in line 1:
ORA-00990: missing or invalid privilege

根据Oracle文档:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9013.htm#BABEFFEE

您可以授予ALTER ANY TABLE(这是一个强大的权利)或授予另一个模式中特定表的ALTER权限:

SQL> grant alter any table to scott;

Granted.

SQL> grant alter on hr.event to scott;

Granted.

架构所有者对其拥有的对象始终具有ALTER权限:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_3001.htm#CJAHHIBI

“先决条件

该表必须位于您自己的模式中,或者您必须对表具有ALTER对象特权,或者您必须具有ALTER ANY TABLE系统特权。“

SQL> conn scott/tiger@***
Connected.
SQL> select * from session_privs;

PRIVILEGE                                                                       
----------------------------------------                                        
CREATE SESSION                                                                  
UNLIMITED TABLESPACE                                                            
CREATE TABLE                                                                    
CREATE CLUSTER                                                                  
CREATE SEQUENCE                                                                 
CREATE PROCEDURE                                                                
CREATE TRIGGER                                                                  
CREATE TYPE                                                                     
CREATE OPERATOR                                                                 
CREATE INDEXTYPE                                                                

SQL> create table t(x int);

Table created.

SQL> alter table t add (y int);

Table altered.