概述
这两天遇到了一个新的需求是从应用系统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数据库建立只读账户的全部内容,希望文章能够帮你解决Oracle数据库建立只读账户所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复