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,效果是一樣的,都是用你的許可權...