存储过程里不能访问其他用户的表
2017-05-03 19:48
190 查看
今天遇到一个很奇怪的问题,有两个用户ESEG和failly88,都是dba角色权限,我现在在hbibillms用户下建立了一个存储过程,访问到ESEG用户下的表:
CREATE OR REPLACE PROCEDURE userdatacopytoESEG IS
/*===============================================================+
版权信息: 版权所有(c)
作业名称:
作业功能:通过用曲线代码和剩余年限进行数据查询
责任人 : 钟军
版本号 : v1.0.0.0
加载策略:
目标表 : ESEG.sg_user-经济情景发生器中的用户信息表
源表 : BDF2_USER - 偿付能力二全面风险管理系统中的用户信息表
代码工具: PL/SQL Developer
创建日期: 2017-05-03---压力测试中用户权限管理
+===============================================================*/
BEGIN
--清空现有经济情景发生器中的用户信息数据
delete ESEG.sg_usertest;
commit;
---插入数据
INSERT INTO ESEG.sg_usertest
(ID, PID, HANDNO, NAME, FULLNAME, ISEXPIRE, EMAIL,PASSWORD)
select sys_guid(),
t.company_id_,
t.username_,
t.ename_,
t.cname_,
t.enabled_,
t.email_,'YwJmAGUCbAhvCm4IaQpoAGgCbwBuAmUIZApnCH4KUQBQAlcAVgJdCFwKWwhWClkAWAI='
from BDF2_USER t; COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Exception happened,data was rollback');
ROLLBACK;
END;
编译时报错,说ESEG.sg_usertest表或视图不存在。
我将这两句抠出来,放到sql窗口实行了下,没问题,可以访问的,可是为什么到了存储过程里面就找不到了呢?
在网上查了下,找到问题的根源了:
“在oracle的pl/sql块(过程、函数和包也是命名pl/sql块)中对数据的访问权限和单纯在sqlplus中有时候是不一样的,块中访问数据必须通过显式授权,也就是通过grant ... to userxxx的方式而不是通过隐式方式(通过role授权)。检察权限分配,就应该能解决问题了”
我试着为hbibillms用户显示分配了对这两张表的操作权限:
grant delete,insert on ESEG.sg_usertest to failly88;
grant all on hbibilldata.feetraderecordhistoryto hbibillms;
CREATE OR REPLACE PROCEDURE userdatacopytoESEG IS
/*===============================================================+
版权信息: 版权所有(c)
作业名称:
作业功能:通过用曲线代码和剩余年限进行数据查询
责任人 : 钟军
版本号 : v1.0.0.0
加载策略:
目标表 : ESEG.sg_user-经济情景发生器中的用户信息表
源表 : BDF2_USER - 偿付能力二全面风险管理系统中的用户信息表
代码工具: PL/SQL Developer
创建日期: 2017-05-03---压力测试中用户权限管理
+===============================================================*/
BEGIN
--清空现有经济情景发生器中的用户信息数据
delete ESEG.sg_usertest;
commit;
---插入数据
INSERT INTO ESEG.sg_usertest
(ID, PID, HANDNO, NAME, FULLNAME, ISEXPIRE, EMAIL,PASSWORD)
select sys_guid(),
t.company_id_,
t.username_,
t.ename_,
t.cname_,
t.enabled_,
t.email_,'YwJmAGUCbAhvCm4IaQpoAGgCbwBuAmUIZApnCH4KUQBQAlcAVgJdCFwKWwhWClkAWAI='
from BDF2_USER t; COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Exception happened,data was rollback');
ROLLBACK;
END;
编译时报错,说ESEG.sg_usertest表或视图不存在。
我将这两句抠出来,放到sql窗口实行了下,没问题,可以访问的,可是为什么到了存储过程里面就找不到了呢?
在网上查了下,找到问题的根源了:
“在oracle的pl/sql块(过程、函数和包也是命名pl/sql块)中对数据的访问权限和单纯在sqlplus中有时候是不一样的,块中访问数据必须通过显式授权,也就是通过grant ... to userxxx的方式而不是通过隐式方式(通过role授权)。检察权限分配,就应该能解决问题了”
我试着为hbibillms用户显示分配了对这两张表的操作权限:
grant delete,insert on ESEG.sg_usertest to failly88;
grant all on hbibilldata.feetraderecordhistoryto hbibillms;
相关文章推荐
- 存储过程里不能访问其他用户的表
- win7 IIS配置后局域网其他用户不能访问(摘录)
- 解决win7部署的网站其他用户不能访问
- linux创建目录允许组用户创建自己的文件,其他组用户访问和编辑,不能删除
- win7 IIS配置后局域网其他用户不能访问解决方案(摘录)
- Oracle为其他用户存储过程分配查询权限
- 设置用户不登入,不能访问其他页面
- oracle 创建表并创建存储过程,通过存储过程将其他用户的信息导入到新建表中
- linux创建目录允许组用户创建自己的文件,其他组用户访问和编辑,不能删除
- 不能以根用户身份运行,要以根用户身份运行,您必须为个人资料信息的存储指定其他的“--user-data-dir”。
- IIS发布网站后局域网其他用户不能访问问题(转)
- apache 2.4.23 只能本地访问,其他用户不能访问,提示You don't have permission to access
- 发布网站后Windows Server2008 R2配置IIS后局域网其他用户不能访问问题
- 在sql中可以查询其他用户下的表而在存储过程中却不认识
- Win7 IIS配置后局域网其他用户不能访问的问题
- win7 IIS配置后局域网其他用户不能访问(摘录)
- 关于win7部署iis后,局域网的其他用户不能访问的问题。
- apache 2.4.23 只能本地访问,其他用户不能访问,提示You don't have permission to access
- 访问注册表的扩展存储过程
- 未公布的访问注册表的扩展存储过程