图文深入介绍Oracle DB link(二)

1. 引言:

本文承接上篇继续深入介绍Oracle DB link,主要介绍如何配置DB link的连接及确保连接的安全。

2. 创建 DB Link 时配置连接参数

1. 配置连接参数

1. 使用 TNSNAMES.ORA 文件配置连接参数(常用方式)
  1. TNSNAMES.ORA 文件位置和作用
    在 Oracle 数据库环境中,TNSNAMES.ORA 文件通常位于Oracle家目录下,即ORACLE_HOME/network/admin
    (windows操作系统下ORACLE_HOME 对应的是安装目录)。这个文件用于存储数据库服务名(也称为 TNS 别名)及其对应的连接参数。
  2. 配置内容格式
    TNSNAMES.ORA 文件中的条目格式如下:
    R
EMOTE_DB_SERVICE =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = remote_host_ip)(PORT = remote_port))CONNECT_DATA =(SERVICE_NAME = remote_service_name)))

其中,REMOTE_DB_SERVICE是自定义的 TNS 别名,用于在创建 DB Link 时引用。PROTOCOL通常是 TCP 协议,HOST是远程数据库服务器的 IP 地址,PORT是远程数据库监听的端口号(默认是 1521,但可以修改),SERVICE_NAME是远程数据库的服务名。

  1. 演示
    假设远程数据库服务器的 IP 地址是 192.168.1.100,端口是 1521,服务名是 ORCL,那么在 TNSNAMES.ORA 文件中的配置如下:
   MY_REMOTE_DB =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))CONNECT_DATA =(SERVICE_NAME = ORCL)))

在创建 DB Link 时,就可以在USING子句中使用这个 TNS 别名,如:

CREATE DATABASE LINK my_link CONNECT TO remote_user IDENTIFIED BY remote_password USING 'MY_REMOTE_DB';
2. 使用 LDAP(轻量级目录访问协议)配置连接参数(企业级环境会用到)
  1. LDAP 简介和优势
    LDAP 是一种用于存储和检索目录信息的协议。在大型企业环境中,使用 LDAP 来存储数据库连接信息可以方便集中管理和维护。它可以提供更好的安全性和可扩展性,因为可以通过 LDAP 服务器的权限管理机制来控制对连接参数的访问。
  2. 配置步骤
    –首先,需要在 LDAP 服务器中配置数据库连接信息条目。涉及到定义对象类(Object Class)和属性(Attribute)来存储数据库服务名、主机地址、端口号、服务名等信息。
    –例如,创建一个类似 “oracleDBConnection” 的对象类,其中包含 “host”、“port”、“serviceName” 等属性。然后,将各个数据库的连接信息作为一个条目存储在 LDAP 目录树中。
    –在 Oracle 数据库端,需要配置数据库能够通过 LDAP 来解析服务名。这需要修改 Oracle 的网络配置文件(如 sqlnet.ora),指定 LDAP 服务器的位置和认证信息等内容。
    例如,在 sqlnet.ora 文件中添加如下内容:
   NAMES.DIRECTORY_PATH=(LDAP, TNSNAMES)LDAP. SERVERS = (ldap_server_ip:ldap_port)LDAP. AUTHENTICATE_SERVER = TRUE

–之后,在创建 DB Link 时,就可以像使用 TNSNAMES.ORA 中的服务名一样使用在 LDAP 中配置的服务名,如:

CREATE DATABASE LINK ldap_link CONNECT TO remote_user IDENTIFIED BY remote_password USING 'LDAP_DB_SERVICE';

(其中LDAP_DB_SERVICE是在 LDAP 服务器中配置的服务名)。

3. 直接指定连接参数(这个实际应用中我个人并不不推荐,因为灵活性和维护性较差)

在创建 DB Link 时,可以直接在USING子句中指定连接参数,而不使用 TNSNAMES.ORA 文件或 LDAP 配置。语法如下:

 CREATE DATABASE LINK my_direct_linkCONNECT TO remote_user IDENTIFIED BY remote_passwordUSING '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = remote_host_ip)(PORT = remote_port)))CONNECT_DATA =(SERVICE_NAME = remote_service_name))';

