日期:2014-05-16  浏览次数:20508 次

第三章 事务作用域 Oracle 调用者和定义者权限
Oracle 调用者和定义者权限
一、第一种情况,PL/sql程序的所有者或定义者保留程序执行的全部权限。可以通过在命名程序
头部分中使用 AUTHID DEFINER 关键字来实现
任何用户接收到运行以这种方式编译的程序的权限后,将会以程序所有者的身份运行该程序。

--发出定义者权限
create as replace function hr.quarterly_sales
AUTHID DEFINER
as
Begin
  
end;



第二种情况
在程序头部分中使用 AUTHID CURRENT_USER 关键字
改关键子将指示Oracle使用调用者的权限来执行程序。
保存点、提交和事务回滚
DECLARE
  cursor c_nums is 
    select * from tb_sql;
BEGIN
  savepoint assign_nums;
  for r_num in c_nums loop
    update tb_sql 
       set num5=num5+10000
     where id=r_num.id;
  end loop;
  Exception
    when others then
      rollback to assign_nums;
END;


锁定
select for update
set transaction read only
set transaction isolation level serializable
lock table


declare
  lv_num1 number;
  CURSOR c_nums is
    select * from tb_sql for update;
begin
  update tb_sql set num4=num4+40000;
end;
  
    
Oracle 调用者和定义者权限
一、第一种情况,PL/sql程序的所有者或定义者保留程序执行的全部权限。可以通过在命名程序
头部分中使用 AUTHID DEFINER 关键字来实现
任何用户接收到运行以这种方式编译的程序的权限后,将会以程序所有者的身份运行该程序。

--发出定义者权限
create as replace function hr.quarterly_sales
AUTHID DEFINER
as
Begin
  
end;



第二种情况
在程序头部分中使用 AUTHID CURRENT_USER 关键字
改关键子将指示Oracle使用调用者的权限来执行程序。
--发出调用者权限
create as replace function hr.quarterly_sales
AUTHID CURRENT_USER
as
Begin
  
end;

--发出调用者权限create as replace function hr.quarterly_salesAUTHID CURRENT_USERasBegin end;