一、为什么要使用oracle授权访问?
Oracle授权访问控制特定用户只能访问数据库指定访问的内容和权限。
例如,系统A需要访问系统B的数据库erpdev中的表test,如果我们将系统B的访问数据库用户提供给系统A使用,那么系统A将具有控制系统B数据库erpdev的权限,这显然是系统B不想看到的安全隐患。所以,可以通过oracle的授权用户来控制系统A访问系统B的权限,来排除这种隐患。例如,用oracle授权访问功能控制系统A只能查询数据库erpdev中的test表,如果用户试图向test表中插入数据,或者修改test表中的数据,那么oracle将返回错误信息,用户操作失败。其实这就是用oracle授权访问控制了某个用户访问数据库的权限。
二、Oracle授权访问语句(假设被授权用户名INTEST)
1、 给INTEST授权select表test功能:grant select on test to INTEST
2、 给INTEST授权update表test功能:grant update on test to INTEST
3、 给INTEST授权delete表test功能:grant delete on test to INTEST
三、oracle授权访问实例
假设将给某程序提供访问某数据库指定表的需求,现在用oracle授权访问来实现。
1、先建立用户hdtb2,如下图:角色可以不用设置,并且一定不能给用户设定 “DBA”角色!只给hdtb2保留CONNECT即可,或者新建角色付给hdtb2用户。
注意,我在新建hdtb2这个用户时选择的表空间是SYSDATE或者USERS,而并不是将要给hdtb2授权的表空间。
此时,查看hdtb2用户“已授予的对象权限”时是空的,也就是说并没有授予用户对象权限,如下图
2、在现在还未给hdtb2用户设置oracle授权访问时,用java程序测试一下hdtb2用户访问数据库提示的错误:
这就证明hdtb2虽然连上了数据库,但是却不能访问。
3、用原系统用户在PL/SQL中给hdtb2用户设置oracle授权访问,语句如下:设置hdtb2删除t_prd_order_t_2表中数据的授权(grant delete on t_prd_order_t_2 to hdtb2)
执行完毕后再查看hdtb2用户“已授予的对象权限”时,如下图所示:
这说明用户hdtb2已经具有了删除t_prd_order_t_2表中数据的功能。
4、oracle授权访问设置完毕后,用java程序测试授权是否有效,如下图:
怪事了L怎么还不行呢?delete from t_prd_order_t_2?呵呵,相信看到这条语句就知道问题出在哪里了。继续……
吼吼,执行通过了,delete from hgvs_hdtb.t_prd_order_t_2,“hgvs_hdtb”就是我数据库的用户,并且刚才也是在用“hgvs_hdtb”这个用户登录PL/SQL后给hdtb2用户加的oracle授权,千万别忘了!
再测试一下,将delete换成select看看,执行后,如下图:
哈哈,看来控制的还不错呀。
5、通过以上步骤后,就可以用hdtb2这个用户来删除t_prd_order_t_2中的数据了。