这里的参数含义与在 TNSNAMES.ORA 文件中配置的相同,remote_host_ip是远程数据库服务器的 IP 地址,remote_port是端口号,remote_service_name是服务名。
注意:这种方式将连接参数硬编码在创建 DB Link 的语句中,不利于维护。如果远程数据库的连接参数发生变化,如 IP 地址或端口号改变,就需要修改所有使用该直接指定参数方式创建的 DB Link 语句,而使用 TNSNAMES.ORA 或 LDAP 配置则只需要修改一处配置即可。

3. 配置安全参数

1. 用户认证与权限管理

  1. 用户认证方式
    用户名和密码认证:这是最常见的方式。在创建 DB Link 时,通过CONNECT TO user IDENTIFIED BY password指定用于连接远程数据库的用户名和密码。例如,CREATE DATABASE LINK my_link CONNECT TO remote_user IDENTIFIED BY remote_password USING ‘tns_alias’;。需要确保所使用的用户名和密码具有足够的权限来访问远程数据库中的对象,并且要妥善保管密码,避免泄露。
    操作系统认证(使用较少):在某些特定的环境下,可以配置基于操作系统的认证方式。这要求本地和远程数据库所在的操作系统环境进行相应的配置,使得 Oracle 能够识别操作系统用户身份来进行数据库连接。这种方式相对复杂,并且安全性依赖于操作系统的安全机制。
  2. 权限管理
    本地权限管理:对于本地数据库中的 DB Link,权限控制可以通过 GRANT 和 REVOKE 语句来实现。如果是私有 DB Link,只有创建者能够访问,但是可以使用GRANT ALL ON DATABASE LINK my_private_link TO another_user;语句将访问权限授予其他用户。对于公共 DB Link,所有用户都可以访问,需要谨慎配置权限,防止未授权的访问。
    远程权限管理:在远程数据库中,需要确保用于连接的用户(在CONNECT TO语句中指定的用户)具有合适的权限来执行所需的操作,如查询、插入、更新和删除等。可以在远程数据库的用户管理模块中设置用户的角色和权限,比如将用户添加到具有特定权限的角色组中,或者直接为用户授予对表、视图等对象的操作权限。

2. 网络安全配置

  1. 加密连接(使用 SSL/TLS)
    配置服务器端:在远程数据库服务器端,需要配置 Oracle Net Services 以支持 SSL/TLS 加密。这涉及到生成证书、配置密钥库等操作。例如,在 Oracle 12c 及以上版本中,可以使用 Oracle Wallet Manager 来创建和管理钱包(包含证书和私钥)。配置文件(如 sqlnet.ora)需要添加相关参数,如SSL_VERSION = TLSv1.2(指定加密协议版本),WALLET_LOCATION(指定钱包位置)等。
    配置客户端(本地数据库):在本地数据库所在的客户端机器上,同样需要配置 sqlnet.ora 文件来启用 SSL/TLS 加密连接。需要指定与服务器端相同的加密协议版本,并且要正确配置钱包位置,使得客户端能够使用证书来建立加密连接。在创建 DB Link 时,确保使用的 TNS 别名(在USING子句中指定的)对应的连接是经过加密配置的。
  2. 防火墙和访问控制列表(ACL)
    防火墙设置:在企业网络环境中,防火墙可以限制对远程数据库服务器的访问。需要在防火墙上开放 Oracle 数据库使用的端口(通常是 1521,但可能因配置而异),并且可以根据源 IP 地址(本地数据库服务器的 IP 地址)和目标 IP 地址(远程数据库服务器的 IP 地址)来配置访问规则。例如,只允许来自特定 IP 网段的数据库服务器建立连接。
    访问控制列表(ACL):在 Oracle 数据库内部,可以使用 ACL 来控制对网络资源的访问。可以创建一个 ACL 来指定哪些用户或角色可以通过 DB Link 访问远程数据库,以及可以访问的远程数据库服务名等内容。例如,通过 DBMS_NETWORK_ACL_ADMIN 包来创建和管理 ACL。以下是一个简单的示例,创建一个 ACL 允许用户local_user通过 DB Link 访问远程服务:
BEGINDBMS_NETWORK_ACL_ADMIN.CREATE_ACL (acl         => 'my_acl.xml',description => 'ACL for DB Link access',principal   => 'local_user',is_grant    => TRUE,privilege   => 'connect');DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (acl  => 'my_acl.xml',host => 'remote_host');END;

