文档介绍:广州远佳信息科技有限公司
Oracle 数据库教程
——oracle 通过 sys_context 实现各用户只能访问属于自己
的数据
客户说,现在数据安全比较重要,要实现不同用户登录后,只能访问属于自己的数据。听到客户这个要求
后,我首先想到的是用 sys_context('USERENV','SESSION_USER')这个方式实现,但在实际实施的过程中,
也遇到了一些麻烦,下面就把实施过程与大家分享一下。
1、简单说明下
在数据库中有 user001,user002,user003,user004。在做业务的时候,我们在这个表上有一个对应关系,就这
个表的 userid:24401,24402,24403,24404 分别与用户对应。
表的情况如下(mydata 下面存在一个这样的表:):
SQL> select * from ;
GOODSID
GOODSNAME GOODSTYPE GOODSUNIT USERID
----------- ---------------------------------------- ---------------------------------------- ---------- ----------
34 生命一号(礼盒装) 10ml*60 支+240s*1*5 提提 24401
276 国公酒(简装) 328ml*24 瓶瓶 24403
277 国公酒(精装) 328ml*24 瓶瓶 24401
438 盐酸氨溴索口服溶液(沐舒坦) 100ml:*36 瓶瓶 24402
480 古汉养生精口服液 10ml*12 支*40 盒盒 24401
504 乌鸡白凤丸(北京白凤丸)(礼盒装) 6g*6 丸*40 盒盒 24402
550 生命一号 10ml*10 支+40 粒*1*40 盒 24404
576 京都念慈菴蜜炼川贝枇杷膏*(新批文) 300ml*48 瓶瓶 24404
672 回音必孕康口服液 10ml*10 支*50 盒盒 24401
674 抗病毒口服液 10ml*12 支*50 盒盒 24403
729 福寿仙多糖王口服液 10ml*10 支*40 盒盒 24403
769 转移因子口服溶液 10mg:10ml*6 支*60 盒盒 24401
也就是说,用 user001 登录时只查 userid=24401,以此类推。对于这种情况,很快可以想到用 sys_context
的方式来实现,在实现过程中,我们很我们遇到了 ora-01031 的错误。
2、开始进行测试,理论没什么问题,但要实践一下
建立相应的用户并授权:
广州远佳信息科技有限公司
SQL> create user user001 identified by 123456;
User created.
SQL> create user user002 identified by 123456;
User created.
SQL> crea