如何正确使用Authid的current_user属性?

2026-05-29 14:383阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计430个文字,预计阅读时间需要2分钟。

如何正确使用Authid的current_user属性?

Authid Current_User:基于执行过程的用户权限来处理涉及的对象权限。这是典型方式,数据库中仅创建一个存储过程,所有用户均可使用,但每个用户使用时,仅执行自己的权限限制。


Authid Current_User:以执行过程的用户的权限来处理涉及的对象权限.

这是典型的,数据库中只创建一个存储过程,所有用户都可以使用,但是每个用户使用的时候 只是用自己的权限权限执行,oracle自己的包很多都这样的。

存储过程默认是用定义者definer 的身份调用的,如果加上AUTHID CURRENT_USER,则用当前登陆的用户权限调用,如果该过程的调用者(而非定义者)被授与系统权限execute any procedure或是被该过程的定义者grant execute on授权的话,不用这个AUTHID CURRENT_USER子句,调用者照样可以使用这个过程。
另外,在Oracle的存儲過程中,如果涉及到操作不同schema下的對象的時候,可以在不同的schema下寫相同的procedure,但這樣帶來的問題是維護和同步帶來了麻煩,可以在procedure中加上authid current_user,來說明procedure中操作的對象是當前連接用戶的對象而并不是procedure所屬用戶下的對象。

一个例子


引用:

create or replace procedure pr_mv is
begin
DBMS_MVIEW.REFRESH('mv_xx');
end;




存储过程中调用,test存储过程时会提示:ora-01031 权限不足

这里是调用者对这个MV的权限可能不够,


如何正确使用Authid的current_user属性?

引用:

create or replace procedure pr_mv
authid current_user is
begin
DBMS_MVIEW.REFRESH('mv_xx');
end;




这样就OK

标签:用法Authi

本文共计430个文字,预计阅读时间需要2分钟。

如何正确使用Authid的current_user属性?

Authid Current_User:基于执行过程的用户权限来处理涉及的对象权限。这是典型方式,数据库中仅创建一个存储过程,所有用户均可使用,但每个用户使用时,仅执行自己的权限限制。


Authid Current_User:以执行过程的用户的权限来处理涉及的对象权限.

这是典型的,数据库中只创建一个存储过程,所有用户都可以使用,但是每个用户使用的时候 只是用自己的权限权限执行,oracle自己的包很多都这样的。

存储过程默认是用定义者definer 的身份调用的,如果加上AUTHID CURRENT_USER,则用当前登陆的用户权限调用,如果该过程的调用者(而非定义者)被授与系统权限execute any procedure或是被该过程的定义者grant execute on授权的话,不用这个AUTHID CURRENT_USER子句,调用者照样可以使用这个过程。
另外,在Oracle的存儲過程中,如果涉及到操作不同schema下的對象的時候,可以在不同的schema下寫相同的procedure,但這樣帶來的問題是維護和同步帶來了麻煩,可以在procedure中加上authid current_user,來說明procedure中操作的對象是當前連接用戶的對象而并不是procedure所屬用戶下的對象。

一个例子


引用:

create or replace procedure pr_mv is
begin
DBMS_MVIEW.REFRESH('mv_xx');
end;




存储过程中调用,test存储过程时会提示:ora-01031 权限不足

这里是调用者对这个MV的权限可能不够,


如何正确使用Authid的current_user属性?

引用:

create or replace procedure pr_mv
authid current_user is
begin
DBMS_MVIEW.REFRESH('mv_xx');
end;




这样就OK

标签:用法Authi