1. 引言:
本文承接上篇继续深入介绍Oracle DB link,主要介绍如何配置DB link的连接及确保连接的安全。
2. 创建 DB Link 时配置连接参数
1. 配置连接参数
1. 使用 TNSNAMES.ORA 文件配置连接参数(常用方式)
- TNSNAMES.ORA 文件位置和作用
在 Oracle 数据库环境中,TNSNAMES.ORA 文件通常位于Oracle家目录下,即ORACLE_HOME/network/admin
(windows操作系统下ORACLE_HOME 对应的是安装目录)。这个文件用于存储数据库服务名(也称为 TNS 别名)及其对应的连接参数。 - 配置内容格式
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是远程数据库的服务名。
- 演示
假设远程数据库服务器的 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(轻量级目录访问协议)配置连接参数(企业级环境会用到)
- LDAP 简介和优势
LDAP 是一种用于存储和检索目录信息的协议。在大型企业环境中,使用 LDAP 来存储数据库连接信息可以方便集中管理和维护。它可以提供更好的安全性和可扩展性,因为可以通过 LDAP 服务器的权限管理机制来控制对连接参数的访问。 - 配置步骤
–首先,需要在 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_link
CONNECT TO remote_user IDENTIFIED BY remote_password
USING '(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. 用户认证与权限管理
- 用户认证方式
用户名和密码认证:这是最常见的方式。在创建 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 能够识别操作系统用户身份来进行数据库连接。这种方式相对复杂,并且安全性依赖于操作系统的安全机制。 - 权限管理
本地权限管理:对于本地数据库中的 DB Link,权限控制可以通过 GRANT 和 REVOKE 语句来实现。如果是私有 DB Link,只有创建者能够访问,但是可以使用GRANT ALL ON DATABASE LINK my_private_link TO another_user;语句将访问权限授予其他用户。对于公共 DB Link,所有用户都可以访问,需要谨慎配置权限,防止未授权的访问。
远程权限管理:在远程数据库中,需要确保用于连接的用户(在CONNECT TO语句中指定的用户)具有合适的权限来执行所需的操作,如查询、插入、更新和删除等。可以在远程数据库的用户管理模块中设置用户的角色和权限,比如将用户添加到具有特定权限的角色组中,或者直接为用户授予对表、视图等对象的操作权限。
2. 网络安全配置
- 加密连接(使用 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子句中指定的)对应的连接是经过加密配置的。 - 防火墙和访问控制列表(ACL)
防火墙设置:在企业网络环境中,防火墙可以限制对远程数据库服务器的访问。需要在防火墙上开放 Oracle 数据库使用的端口(通常是 1521,但可能因配置而异),并且可以根据源 IP 地址(本地数据库服务器的 IP 地址)和目标 IP 地址(远程数据库服务器的 IP 地址)来配置访问规则。例如,只允许来自特定 IP 网段的数据库服务器建立连接。
访问控制列表(ACL):在 Oracle 数据库内部,可以使用 ACL 来控制对网络资源的访问。可以创建一个 ACL 来指定哪些用户或角色可以通过 DB Link 访问远程数据库,以及可以访问的远程数据库服务名等内容。例如,通过 DBMS_NETWORK_ACL_ADMIN 包来创建和管理 ACL。以下是一个简单的示例,创建一个 ACL 允许用户local_user通过 DB Link 访问远程服务:
BEGIN
DBMS_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. 安全审计与监控
- 审计设置
在 Oracle 数据库中,可以启用审计功能来记录与 DB Link 相关的操作。通过设置审计选项,如审计 DB Link 的创建、使用、删除等操作,可以跟踪用户对 DB Link 的访问行为。在初始化参数文件(如 init.ora 或 spfile)中,可以设置AUDIT_TRAIL参数来指定审计记录的存储位置和方式,例如AUDIT_TRAIL = DB(将审计记录存储在数据库内部的审计表中)。 - 监控工具和指标
动态性能视图:可以使用 Oracle 的动态性能视图来监控 DB Link 的使用情况。例如,V$DBLINK视图可以显示当前打开的 DB Link 的信息,包括 DB Link 名称、连接状态、用户名等。通过定期查询这些视图,可以发现异常的 DB Link 活动,如频繁的连接失败或者长时间未关闭的连接。
企业管理器(OEM):如果部署了 Oracle 企业管理器,可以使用它来监控 DB Link 的性能和安全性。OEM 提供了图形化的界面,可以方便地查看 DB Link 的状态、配置信息,以及相关的审计记录。并且可以设置警报,当出现与 DB Link 相关的安全事件或者性能问题时,及时通知管理员。
未完待续