我是靠谱客的博主 朴素犀牛,最近开发中收集的这篇文章主要介绍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数据库建立只读账户的全部内容,希望文章能够帮你解决Oracle数据库建立只读账户所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部