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

如何在oracle中创建只读数据库链接

发布时间:2021-01-27 17:15:28 所属栏目:站长百科 来源:网络整理
导读:考虑以下场景…. 我有一个主用户MASTER. 我有一个测试用户TEST. 对于两个用户,表结构是相同的.两个用户都可以在不同的oracle服务器上. 然后我通过使用以下命令以test用户身份登录到sql plus来创建数据库链接作为master_link 创建数据库链接master_link通过密

考虑以下场景….

我有一个主用户MASTER.

我有一个测试用户TEST.

对于两个用户,表结构是相同的.两个用户都可以在不同的oracle服务器上.

然后我通过使用以下命令以test用户身份登录到sql plus来创建数据库链接作为master_link

创建数据库链接master_link通过密码使用连接到主机(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.9.139)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))

通过以测试用户身份登录并使用数据库链接名称,我可以修改主用户中的表.例如

update table1 @ master_link set display_title =’PONDS’;

此查询更新主用户的表table1.

我的要求是我想给予数据库链接(master_link)的只读权限,以便测试用户不能使用数据库链接修改或插入主用户的任何表.

解决方法

在MASTER架构所在的任何数据库上,您需要创建一个新用户(即MASTER_READ_ONLY).在所有MASTER表上授予MASTER_READ_ONLY用户SELECT访问权限(最有可能通过角色). (可选)在MASTER_READ_ONLY模式中创建公共同义词或私有同义词,以引用MASTER中的对象.然后,在创建数据库链接时,请使用MASTER_READ_ONLY帐户而不是MASTER帐户.

就像是

作为一名DBA

CREATE USER master_read_only
  IDENTIFIED BY password2;

GRANT create session,create synonym
   TO master_read_only;

CREATE ROLE master_ro_role;

GRANT master_ro_role
   TO master_read_only;

作为MASTER

BEGIN
  FOR x IN (SELECT * FROM user_tables)
  LOOP
    EXECUTE IMMEDIATE 
      'GRANT SELECT ON master.' || x.table_name || 
        ' TO master_ro_role';
  END LOOP;
END;

作为MASTER_READ_ONLY

BEGIN
  FOR x IN (SELECT * FROM all_tables WHERE owner='MASTER')
  LOOP
    EXECUTE IMMEDIATE 
      'CREATE SYNONYM ' || x.table_name || 
        ' FOR master.' || x.table_name;
  END LOOP;
END;

在已创建TEST用户的数据库上

CREATE DATABASE LINK master_link 
  CONNECT TO master_read_only 
  IDENTIFIED BY password2 
  USING (DESCRIPTION = 
          (ADDRESS_LIST = 
            (ADDRESS = 
              (PROTOCOL = TCP) 
              (HOST =192.168.9.139)
              (PORT = 1521))) 
            (CONNECT_DATA = (SERVICE_NAME = orcl)))

(编辑:东莞站长网)

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