Oracle数据库建立只读账户

        这两天遇到了一个新的需求是从应用系统A访问应用系统B的数据库,供开发人员在系统A实现一个小功能完成某些数据的跨系统比对。目前系统B的数据库中只有权限很高的DBA用户,并且已经肩负着与系统C的数据同步任务,因此,从安全和性能两个监督考虑,都有必要专门建立一个只读用户供系统A使用。参考网上的资料,自己进行了实践。

dba_b是系统B的DBA用户,reader_a是要建立的只读用户,SQL>表示在sql plus中执行

/** 创建新用户 **/

SQL>create user reader_a identified by readerpwd;

/** 赋予连接权限 **/

SQL>grant connect to reader_a;

SQL>grant create session to reader_a;

SQL>grant create synonym to reader_a;

/** 赋予读表权限 **/

/** 对于dba_b下单张表读取,一句就足够 **/

SQL>grant select on dba_b.tablename to reader_a;

/** 对于dba_b下多张表读取,可以先用select转换批量执行语句,再将结果粘贴到SQL Plus执行。 **/
SQL>select 'grant select on '||owner||'.'||object_name||' to reader_a;'
from dba_objects
where owner in ('DBA_B') --一定要大写
and object_type='TABLE';

/** 如果再省事的话,直接赋予对所有表的读权限 **/

SQL>grant select any table to reader_a;

现在,就可以用新用户登录数据库,并且查询表了,但是查询dba_b下的表,总是要用dba_b.tablename才行,比较麻烦,所以还可以再做一步同义词,就可以把dba_b省去了。

/** 创建同义词 **/

/** 对于dba_b下单张表读取,一句就足够 **/

SQL>create or replace SYNONYM reader_a.tablename FOR dba_b.tablename;
 
/** 对于dba_b下多张表读取,可以用selece转换批量执行语句,再将结果粘贴到SQL Plus执行。 **/
SQL>SELECT 'create or replace SYNONYM  reader_a.'||object_name||' FOR '||owner||'.'||object_name||';'  from dba_objects 
where owner in ('DBA_B')  --一定要大写
and object_type='TABLE';

SQL>select * from tablename测试,返回结果,完成任务。

你可能感兴趣的:(ORACLE)