Oracle alter table权限不足

问题描述:

我刚刚安装了oracle 12c,然后我试图授予用户各种权利。Oracle alter table权限不足

我以系统身份登录,并且我已为create user授予了工作权。然而,尽管alter table授予权限它给了我错误

ORA-00990: missing or invalid privilege

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

我必须创建一个吗?

有没有其他解决方案?

+0

你登录了什么账号,你试图执行什么命令? –

+0

您链接的帖子并不真正相关;在这种情况下,'GLOBAL'是他们尝试创建对象的特定模式,错误来自'create table'命令,而不是'grant'。 –

+0

我登录到系统帐户,我试图执行'授予更改表到foo;' – pdevel

没有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 ...,或创建触发它(例如),但不是任何其他表。

+0

正确。有用!我反而试图执行'grant alter table to username'.i没有指定哪个表可以改变。我也不知道你自动在你创建的桌面上获得'ALTER'权限。 – pdevel

试图菲格尔出什么问题,我猜你喜欢

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/[email protected]*** 
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.