• 存储过程里不能访问其他用户的表


     今天遇到一个很奇怪的问题,有两个用户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;

  • 相关阅读:
    Redis
    Redis
    运维
    Redis
    Redis
    Redis
    Redis
    Redis
    Redis
    Spring
  • 原文地址:https://www.cnblogs.com/shangshen/p/6803589.html
Copyright © 2020-2023  润新知