2014-03-25 282 views
2

我剛剛安裝了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

回答

7

沒有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

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/[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.