精华内容
下载资源
问答
  • 但是,把类似这种话放到存储过程中,执行,就提示或视图不存在。 奇怪了 我实践了一下,也发现这个问题。 需要指出的是,select col1 from usrA.table_1; 这种语法在存储过程中是会提示错误的:在此select 语句...

    奇怪,这是自己第一次遇到这种情况

    同事告诉我,他在usrB下直接查询 select * from usrA.table_1; 是可以查到数据的
    但是,把类似这种话放到存储过程中,执行,就提示表或视图不存在。
    奇怪了

    我实践了一下,也发现这个问题。
    需要指出的是,select col1 from usrA.table_1; 这种语法在存储过程中是会提示错误的:在此select 语句中缺少into子句

    存储过程修改为:

    create or replace procedure p1 is
    var1 varchar2(200);
    verrmsg varchar2(1000); --错误提示
    begin
     select 1 into var1 from dual;
     exception
     when no_data_found then
     verrmsg := 'no data found!';
     end p1;
    

    编译通过。
    可是,把里面的select 语句,换成 usrA.table_1 相关的,就又开始提示:表或视图不存在。
    见鬼了。
    后来,在文章:
    https://blog.csdn.net/liangyike/article/details/7534299

    http://www.itpub.net/thread-1580652-1-1.html
    知道,在
    usrA用户下执行:

    grant select on table_1 to usrB with grant option;
    

    然后,到usrB下重新编译存储过程,就通过了。

    陆科说,这是因为授权的传递问题。
    可是我还是没能明白。
    等过一阵子再来思考吧。

    展开全文
  • 一个oracle的存储过程中存在一条访问其它用户表的select语句,总是提示没有访问权限,在plsql以及测试下都能执行,但是封装成存储过程总提示没有访问权限。 解决如下: 1切换到创建其它用户下,执行: GRANT ...

    一个oracle的存储过程中存在一条访问其它用户表的select语句,总是提示没有访问权限,在plsql以及测试下都能执行,但是封装成存储过程总提示没有访问权限。

    解决如下:

    1切换到创建表的其它用户下,执行:

    GRANT SELECT ANY TABLE TO USER_A  WITH ADMIN OPTION;

    user_a是创建存储过程的那个用户,然后重新切换到当前用户,执行通过。

    2.第一种方式并不是最佳的方式,通过查资料。知道使用存储过程分两种权限:

    以研究一下steven的plsql程序设计,里面专门有一节讨论这个问题。

    先收回上面分配的权限: revoke select ANY TABLE from spmc;

    分配单个表的权限 GRANT select ON t_pub_instinfo TO spmc WITH GRANT OPTION;
    使用存储过程的时候分成两种权限:
    1.定义者权限
    2.调用者权限
    默认的情况下使用的是定义者权限。
    定义者权限要求所有权限是直接授权的,通过角色授权的无效。就好像完全定在了你调用的那个用户下了,你用角色授予的权限完全失效。
    而调用者权限就是为了解决定义者权限的一些局限设计的,它访问的是用户所具有的权限包括角色授权的权限。
    这种通过调用者权限和动态sql解决。

    Oracle规定,在默认的情况下,在调用存储过程用户的角色不起作用,即在执行存储过程时只有Public权限。所以在调用Create table时,会有权限不足的提示。

    存储过程分为两种,即DR(Definer’s Rights ) Procedure和IR(Invoker’s Rights ) Procedure。比如说用户sh创建了删除表mytable的存储过程drop_table(),当用户sh调用时,删除用户sh下的表 mytable;如果是另一个用户scott调用呢?是删除用户scott下的mytable表呢,还是删除用户sh的mytable呢?另外,如果存储 过程中包含建表语句,不管是用户sh还是用户scott调用都会失败,因为Public没有建表权限,除非为Public grant建表权限。所以,存储过程的调用者会面临两个问题:

    存储过程的名称解析环境
    存储过程的执行权限
    这两个问题可以在定义存储过程时,通过指定AUTHID 属性,即定义DR Procedure 和IR Procedure来解决。
    DR Procedure

    1、定 义
    CREATE OR REPLACE procedure DEMO(ID in NUMBER) AUTHID DEFINER as

    BEGIN

    END DEMO;
    2、名称解析环境为定义该存储过程的用户所在的Schema。
    3、执行该存储过程时只有Public权限。

    IR Procedure
    1、定 义

    CREATE OR REPLACE procedure DEMO(ID in NUMBER) AUTHID CURRENT_USER as

    BEGIN

    END DEMO;
    2、名称解析环境为调用该存储过程的用户所在的Schema。
    3、执行该存储过程时拥有调用者的所有权限,即调用者的Role是有效的。
    因此楼主的问题只需要使用IR Procedure就能解决

    create procedure   xxx AUTHID CURRENT_USER
    as
    begin
    INSERT INTO  TABLE1 SELECT * FROM USER_B.TABLE1;
    EXECUTE IMMEDIATE   ’ INSERT INTO  TABLE1 SELECT * FROM USER_B.TABLE1′;
    end;

    可以通过   SELECT * FROM SYS.USER_TAB_PRIVS;
    查询出当前用户“额外”赋予的权限;

    展开全文
  •  问题: 两个用户 USER_A,USER_B,赋予了DBA权限;其他权限未选; 两个用户都有N多张一模一样的表名,如STUDENT;...但是就是不能写存储过程: CREATE PROCEDURE XXX AS BEGIN  SELECT * FRO
    

    问题:
    两个用户 USER_A,USER_B,赋予了DBA权限;其他权限未选;
    两个用户都有N多张一模一样的表名,如STUDENT;
    于是在USER_A为当前用户的情况下:

    执行:SELECT * FROM USER_B.STUDENT   没问题;
    但是就是不能写存储过程:
    CREATE PROCEDURE   XXX
    AS
    BEGIN
        SELECT * FROM USER_B.STUDENT   ; 
    END;
    错误:ORA-00942: 表或视图不存在


    解决方案:
    在用户USER_B下运行下面语句:
    GRANT SELECT ANY TABLE TO USER_A  WITH ADMIN OPTION;

    原因:
    使用存储过程的时候分成两种权限:
    1.定义者权限
    2.调用者权限
    默认的情况下使用的是定义者权限。
    定义者权限要求所有权限是直接授权的,通过角色授权的无效。就好像完全定在了你调用的那个用户下了,你用角色授予的权限完全失效。
    而调用者权限就是为了解决定义者权限的一些局限设计的,它访问的是用户所具有的权限包括角色授权的权限。

    展开全文
  • 9i中,需要GRANT SELECT ANY TABLE 权限即可。 

    9i中,需要GRANT SELECT ANY TABLE 权限即可。

     

    展开全文
  • 今天写了一个存储过程,需要通过dblink把其他用户下面的的数据增量copy到目标中,结果访问其他系统的的时候,在存储过程中一直有问题,在Stack Overflow中找到了答案。 In st...
  • oracle 存储过程 访问其它用户

    千次阅读 2009-10-19 12:13:00
    在oracle 的存储过程中,如果用 用户名.表名 访问其它用户表,在编译的时候会报错,找不到用户表.解决这个问题,就是必须显式的赋予该用户对该操作权限.如:grant select on table1 to user;
  • 用户user2想在存储过程中查询用户User1的table1, 在PL/SQL中用user1登陆,执行以下语句即可: grant select on User1.table1 to user2; 转载于:https://www.cnblogs.com/flyrain/p/oracle_grant.html...
  • oralce存储过程包跨用户访问表的实战方案,本人亲测~~~
  • 今天遇到一个很奇怪的问题,有两个用户hbibillms和hbibilldata,都是dba角色权限,我现在在hbibillms用户下建立了一个存储过程访问到hbibilldata用户下的: create or replace procedure test2 is begin --p_...
  • Oralce存储过程包跨用户访问表

    千次阅读 2010-11-13 20:52:00
     今天做数据转储,写Oracle存储过程的时候发现存储过程不能直接访问另一用户,报表不存在的提示,而在sql查询中可以访问另一用户表,原因是权限的问题,用另一用户登录数据库,执行: <br />grant ...
  • 存储过程用户 在某个角色中,而用户时授权予角色的。. 在过程里,所有通过角色继承下来的权限是全部失效的。 1 直接授权与用户 2 使用匿名过程
  • 在Oracle中,在USERA下编写一个存储过程,该存储过程中引用了另一个用户USERB下的或视图对象。编译该存储过程,出现编译错误。报ORA-00942: table or view does not exist。 但是该或视图的确在USERB下存在,...
  • 存储过程不能访问表

    2012-10-25 11:05:10
    前提环境,A用户访问B用户下的C C 在 A 下能查询,但是存储过程A.XX不能访问C(A 下建了C的同义词) 原因: 需要对表显示赋权
  • oracle存储过程中调用其他用户

    千次阅读 2011-10-10 12:30:17
    存储过程中可以采用user.table方式对其他用户进行调用, 但是必须赋予调用方被访问表的权限, 即使是dba,也就是其他用户必须授予dba相应的对象权限。 查看系统权限、对象权限相关的信息的视图:dba_sys_privs,...
  • SQL 为其他用户授权访问存储过程

    千次阅读 2014-06-07 20:20:14
    grant exec on procname(存储过程名称)  to username(用户名) ---授予用户可以执行存储过程的权力 execute = exec 前面是完整写法 后面是简写
  • 我google了一下,结果发现,如果要当前用户下的存储过程需要调用其它用户下的时,需要再次进行显示的授权。 于是,登录到dba用户下,进行将该的查询权限授予对应用户的操作。再次编译存储过程,显示成功。...
  • 如果多个用户访问的话就会造成数据的出现问题(比如存储过程使用一张中间做数据存储,会用到删除更新,如果第一个用户正在更新的时候,第二个用户删除数据,那么第一个用户的数据就会丢失)。曾经看到有用控制板来...
  • 在网上找到资料后才发现,原来是我同时执行的计划任务中时,第一个访问表的时候已经把此关闭了,第二个也去访问,这时出现如此的错误,所以后来想到计划任务中的步骤,第一步骤执行一个存储过程,设置成功或失败都...
  • Sql Server中限定用户只能访问指定的储存过程 有一个客运售票系统,除了自己车站售票外,还允许外面单位通过internet或专线等连接进行代理售票,为此,我们新建了几个必要的储存过程,作为接口,供对方开发代售软件...
  • Oracle存储过程访问同义词

    千次阅读 2011-08-09 11:07:58
    创建一个同义词后,用sql可以访问,也可以修改数据,但是在存储过程中用到这个同义词时,报"或视图不存在"的错误,上网查了下,原来要"在存储过程访问公共同义词,必须直接对用户授权,而不能通过角色授权"。...
  • 要说明客户端访问/操作hbase,先简要说明hbase存储结构。 Hbase最初有一个,则一个对应一个region,随着增大,一个region会分为多个region,即一个对应了多个region。Region是hbase存储的最小单位,...
  • 案例: a用户需要访问b用户的t1 直接在sql窗口下select * from b.t1;是可以查询的
  • SQL 用户权限(、函数、存储过程等)第5章 安全与权限数 据 库 管 理 权 限对数据的访问是通过SQL Server 2008的权限层次结构进行管理的。可以通过GRANT、DENY和REVOKE语句来管理这个权限层次结构。●GRANT:允许...
  • MYSQL修改存储过程访问权限

    千次阅读 2018-06-02 14:10:03
    查询所有存储过程的权限 select db,name,type,definer from mysql.proc where type='PROCEDURE';...db:数据库名称name:存储过程名称type:查询类型,PROCEDURE等查询的是存储过程definer:存储过程权限,%代表所有用户...
  • 存储过程中调用的那个t是另一个用户b的。但是当前用户a已经拥有dba角色了,为什么访问不到用户b的t呢?另一同事说,只要给用户a分配操作用户b的t的权限就可以了。他的解释是用户即便拥有dba的角色也不一定能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 770,500
精华内容 308,200
关键字:

存储过程访问其他用户表