暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle 两个用户互相访问表的几种方式

在路上 2025-04-21
427

1.可以直接授权A用户下的表给B用户,但如果表多个就要执行多个授权操作

grant select any table to A; --这个授予A查询所有表的权限,权限过大

select 'GRANT SELECT ON '||table_name||' to B;' from ALL_TABLES a where a.OWNER='A';

grant select on A.XX to B; --逐个授权

grant all on A.XX to B;

2.创建同义词进行访问,需要登录要访问的用户,或者创建public(所有用户都可以访问)

create synonym xx for B.TABLENAME;

select 'CREATE SYNONYM '||table_name||' FOR A.'||table_name from dba_tables where owner = 'A';

drop synonym xx;

3.创建角色,用游标给角色授权,然后把角色授予给用户

1)创建角色

create role select_all_A;

create role select_all_B;

2)通过游标给角色授权

declare
  CURSOR a_tabname is select table_name from dba_tables where owner = 'A';
  v_tabname dba_tables.table_name%TYPE;
  sqlstr    VARCHAR2(200);   
begin
  open a_tabname;
  loop
    fetch a_tabname into v_tabname;
    exit when a_tabname%NOTFOUND;
    sqlstr := 'grant select on A.' || v_tabname ||' to select_all_A';
    execute immediate sqlstr;
  end loop;
  close a_tabname;
end;

3)角色授予用户

grant select_all_A to B;

4)查询角色的权限

select * from DBA_roles a where a.ROLE='SELECT_ALL_OSP_SSM';

select * from role_sys_privs a where a.ROLE='SELECT_ALL_OSP_SSM';

select * from ROLE_TAB_PRIVS a where a.ROLE='SELECT_ALL_OSP_YAM';

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论