加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle——将指定用户下所有表的查询权限赋权给查询用户

发布时间:2020-12-12 15:59:16 所属栏目:百科 来源:网络整理
导读:oracle的开发和管理往往都是分开的,当然不否认这种"集万千宠爱于一身"的人才也大有人在,但是在公司,往往开发人员兼顾程序和数据库的设计与开发,而oracle dba则是负责oracle的安全与维护。那么这就出现了一个问题,权限问题,不是所有人都可以有dba权限的

oracle的开发和管理往往都是分开的,当然不否认这种"集万千宠爱于一身"的人才也大有人在,但是在公司,往往开发人员兼顾程序和数据库的设计与开发,而oracle dba则是负责oracle的安全与维护。那么这就出现了一个问题,权限问题,不是所有人都可以有dba权限的,这样很容易造成不安全的隐患。所以要合理的分配用户和权限。以下举例说明:

一、创建了一个查询用户rptuser,该用户具有scott(根据公司具体要求替换用户)用户下所有表的查询权限。 注意:如果只是把scott用户下emp表的select权限赋权给rptuser,那么很简单,直接在dba用户下执行grant select on scott.emp to rptuser;即可,那是因为仅此一条语句,所以可以直接赋权,若是要求将一个具有几千几万张表的用户(此时若不是scott用户只有9张表)下的所有表赋权给一个查询用户,那岂不是悲剧了? 稍安勿躁,下面有请"绝招"上场,大家鼓掌欢迎~~吼吼 二、两种方式:此处我采用方法二列举过程 1.select 'grant select on '|| tname ||' to rptuser;' from tab; (当前用户有dba权限如system或者sysdba,执行输出脚本) 2.select 'grant select on user.' || tname || ' to rptuser;' from tab; (当前用户无dba权限也就是scott用户,用system或者sysdba用户执行输出脚本) 输出内容为:

  1. grantselectonDEPTto rptuser;
  2. grantselectonEMPto rptuser;
  3. grantselectonBONUSto rptuser;
  4. grantselectonSALGRADEto rptuser ;
  5. grantselectonAVGSALto rptuser;
  6. grantselectonBOOKto rptuser;
  7. grantselectonTEST_INDEXto rptuser;
  8. grantselectonTB_EMPLOYEESto rptuser;

三、直接复制此内容使用system用户执行即可,这里我使用的是oracle的客户端Toad for oracle,执行结果如下:

赋权执行成功。 四、再用具有dba权限的用户给rptuser用户赋予建同义词的权限 grant create synonym to rptuser; 五、再在scott用户下执行 select 'create synonym ' || tname || ' for scott.' || tname || ';' from tab; 或者 select 'create synonym '|| table_name || ' for scott.' || table_name || ';' from user_tables; 输出脚本内容为:
 
 
  1. createsynonymDEPTforscott.DEPT;
  2. createsynonymEMPforscott.EMP;
  3. createsynonymBONUSforscott.BONUS;
  4. createsynonymSALGRADEforscott.SALGRADE;
  5. createsynonymBOOKforscott.BOOK;
  6. createsynonymTB_EMPLOYEESforscott.TB_EMPLOYEES;
  7. createsynonymTEST_INDEXforscott.TEST_INDEX;
六、最后将这个脚本内容用rptuser查询用户执行,完成 七、用rptuser用户查询scott用户下的表,即无需from scott.tablename了,可以直接查询了
  • SQL> show user;
  • USER is "RPTUSER"
  • SQL>select*fromdept;
  • DEPTNODNAMELOC
  • -------------------------------------
  • 10ACCOUNTINGNEWYORK
  • 20RESEARCHDALLAS
  • 30SALESCHICAGO
  • 40OPERATIONSBOSTON
  • 总结:这种办法的好处就是可以使dba简化繁琐的工作,若是一张一张表的赋权,那么要是遇到一个用户几千张,不,估计几十张,你就得疯了,所以采用此方法。 举一反三:如果赋权给查询用户sequence的查询权限也是一样,我想大家都看得明白了,仅给出语句,过程就不写了,呵呵。
    select 'grant select on ' || sequence_name || ' to itreport;' from dba_sequences where sequence_owner= 'USER_NAME'; 注意两点:1.此处应该用具有dba权限的用户执行此语句 2.红色部分USER_NAME为具体用户名 其他过程如上所述,此处省略十分钟的口水。。。。

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读