oracle列级权限控制
来源:互联网 发布:哪个动感单车好 知乎 编辑:程序博客网 时间:2024/04/29 14:52
客户有个需求,一张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 SYSDBAConnected.SQL> create user stream identified by stream default tablespace users;User created.SQL> grant connect,resource to stream;Grant succeeded.
3.赋予测试用户列级权限:
SQL> conn auth/authConnected.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 NOAUT AUTH TEST ID AUTH INSERT NOAUT AUTH TEST ID AUTH UPDATE NOSTREAM AUTH TEST ID AUTH UPDATE NO
5.登陆测试用户验证SELECT权限:
SQL> conn stream/streamConnected.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 SYSTEM10 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.
0 0
- oracle列级权限控制
- Oracle中表级列的默认值控制
- Oracle权限控制笔记
- Oracle 权限控制
- oracle权限控制
- Oracle的权限控制
- oracle 表访问权限控制
- oracle数据库访问权限控制
- java 实现oracle VPD 权限控制
- Oracle-用户、角色以及权限控制
- Oracle-用户、角色以及权限控制
- 1.oracle账户创建、权限控制
- 利用ORACLE对数据权限进行控制
- 实例级权限控制问题
- 权限控制
- 权限控制
- 权限控制
- 权限控制
- 2015080302 - 孤独的幸存者Ⅱ摘录1
- 功能强大的 eXtreme Table 使用
- STM32学习笔记(二)------串口实验
- 函数的作用域
- 自定义View的一个例子(这里使用了使用了自定义Button)
- oracle列级权限控制
- 2015080303 - 孤独的幸存者Ⅱ摘录2
- 滑动切换Activity
- 王太虚的水题集
- CentOS下使用文件构建swap
- 2015年8月3日工作日志-------赵鑫
- IPV4 地址分类 A B C D E
- 2015 Multi-University Training Contest 4
- html5中的table相关内容