注意:如果只是把scott用户下emp表的select权限赋权给rptuser,那么很简单,直接在dba用户下执行grant select on scott.emp to rptuser;即可,那是因为仅此一条语句,所以可以直接赋权,若是要求将一个具有几千几万张表的用户(此时若不是scott用户只有9张表)下的所有表赋权给一个查询用户,那岂不是悲剧了?
稍安勿躁,下面有请"绝招"上场,大家鼓掌欢迎~~吼吼
二、两种方式:此处我采用方法二列举过程
1.select 'grant select on '|| tname ||' to rptuser;' from tab;
2.select 'grant select on user.' || tname || ' to rptuser;' from tab;
- grantselectonDEPTto rptuser;
- grantselectonEMPto rptuser;
- grantselectonBONUSto rptuser;
- grantselectonSALGRADEto rptuser ;
- grantselectonAVGSALto rptuser;
- grantselectonBOOKto rptuser;
- grantselectonTEST_INDEXto rptuser;
- grantselectonTB_EMPLOYEESto 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;
- createsynonymDEPTforscott.DEPT;
- createsynonymEMPforscott.EMP;
- createsynonymBONUSforscott.BONUS;
- createsynonymSALGRADEforscott.SALGRADE;
- createsynonymBOOKforscott.BOOK;
- createsynonymTB_EMPLOYEESforscott.TB_EMPLOYEES;
- createsynonymTEST_INDEXforscott.TEST_INDEX;
举一反三:如果赋权给查询用户sequence的查询权限也是一样,我想大家都看得明白了,仅给出语句,过程就不写了,呵呵。
select 'grant select on ' || sequence_name || ' to itreport;' from dba_sequences where sequence_owner= 'USER_NAME';
select 'grant select on ' || sequence_name || ' to itreport;' from dba_sequences where sequence_owner= 'USER_NAME';
注意两点:1.此处应该用具有dba权限的用户执行此语句
2.红色部分USER_NAME为具体用户名
其他过程如上所述,此处省略十分钟的口水。。。。