3. 安全审计与监控

  1. 审计设置
    在 Oracle 数据库中,可以启用审计功能来记录与 DB Link 相关的操作。通过设置审计选项,如审计 DB Link 的创建、使用、删除等操作,可以跟踪用户对 DB Link 的访问行为。在初始化参数文件(如 init.ora 或 spfile)中,可以设置AUDIT_TRAIL参数来指定审计记录的存储位置和方式,例如AUDIT_TRAIL = DB(将审计记录存储在数据库内部的审计表中)。
  2. 监控工具和指标
    动态性能视图:可以使用 Oracle 的动态性能视图来监控 DB Link 的使用情况。例如,V$DBLINK视图可以显示当前打开的 DB Link 的信息,包括 DB Link 名称、连接状态、用户名等。通过定期查询这些视图,可以发现异常的 DB Link 活动,如频繁的连接失败或者长时间未关闭的连接。
    企业管理器(OEM):如果部署了 Oracle 企业管理器,可以使用它来监控 DB Link 的性能和安全性。OEM 提供了图形化的界面,可以方便地查看 DB Link 的状态、配置信息,以及相关的审计记录。并且可以设置警报,当出现与 DB Link 相关的安全事件或者性能问题时,及时通知管理员。

未完待续

码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,后续不定期分享DB基本知识和排障案例及经验、性能调优等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/59222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据揭秘:掌握K-means聚类算法的精髓与实践

数据揭秘:掌握K-means聚类算法的精髓与实践 在机器学习领域,聚类是一种探索性的数据挖掘技术,用于将数据集中的样本划分成若干个簇,使得同一簇内的样本相似度高,而不同簇之间的样本相似度低。本文将深入探讨聚类分析的…

ADNI蛋白质数据集下载

(我发现这个网站最近又更新了界面,现在变得很好看很简洁,但是有一些入口变了) 1.官网链接 https://ida.loni.usc.edu/home/projectPage.jsp?projectADNI 2.登录 选择ADNI(其实PPMI数据也是这样下的)&a…

【数据分享】2024年我国省市县三级的生活服务设施数量(46类设施/Excel/Shp格式)

人才市场、售票处、旅行社等生活服务设施的配置情况是一个城市公共基础设施完善程度的重要体现,一个城市生活服务设施种类越丰富,数量越多,通常能表示这个城市的公共服务水平越高! 本次我们为大家带来的是我国各省份、各地级市、…

彻底解决idea不识别java项目

需求背景 下载了一个java swing的项目,通过idea导入后,项目无法识别。打开java文件,也不会报错,也不编译。 无法识别效果图 可以看到左侧的菜单,项目是没有被识别。 打开java文件,可以看到没有识别,java的图标也没有出现。 解决方法 1、打开Project Structure 2、修改…

【力扣 + 牛客 | SQL题 | 每日5题】牛客SQL热题216,217,223

也在牛客力扣写了一百来题了,个人感觉力扣的SQL题要比牛客的高三档的难度。(普遍来说) 1. 牛客SQL热题216:统计各个部门的工资记录数 1.1 题目: 描述 有一个部门表departments简况如下: dept_nodept_named001Marke…

跨平台开发对于不同平台调用接口的抽象层设计

我已经受够无处不在的分支语句了! 长痛不如短痛,趁现在的底层交互代码还没有这么多,赶紧重构吧。毕竟不是 demo 时期了,要讲究一些了 设计思路 刚开始的想法是整一个抽象类 AbstractAPIs 声明所有待实现的函数,然后让…

HTMLCSS:打造酷炫下载安装模拟按钮

效果演示 这段代码通过HTML和CSS创建了一个具有交互效果的下载按钮&#xff0c;当复选框被选中时&#xff0c;会触发一系列动画和样式变化&#xff0c;模拟了一个下载和安装的过程&#xff0c;包括圆形的动画、文本的显示和隐藏等。 HTML <div class"container&quo…

Multi Agents协作机制设计及实践

01 多智能体协作机制的背景概述 在前述博客中&#xff0c;我们利用LangChain、AutoGen等开发框架构建了一个数据多智能体的平台&#xff0c;并使用了LangChain的Multi-Agents框架。然而&#xff0c;在实施过程中&#xff0c;我们发现现有的框架存在一些局限性&#xff0c;这些…

ML2001-1 机器学习/深度学习 Introduction of Machine / Deep Learning

