oracle 新舊許可權變更過程

2021-05-23 04:33:59 字數 2664 閱讀 3083

create or replace procedure syn_userpriv_to_rolepriv(

acityid number

,v_err out varchar2

) --syn 同步

isfprivstr_old varchar(5000);

fprivstr_new varchar(5000);

fcount   number;

froleid  number;

frolename varchar(200);

fisequle boolean;

cursor cur_user is

select * from userinfo order by userid; --使用者

cursor cur_userpriv(v_userid varchar2) is --使用者原來模組許可權

select * from userprivinfo

where userid=v_userid

and cityid=acityid

order by userid,moduleid;

cursor cur_role is

select * from role_info order by roleid;

cursor cur_rolepriv(v_roleid varchar2) is

select * from role_priv

where roleid=v_roleid

and cityid=acityid

order by roleid,moduleid;

begin

v_err:= '失敗';

fisequle:= false;--沒有角色時用到

for fcur_user in cur_user loop

select count(*) into fcount from user_role_relat where userid=fcur_user.userid and cityid=acityid;

if fcount=0 then--使用者還沒有更新進來

fprivstr_old:= '';

for fcur_userpriv in cur_userpriv(fcur_user.userid) loop--獲得使用者許可權

fprivstr_old:= concat(concat(fprivstr_old,','),fcur_userpriv.moduleid);

end loop;

for fcur_role in cur_role loop

fprivstr_new:= '';

for fcur_rolepriv in cur_rolepriv(fcur_role.roleid) loop

fprivstr_new:= concat(concat(fprivstr_new,','),fcur_rolepriv.moduleid);

end loop;

fisequle:= false;

if fprivstr_old=fprivstr_new then

insert into user_role_relat

(roleid, userid, cityid)

values

(fcur_role.roleid, fcur_user.userid, acityid);

fisequle:= true;

end if;

end loop;

if not fisequle then

select count(*) into fcount from role_info where cityid= acityid;

frolename:= concat('角色',fcount);

select vfms_fromal_seq.nextval into froleid from dual;

insert into role_info

(roleid, rolename, cityid, comments)

values

(froleid, frolename, acityid, frolename);

insert into user_role_relat

(roleid, userid, cityid)

values

(froleid, fcur_user.userid, acityid);

for fcur_userpriv in cur_userpriv(fcur_user.userid) loop--獲得old使用者許可權

insert into role_priv

(roleid, moduleid, cityid)

values

(froleid, fcur_userpriv.moduleid, acityid);

end loop;

end if;

end if;

end loop;

commit;

v_err:= '成功';

--print(fprivstr_old||'-'||fprivstr_new);

exception

when others then

begin

rollback;

end;

end syn_userpriv_to_rolepriv;

Linux chmod 變更使用者許可權

chmod 應該是change mode的意思?用於在linux終端中修改使用者許可權 讀 寫 執行 也就是set permissions chmod permissions file或者是 chmod permission1 permission2 permission3 file需要注意,lin...

Oracle儲存過程執行許可權

預設情況下,在呼叫儲存過程使用者的角色是不起作用的,即在執行儲存過程時只有public許可權。所以如果被呼叫的儲存過程中如果有execute immediate create table.語句,將會引發ora 01031 insufficient privileges錯誤。儲存過程分為兩種,即dr ...

Oracle儲存過程許可權問題

儲存過程分成兩種許可權 1.定義者許可權 authid definer 2.呼叫者許可權 authid current user 預設的情況下使用的是定義者許可權。1。定義者許可權使用遇到的問題 當使用定義者許可權時候,不管是你自己去call,還是其他使用者去call,效果是一樣的,都是用你的許可權...