概述
客户有个需求,一张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 wner='STREAM' where id =1;
update auth.test set wner='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.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26547977/viewspace-753036/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26547977/viewspace-753036/
最后
以上就是殷勤路人为你收集整理的oracle列级权限控制的全部内容,希望文章能够帮你解决oracle列级权限控制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复