1、首先定义 authid current_user使用的是调用者的权限去运行,authid definer使用定义者的权限去运行。
例如sys定义的存储过程如果加入authid current_user,那么普通scott则执行这个存储过程失败。因为没有权限。
2、其次authid current_user和authid definer 的会话角色权限可见性上有所区别。
例如,虽然sys有执行这个存储过程中语句的权限,但这个权限是角色DBA中的权限,在authid definer的存储过程是disabled。
例如,如果定义为authid current_user则执行成功,authid current_user时,使用存储过程的会话的角色DBA中的权限是enabled。
3、存储过程编译时角色也是disabled,并且不验证动态SQL的权限。
例如,--用户system授权dba_objects视图的select权限给scott。而非通过角色赋给权限。存储过程执行成功。