我刚刚安装了oracle 12c,然后我尝试授予用户各种权限。
我以系统身份登录,并且我已授予create user
权限。但是,在授予alter table
权利时,它给了我错误
ORA-00990: missing or invalid privilege
关于这个问题的研究让我在SO上找到了另一个post。这篇文章的评论表明,这是因为我没有以GLOBAL
用户身份登录。但是我不知道如何以GLOBAL
用户身份登录。
我必须创建一个吗?
有没有替代解决方案?
答案 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.