究竟是不是这样? 首先,说明一下,用dba_tab_privs和user_tab_privs这两个都是可以的,和一般的dba_/user_视图适用范围相同,
场景1. 用户属主的存储过程,授权给自己 用户BISAL下创建存储过程,授权自己,
此时user_tab_privs视图为空,可以理解为对象就是自己的,没必要进行授权,反过来看,不能将对象权限,从属主身上删除,
场景2. 用户属主的存储过程,授权给其他用户 用户STAR下创建存储过程,授权给用户BISAL,
BISAL用户下检索user_tab_privs视图,有了记录,表明用户STAR(GRANTOR)的AP对象,授权用户BISAL(GRANTEE),可有执行权限(EXECUTE), 其实使用STAR,检索是相同的,换句话说,虽然用的USER_视图,但是对于BISAL用户,GRANTEE,被授予了存储过程AP执行权限,对于STAR用户来说,GRANTOR,授予了存储过程AP执行权限,属于object grants in the database范畴,(EXECUTE可以drop procedure)
“all object”表示不仅可以检索存储过程,可以检索其他的对象,除了存储过程,我们看看授予表对象权限, BISAL用户下有一张表A,授予SELECT权限给用户STAR,
无论使用BISAL,还是STAR用户,均可以进行检索, 授予所有权限,
检索user_tab_privs视图, 细心的朋友可能已经发现,*_tab_privs显示的结果中,没有指出对象的类型,比如我这么操作,
检索user_tab_privs,可以看见这里TABLE_NAME,两个都是AP,无法区分是什么类型的对象, 上面是版本11.2.0.4显示,但是看12c以及18c文档,针对这张视图,已经增加了type类型, 12c手册, 18c手册, 这是Live SQL显示的检索,即18c下的检索显示, Oracle已经意识到11g中*_tab_privs视图需要type,于是在新版本中,增加了这个字段信息,现在看着就方便了些。 |
|