Oracle一直支持对表的列进行授权,这使得访问授权细化到列。
并不是所有的DML操作都支持授权到列,只有INSERT、UPDATE和REFERENCES权限支持到列:
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 关键字
对于这种授权到列的UPDATE和INSERT,只能操作授权的列,其他的列不能修改:
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: 权限不足
虽然授权到列可以解决部分权限细化的问题,但是由于不支持SELECT和DELETE,而且使用上存在一些限制,因此并不是解决列访问权限的最佳选择,如果真要实现个别列的权限控制,应该使用视图。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-674757/ ,如需转载,请注明出处,否则将追究法律责任。