架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8556|回复: 0

[资料] oracle数据库列级权限控制

[复制链接]
发表于 2015-12-11 23:47:14 | 显示全部楼层 |阅读模式
客户有个需求,一张150多个字段的表,客户要求只将部分字段给扫描公司的人看,这个需求用视图就可以很容易实现,客户又要求,这些字段,扫描公司只可以修改其中的个别字段,我之前还真没遇到这样在列级别做权限控制的需求,做了个实验,感觉很有意思,记录下

  客户有个需求,一张150多个字段的表,客户要求只将部分字段给扫描公司的人看,这个需求用视图就可以很容易实现,客户又要求,这些字段,扫描公司只可以修改其中的个别字段,我之前还真没遇到这样在列级别做权限控制的需求,做了个实验,感觉很有意思,记录下测试过程。

  1.创建测试表并插入点测试数据:

  SQL> create table test( id number,table_name varchar2(50),

  owner varchar2(50),TABLESPACE_NAME varchar2(50));

  Table created.

  SQL> insert into test select rownum,table_name,owner,

  TABLESPACE_NAME from dba_tables;

  5490 rows created.

  SQL> commit;

  Commit complete.

  2.创建测试用户并赋予基本权限:

  SQL> CONN / AS SYSDBA

  Connected.

  SQL> create user stream identified by stream default tablespace users;

  User created.

  SQL> grant connect,resource to stream;

  Grant succeeded.

  3.赋予测试用户列级权限:

  SQL> conn auth/auth

  Connected.

  SQL> grant update (id) on test to stream;

  Grant succeeded.

  SQL> grant insert (table_name) on test to stream;

  Grant succeeded.

  SQL>

  SQL> grant select on test to stream;

  Grant succeeded.

  4.查询列级权限设置信息:

  SQL> select GRANTEE,OWNER,TABLE_NAME,COLUMN_NAME,GRANTOR,PRIVILEGE,

  GRANTABLE from user_col_privs;

  GRANTEE OWNER TABLE_NAME COLUMN_NAME GRANTOR PRIVILEGE GRA

  ------- ----- ---------- ----------- ------- --------- ---

  STREAM AUTH TEST TABLE_NAME AUTH INSERT NO

  AUT AUTH TEST ID AUTH INSERT NO

  AUT AUTH TEST ID AUTH UPDATE NO

  STREAM AUTH TEST ID AUTH UPDATE NO

  5.登陆测试用户验证SELECT权限:

  SQL> conn stream/stream

  Connected.

  SQL> select * from(select * from auth.test order by 1) where rownum< =10;

  ID TABLE_NAME OWNER TABLESPACE

  ---------- -------------------- ---------- ----------

  1 ICOL$ SYS SYSTEM

  2 IND$ SYS SYSTEM

  3 COL$ SYS SYSTEM

  4 CLU$ SYS SYSTEM

  5 TAB$ SYS SYSTEM

  6 LOB$ SYS SYSTEM

  7 COLTYPE$ SYS SYSTEM

  8 SUBCOLTYPE$ SYS SYSTEM

  9 NTAB$ SYS SYSTEM

  10 REFCON$ SYS SYSTEM

  10 rows selected.

  6.验证列级UPDATE权限控制:

  SQL> update auth.test set owner='STREAM' where id =1;

  update auth.test set owner='STREAM' where id =1

  *

  ERROR at line 1:

  ORA-01031: insufficient privileges

  可见,不允许修改测试表的OWNER字段的值,报ORA-01031:权限不足,由于上文赋予了测试用户对修改测试表ID字段的修改权限,修改ID字段是可以的。

  SQL> update auth.test set id=10 where id=1;

  1 row updated.

  SQL> rollback;

  Rollback complete.

  7.验证列级INSERT权限控制:

  SQL> insert into auth.test values(1,'stream','stream','users');

  insert into auth.test values(1,'stream','stream','users')

  *

  ERROR at line 1:

  ORA-01031: insufficient privileges

  可见,整行插入是不被允许的,也是权限不够,由于上文赋予了测试用户对修改测试表TABLE_NAME字段的插入权限,所以插入TABLE_NAME字段是可以的,但是前提是其他字段没有NOT NULL约束。

  SQL> insert into auth.test(table_name) values ('stream');

  1 row created.

  SQL> rollback;

  Rollback complete.






上一篇:Oracle 10G的详细安装步骤教程
下一篇:腾讯分析启用后显示系统繁忙,请稍后再试
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-20 12:30

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表