1.在A和B用户下同时创建如下测试表和数据
A:
create
table
tb_test(a
varchar2
(
50
));
insert
into
tb_test
select
1
from
dual;
insert
into
tb_test
select
2
from
dual;
insert
into
tb_test
select
3
from
dual;
commit
;
B:
create
table
tb_test(a
varchar2
(
50
));
insert
into
tb_test
select
1
from
dual;
insert
into
tb_test
select
2
from
dual;
insert
into
tb_test
select
3
from
dual;
commit
;
2.在A下创建存储过程并授权给B,注意这里的
AUTHID
CURRENT_USER
CREATE
OR
REPLACE
PROCEDURE
pd_test
AUTHID
CURRENT_USER
IS
BEGIN
UPDATE
tb_test
SET
a =
'abc'
;
COMMIT
;
END
pd_test;
GRANT
EXECUTE
ON
pd_test
to
B;
3.在用户B下去执行pd_test时,会发现B用户下的tb_test表数据被更新成abc,而A用户下的tb_test数据表未被更新
如果不加
AUTHID
CURRENT_USER,
则A用户下的tb_test表数据被更新成abc,而B用户下的tb_test数据表未被更新
关于
AUTHID
CURRENT_USER
的解释
:
这是典型的,数据库中只创建一个存储过程,所有用户都可以使用,但是每个用户使用的时候只是用自己的权限权限执行,oracle自己的包很多都这样的 。
存储过程默认是用定义者definer的身份调用的,如果加上AUTHID CURRENT_USER,则用当前登陆的用户权限调用,如果该过程的调用者(而非定义者)被授与系统权限execute any procedure或是被该过程的定义者grant execute on授权的话,不用这个AUTHID CURRENT_USER子句,调用者照样可以使用这个过程。
另外,在Oracle的存储过程中,如果涉及到操作不同schema下的对象的时候,可以在不同的schema下写相同的procedure,但这样带来的问题是维护和同步带来了麻烦。
在procedure中加上authid current_user,来说明procedure中操作的对象是当前连接用户的对象而并不是procedure所属用户下的对象。所以在
procedure中的DML语句也是在当前连接用户的对象去操作。
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle 19c 在线缩减 UNDO 表空间 容量
Oracle 19c 在线缩减 UNDO 表空间 容量
26-03-03 - MIUI 11开发版体验,雷军狂赞的一个版本,没想到还真挺好用
MIUI 11开发版体验,雷军狂赞的一个版本,没想到还真挺好用
26-03-03 - 苹果手机耗电快?可能和这4个设置有关,赶紧自查一下
苹果手机耗电快?可能和这4个设置有关,赶紧自查一下
26-03-03 - Centos7 系统安装 Oracle 无法调出图形安装界面问题解决
Centos7 系统安装 Oracle 无法调出图形安装界面问题解决
26-03-03 - 想知道你的华为手机是正品吗?教你3招快速辨别,赶快自查一下
想知道你的华为手机是正品吗?教你3招快速辨别,赶快自查一下
26-03-03 - Oracle推出全球首个自治操作系统
Oracle推出全球首个自治操作系统
26-03-03 - 还在随便允许手机应用权限?哪些权限不能给?看完你就知道了
还在随便允许手机应用权限?哪些权限不能给?看完你就知道了
26-03-03 - iPhone手机全家桶出炉,一分钟带你回顾从99到1449美元的发展史
iPhone手机全家桶出炉,一分钟带你回顾从99到1449美元的发展史
26-03-03 - Oracle 20c 新特性: SQL 宏支持(SQL Macro)Scalar 和 Table 模式 两种用法
- 数据库软件被注入恶意代码,导致数据库无法启动,ORA-600_16703
数据库软件被注入恶意代码,导致数据库无法启动,ORA-600_16703
26-03-03
