汕头牛肉丸 2023-11-14 10:38 采纳率: 94.1%
浏览 13
已结题

oracle将用户权限授权给另一个用户

oracle
我想要把用户A授权给用户B,用户B可以有用户A的权限,不用每次查询用户A的表都要加前缀,都要一个个授权

  • 写回答

2条回答 默认 最新

  • 噼里啪啦啦 2023-11-14 11:43
    关注

    在Oracle数据库中,如果你想要让用户B能够访问用户A的所有表而不用每次都加上用户A的前缀,你可以通过创建一个同义词(synonym)来实现。同义词可以让用户B在查询时不需要指定用户A的前缀。

    首先,用户A需要将相应的权限授予用户B。然后,用户B可以创建同义词来引用用户A的表。这样做的一个缺点是需要为用户A的每个表都创建一个同义词,这在表数量众多时会比较繁琐。不过,可以通过编写一个PL/SQL脚本来自动化这一过程。

    以下是授权和创建同义词的步骤:

    1. 用户A授予权限给用户B。
    -- 用户A登录后执行
    GRANT SELECT, INSERT, UPDATE, DELETE ON table_name TO userB;
    
    

    重复上述操作,为用户B的每一个需要访问的表授予权限。

    1. 用户B创建同义词。
    -- 用户B登录后执行
    CREATE SYNONYM table_name FOR userA.table_name;
    
    

    重复上述步骤,为每一个需要访问的表创建同义词。

    如果你希望自动化这一过程,用户A可以创建一个PL/SQL程序,为用户B的每个表授予权限并创建同义词:

    DECLARE
      CURSOR user_tables IS
        SELECT table_name FROM all_tables WHERE owner = 'USERA';
    BEGIN
      FOR table_rec IN user_tables LOOP
        EXECUTE IMMEDIATE 'GRANT SELECT, INSERT, UPDATE, DELETE ON ' || 'USERA.' || table_rec.table_name || ' TO USERB';
        EXECUTE IMMEDIATE 'CREATE SYNONYM USERB.' || table_rec.table_name || ' FOR USERA.' || table_rec.table_name;
      END LOOP;
    END;
    /
    
    

    在实际应用中,你可能需要授予其他权限,并且需要考虑安全性和权限管理的最佳实践。此外,在实际执行这一过程之前,需要确保用户B具有创建同义词的权限。如果没有,用户A需要先授予这个权限:

    GRANT CREATE SYNONYM TO userB;
    
    

    请在生产环境中谨慎使用上述脚本。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月1日
  • 已采纳回答 11月23日
  • 创建了问题 11月14日

悬赏问题

  • ¥30 为什么会失败呢,该如何调整
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析