视图中的调用者权限控制bequeath current_user

 在之前的版本中存储过程,函数、触发器,可以定义调用者,定义者权限,authid current_user使用的是调用者的权限去运行,authid definer使用定义者的权限去运行,并且默认是authid definer权限,且角色在过程块中失效,所以有时候需要以调用者权限执行。官方说法:[All roles are disabled in any named PL/SQL block (stored procedure, function, or trigger) that executes with definer's rights.]

目前视图也提供了两种权限定义,看实验:

-- 环境准备
SQL> create user user1 identified by 123;

用户已创建。

SQL> grant create session,create view,create procedure to user1;

授权成功。

SQL> create user user2 identified by 123;

用户已创建。

SQL> grant create session to user2;

授权成功。

SQL> edit
已写入 file afiedt.buf

  1  create or replace view user_views_def_v bequeath definer as
  2  select view_name,bequeath
  3  from user_views
  4* order by view_name
SQL> /

视图已创建。

SQL> edit
已写入 file afiedt.buf

  1  create or replace view user_views_cu_v bequeath current_user as
  2  select view_name,bequeath
  3  from user_views
  4* order by view_name
SQL> /

视图已创建。

SQL> grant select on user_views_def_v to user2;

授权成功。

SQL> grant select on user_views_cu_v to user2

授权成功。

-- 测试1
SQL> column view_name format a30

SQL> select * from user1.user_views_def_v;

VIEW_NAME                      BEQUEATH
------------------------------ ------------
USER_VIEWS_CU_V                CURRENT_USER
USER_VIEWS_DEF_V               DEFINER

SQL> select * from user1.user_views_cu_v;

VIEW_NAME                      BEQUEATH
------------------------------ ------------
USER_VIEWS_CU_V                CURRENT_USER
USER_VIEWS_DEF_V               DEFINER

SQL> conn user2/123@pdb1
已连接。

SQL> select * from user1.user_views_def_v;

未选定行

SQL> select * from user1.user_views_cu_v;

未选定行

-- 查看视图调用者,环境
SQL> conn user1/123@pdb1
已连接。
SQL> column ora_invoking_user format a20
SQL> column ora_invoking_userid format a20
SQL> select ora_invoking_user,ora_invoking_userid from dual;

ORA_INVOKING_USER    ORA_INVOKING_USERID
-------------------- --------------------
USER1                110

SQL> edit
已写入 file afiedt.buf

  1  create or replace function get_invoking_user
  2  return varchar2
  3   authid current_user
  4  as
  5   l_result varchar2(100);
  6  begin
  7    select ora_invoking_user || ':' || ora_invoking_userid
  8    into l_result
  9    from dual;
 10  return l_result;
 11* end;
SQL> /

函数已创建。

SQL> create or replace view get_invoking_user_def_v bequeath definer as
  2  select get_invoking_user as invoking_user from dual;

视图已创建。

SQL> create or replace view get_invoking_user_cu_v bequeath current_user as
  2  select get_invoking_user as invoking_user from dual;

视图已创建。

SQL> grant select on get_invoking_user_def_v to user2;

授权成功。

SQL> grant select on get_invoking_user_cu_v to user2;

授权成功。


-- 测试
SQL> select* from  user1.get_invoking_user_def_v;

INVOKING_USER
------------------------------------------------------------------------------

USER1:110

SQL> select * from user1.get_invoking_user_cu_v;

INVOKING_USER
------------------------------------------------------------------------------

USER1:110

SQL> conn user2/123@pdb1
已连接。
SQL> select* from  user1.get_invoking_user_def_v;

INVOKING_USER
---------------------------------------------------------

USER1:110

SQL> select * from user1.get_invoking_user_cu_v;

INVOKING_USER
---------------------------------------------------------

USER2:111

-- 从上可以看到,视图中也可控制调用者

-- 文章参考:https://oracle-base.com

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝闻道-夕死可矣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值