博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
执行存储过程报错——ora-01031:权限不足
阅读量:6046 次
发布时间:2019-06-20

本文共 1046 字,大约阅读时间需要 3 分钟。

1. 执行DDL报错

在oracle存储过程中,默认是可以直接执行DML和DQL的,但是执行CREATE这种的DDL则需要借助EXECUTE IMMEDIATE ···了,如下备份表语句

--抄表表备份  SELECT TO_CHAR(SYSDATE,'YYMMDD') INTO V_DQRQ FROM DUAL;  V_CREATESQL := 'CREATE TABLE SF_EBZCB'||V_DQRQ||'_T AS SELECT * FROM SF_EBZCB_T';   EXECUTE IMMEDIATE V_CREATESQL;

当执行该语句时,提示 ORA-01031: 权限不足。该用户已赋予DBA权限。

原因:CREATE TABLE想使用CREATE ANY TABLE权限,而CREATE ANY TABLE权限来自DBA角色,默认情况下,虽然在会话环境中可见,但在存储过程中不可见(无效)。

即:ORACLE默认为定义者权限,定义者权限在存储过程中ROLE无效,需要显式授权。

GRANT CREATE ANY TABLE TO charge_liny;

执行上面sql显式授权后,在该用户下通过 EXECUTE IMMEDIATE 执行CREATE语句即可成功创建表。

2. 授权当前用户查询其他用户下的表

查询另一用户下的中间库某表中的数据并更新到当前用户中的某个表中,当调用其他用户的表时,需要使用 用户.表名 的格式来区分该表是否是当前用户下的表,这里也需要在被调用的用户下显式的授权给当前用户查询权限。

INSERT INTO SF_EBZCB_T  (YHBH, CNQ, JLBBH, SCBS, BCBS, YL, JSYL)  SELECT YHBH, CNQ, RBXH, QCBL, JZBL, BJYL, SJYL    FROM USER_INFO.RB_INFO     WHERE SYNCSTATE = 0      AND CNQ = SF_DQCNQ_F;

授权语句(在USER_INFO用户下)

GRANT SELECT ANY TABLE TO CHARGE_LINY;

授权其他DML权限

GRANT INSERT ANY TABLE TO CHARGE_LINY;GRANT UPDATE ANY TABLE TO CHARGE_LINY;GRANT DELETE ANY TABLE TO CHARGE_LINY;

 

转载地址:http://tpnex.baihongyu.com/

你可能感兴趣的文章
MySQL 5.7下InnoDB对COUNT(*)的优化
查看>>
国内首次公开僵尸网络主控服务器数量
查看>>
数据分析师常见的十个问题
查看>>
微软继续投资人工智能:与马斯克OpenAI达成云计算合作
查看>>
美国大学开始用大数据来预测学生是否能顺利完成课业
查看>>
全球4G排名:新加坡45兆网速第一、信号韩国最好
查看>>
2017年分布式光伏的正确“打开”方式
查看>>
智能时代,深度学习和大数据成了密不可分的一对儿
查看>>
中国存储三大势力成形 各自进击
查看>>
ALE新战略三板斧:行业化,云服务和渠道
查看>>
“北上深杭”成大数据企业聚集地
查看>>
物联网迎来最好的时代
查看>>
服务器托管机房选择
查看>>
Rays Power Infra将在印度建立100MW光伏项目
查看>>
Java EE供应商和伦敦Java用户组宣布新的MicroProfile
查看>>
创新监管 把握物联网、宽带发展机遇
查看>>
微软上线基于云端的BUG发现项目Project Springfield
查看>>
数据披露苹果频繁反对其他公司申请专利
查看>>
浅谈视频质量诊断系统在银行监控系统中的运用
查看>>
昌盛日电转型电力全系统服务
查看>>