表列授權

yangtingkun發表於2010-09-24

Oracle一直支援對錶的列進行授權,這使得訪問授權細化到列。

 

 

並不是所有的DML操作都支援授權到列,只有INSERTUPDATEREFERENCES許可權支援到列:

SQL> CREATE TABLE T (ID NUMBER, NAME VARCHAR2(30), AGE NUMBER);

表已建立。

SQL> ALTER TABLE T ADD CONSTRAINT PK_T PRIMARY KEY (ID);

表已更改。

SQL> GRANT SELECT (ID) ON T TO TEST;
GRANT SELECT (ID) ON T TO TEST
             *
1 行出現錯誤:
ORA-00969:
缺失 ON 關鍵字


SQL> GRANT INSERT (ID, NAME) ON T TO TEST;

授權成功。

SQL> GRANT UPDATE (NAME) ON T TO TEST;

授權成功。

SQL> GRANT DELETE (ID, AGE) ON T TO TEST;
GRANT DELETE (ID, AGE) ON T TO TEST
             *
1 行出現錯誤:
ORA-00969:
缺失 ON 關鍵字

對於這種授權到列的UPDATEINSERT,只能操作授權的列,其他的列不能修改:

SQL> CONN TEST/TEST
已連線。
SQL> INSERT INTO YANGTK.T VALUES (1, 'A');
INSERT INTO YANGTK.T VALUES (1, 'A')
                   *
1 行出現錯誤:
ORA-00947:
沒有足夠的值


SQL> INSERT INTO YANGTK.T (ID, NAME) VALUES (1, 'A');

已建立 1 行。

SQL> INSERT INTO YANGTK.T (ID, NAME, AGE) VALUES (2, 'B', 10);
INSERT INTO YANGTK.T (ID, NAME, AGE) VALUES (2, 'B', 10)
                   *
1 行出現錯誤:
ORA-01031:
許可權不足


SQL> UPDATE YANGTK.T SET NAME = 'C' WHERE ID = 1;

已更新 1 行。

SQL> UPDATE YANGTK.T SET ID = 2 WHERE ID = 1;
UPDATE YANGTK.T SET ID = 2 WHERE ID = 1
              *
1 行出現錯誤:
ORA-01031:
許可權不足

雖然授權到列可以解決部分許可權細化的問題,但是由於不支援SELECTDELETE,而且使用上存在一些限制,因此並不是解決列訪問許可權的最佳選擇,如果真要實現個別列的許可權控制,應該使用檢視。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-674757/,如需轉載,請註明出處,否則將追究法律責任。

相關文章