图片说明来自李宏毅老师视频的学习笔记&#xff0c;如有侵权&#xff0c;请通知下架 影片参考 【李宏毅】3.第一节 - (上) - 机器学习基本概念简介_哔哩哔哩_bilibili 1. 机器学习的概念与任务类型 概念&#xff1a;机器学习近似于寻找函数&#xff0c;用于处理不同类型的任…

90%会展主办方都会用的6款数字化工具

在会展行业&#xff0c;数字化转型已成为提升竞争力的关键。面对日益增长的运营成本和收入增长的瓶颈&#xff0c;主办方需要借助数字化工具来实现效率提升和成本控制。 今天介绍几种常见的数字化工具和应用方式。 一、线上展览平台 构建线上展览平台是会展主办方拓展线上销…

技术速递|GitHub Copilot upgrade assistant for Java 技术预览发布!

作者&#xff1a;Nick Zhu - Senior Program Manager 排版&#xff1a;Alan Wang 随着人工智能和大型语言模型&#xff08;LLMs&#xff09;的不断发展&#xff0c;Agent&#xff08;“智能代理”&#xff09;和智能代理化工作流程正在迅速成为AI领域的下一个前沿。这些自主系统…

Python常用脚本集锦

收集了一些常用Python脚本&#xff0c;作为平时练手使用&#xff0c;也可以作为自己的笔记&#xff0c;用到哪个功能可以自己查询一下即可。 文件和目录管理 复制文件 import shutil# 复制源文件到目标文件 shutil.copy(source.txt, destination.txt)移动文件 import shuti…

redis源码系列--(二)--multi/exec/eval命令执行流程

本文主要记录multi/exec、eval、redis执行lua脚本的源码流程 redis在exec之前&#xff0c;所有queued的命令是没有执行的&#xff0c;&#xff01;&#xff01;&#xff01;在执行时会通过检测client是否被打上CLIENT_DIRTY_CAS标记来判断[watch后,exec时]时间段内是否有key被…

什么是安全威胁情报?

SANS的定义 针对安全威胁、威胁者、利用、恶意软件、漏洞和危害指标、所收集的用于评估的应用数据集。 iSight的定义 iSight&#xff1a;网络威胁情报是关于已收集、分析、分发的&#xff0c;针对攻击者和其动机的目的手段&#xff0c;用于帮助所有安全级别的&#xff0c;和…

JMeter快速造数之数据导入导出

导入数据 输入表格格式如下 创建CSV Data Set Config 在Body Data中调用 { "username": "${email}", "password": "123456", "client_id": "00bb9dbfc67439a5d42e0e19f448c7de310df4c7fcde6feb5bd95c6fac5a5afc"…

渗透测试-快速获取目标中存在的漏洞(小白版)

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 《Web安全》h…

[免费]基于Python的Django+Vue3在线考试系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的基于Python的DjangoVue3在线考试系统&#xff0c;分享下哈。 项目视频演示 【免费】基于Python的DjangoVue3在线考试系统 Python毕业设计_哔哩哔哩_bilibili 项目介绍 本论文提出并实现了一种基于Python…

Unity3D学习FPS游戏(9)武器音效添加、创建敌人模型和血条

前言&#xff1a;虽然已经实现了基本玩家操作&#xff0c;但是游戏运行起来并没有音效。既然是FPS游戏有了玩家和武器&#xff0c;肯定还得有敌人。本篇演示如何给武器添加音效和创建敌人。 武器音效添加和创建敌人 武器音效添加Audio Source代码控制 创建敌人目标敌人模型敌人…

C 语言编程中的常见错误及解决方案

在 C 语言开发中&#xff0c;编译和链接错误是常见的问题&#xff0c;尤其是在处理多个源文件时。本文将总结一些常见的错误&#xff0c;并提供相应的解决方案&#xff0c;以帮助开发者更高效地排查和修复这些问题。 1. 结构体作用域问题 问题描述 在函数参数列表中定义结构体…

Kubernetes运行大数据组件-运行spark

在Kubernetes上运行Spark作业&#xff0c;你需要创建一个Spark的部署和相应的Kubernetes资源。以下是一个简化的例子&#xff0c;展示了如何使用Kubernetes部署Spark Driver和Executor。 首先&#xff0c;确保你有一个运行中的Kubernetes集群&#xff0c;并且kubectl 命令行工…