问题描述:
用户USERA下面有3张表,分别为TABLE_A, TABLE_A1,TABLE_A2,都只有一个字段value;一个包pkg_t, pkg_t是 authid current_user.
pkg_t中有个过程DONE,做的insert into TABLE_A(value) values(user());的操作
现在创建2个用户分别是001,002(都是数字的)。 把pkg_t的执行权限赋给001,002。 接下来建立私有同义词
create or replace synonym 001.TABLE_A for TABLE_A1;
create or replace synonym 002.TABLE_A for TABLE_A2;
现在测试如下:
用用户001执行pkg_t.done(); 正常情况下是应该在USERA.TABLE_A1里查一条记录的
用用户002执行pkg_t.done(); 正常情况下是应该在USERA.TABLE_A2里查一条记录的 用这两个用户不停的执行这个过程,发现有数据错乱的现象.在USERA.TABLE_A2发现value=‘001’的记录。 我现在碰到的问题就是和上面描述类似 大家有没有碰到过这个情况,都快疯了,给些建议,不胜感激!
下面是测试代码,都是用用户USERA登入操作
create table table_a
(value varchar2(50)); create table table_a1
(value varchar2(50)); create table table_a2
(value varchar2(50)); create user "001" identified by a;
grant resource,connect to "001"; create user "002" identified by a;
grant resource,connect to "002"; grant insert,select,delete,update on usera.table_a1 to "001";
grant insert,select,delete,update on usera.table_a2 to "002"; create synonym "001".table_a for usera.table_a1;
create synonym "002".table_a for usera.table_a2; --建立包
create or replace package pkg_t authid current_user is procedure done; end pkg_t;
/
create or replace package body pkg_t is
procedure done
is
begin
insert into table_a values(user);
end;
end pkg_t;
/ --赋权,同义词
create public synonym pkg_t for usera.pkg_t;
grant execute on pkg_t to "001";
grant execute on pkg_t to "002";
---下面开始测试(sqlplus中)
conn 001/a;
exec pkg_t.done;
commit;
select * from usera.table_a1;
conn 002/a;
exec pkg_t.done;
commit;
select * from usera.table_a2;
用户USERA下面有3张表,分别为TABLE_A, TABLE_A1,TABLE_A2,都只有一个字段value;一个包pkg_t, pkg_t是 authid current_user.
pkg_t中有个过程DONE,做的insert into TABLE_A(value) values(user());的操作
现在创建2个用户分别是001,002(都是数字的)。 把pkg_t的执行权限赋给001,002。 接下来建立私有同义词
create or replace synonym 001.TABLE_A for TABLE_A1;
create or replace synonym 002.TABLE_A for TABLE_A2;
现在测试如下:
用用户001执行pkg_t.done(); 正常情况下是应该在USERA.TABLE_A1里查一条记录的
用用户002执行pkg_t.done(); 正常情况下是应该在USERA.TABLE_A2里查一条记录的 用这两个用户不停的执行这个过程,发现有数据错乱的现象.在USERA.TABLE_A2发现value=‘001’的记录。 我现在碰到的问题就是和上面描述类似 大家有没有碰到过这个情况,都快疯了,给些建议,不胜感激!
下面是测试代码,都是用用户USERA登入操作
create table table_a
(value varchar2(50)); create table table_a1
(value varchar2(50)); create table table_a2
(value varchar2(50)); create user "001" identified by a;
grant resource,connect to "001"; create user "002" identified by a;
grant resource,connect to "002"; grant insert,select,delete,update on usera.table_a1 to "001";
grant insert,select,delete,update on usera.table_a2 to "002"; create synonym "001".table_a for usera.table_a1;
create synonym "002".table_a for usera.table_a2; --建立包
create or replace package pkg_t authid current_user is procedure done; end pkg_t;
/
create or replace package body pkg_t is
procedure done
is
begin
insert into table_a values(user);
end;
end pkg_t;
/ --赋权,同义词
create public synonym pkg_t for usera.pkg_t;
grant execute on pkg_t to "001";
grant execute on pkg_t to "002";
---下面开始测试(sqlplus中)
conn 001/a;
exec pkg_t.done;
commit;
select * from usera.table_a1;
conn 002/a;
exec pkg_t.done;
commit;
select * from usera.table_a2;
用用户001执行pkg_t.done(); 正常情况下是应该在USERA.TABLE_A1里查一条记录的
用用户002执行pkg_t.done(); 正常情况下是应该在USERA.TABLE_A2里查一条记录的 你测试过没有,我做的测试,这里用户001和002操作后,都是insert的usera的table_a表,而不是根据synonym来操作的。