表列授权

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

转载于:http://blog.itpub.net/4227/viewspace-674757/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值