ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 表列授权

表列授权

原创 Linux操作系统 作者:yangtingkun 时间:2010-09-24 23:52:42 0 删除 编辑

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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1964
  • 访问量
    11077115