在 Oracle 中,用户可以通过 Oracle Wallet,配合sqlnet.ora文件实现无密码登录,以实现自动运行一些带有数据库操作的脚本的功能,而不在脚本中包含密码等敏感信息。但 Oracle Wallet 只包含在完整的 Oracle 数据库中,日常访问数据库所用的 Oracle Instant Client 并不包含该功能。在查阅资料和试验后发现,我们可以通过提取 Oracle 完整数据库压缩包中的相关文件,放在 Oracle Instant Client 目录下以运行该功能。以下是有关提取和配置操作的详细步骤。
注意:本文中以 Linux 系统、Oracle Database Enterprise Edition 21c 为例,使用 Windows 系统以及其他版本的 Oracle 数据库,在过程上大同小异。
下载并配置 Oracle Instant Client
-
到 Oracle 官网下载最新版本的 Oracle Instant Client 以及相关功能的 zip 压缩包。
-
Oracle Instant Client:instantclient-basiclite-linux.x64-21.13.0.0.0dbru.zip
-
SQLPlus Package:instantclient-sqlplus-linux.x64-21.13.0.0.0dbru.zip
-
Tools Package:instantclient-tools-linux.x64-21.13.0.0.0dbru.zip
-
JDBC Package:instantclient-jdbc-linux.x64-21.13.0.0.0dbru.zip
-
-
将它们解压并放置在同一目录下。
cp "instantclient-*" "/home/usr/lib/oracle" cd "/home/usr/lib/oracle" unzip "./instantclient-basiclite-linux.x64-21.13.0.0.0dbru.zip" unzip "./instantclient-sqlplus-linux.x64-21.13.0.0.0dbru.zip" unzip "./instantclient-tools-linux.x64-21.13.0.0.0dbru.zip" unzip "./instantclient-jdbc-linux.x64-21.13.0.0.0dbru.zip"
-
为该目录配置系统环境变量。
ORACLE_HOME="/home/usr/lib/oracle/instantclient" export "ORACLE_HOME" PATH="${ORACLE_HOME}":${PATH} export "PATH" LD_LIBRARY_PATH="${ORACLE_HOME}" export "LD_LIBRARY_PATH" TNS_ADMIN="${ORACLE_HOME}/network/admin" export "TNS_ADMIN" ORACLE_SID="HPDDTEST_EXEC" export "ORACLE_SID"
-
测试SQLPlus和SQLLdr是否配置成功。
sqlplus -v sqlldr -version
输出以下命令则表示配置成功。
SQL*Plus: Release 21.0.0.0.0 - Production Version 21.13.0.0.0
LRM-00101: unknown parameter name 'version' SQL*Loader: Release 21.0.0.0.0 - Production on Mon Jan 29 04:32:59 2024 Version 21.13.0.0.0 Copyright (c) 1982, 2024, Oracle and/or its affiliates. All rights reserved. SQL*Loader-100: Syntax error on command-line
下载解压 Java Runtime Environment (JRE) 并配置 Java 环境变量
-
到 Oracle 官网下载最新版本的 JRE 或 JDK 并解压。
cp "./jre-8u401-linux-x64.tar.gz" "/home/usr/lib/oracle" tar -zxvf "./jre-8u401-linux-x64.tar.gz"
-
为该目录配置系统环境变量。
JAVA_HOME="/home/usr/lib/oracle/jre/bin" export "JAVA_HOME" PATH="${JAVA_HOME}":${PATH} export "PATH"
-
测试 Java 环境是否配置成功。
java -version
输出以下命令则表示配置成功。
java version "1.8.0_401" Java(TM) SE Runtime Environment (build 1.8.0_401-b10) Java HotSpot(TM) 64-Bit Server VM (build 25.401-b10, mixed mode)
下载 Oracle 完整的数据库压缩包并提取 mkstore
功能的相关文件
-
访问Oracle官网中的【Oracle Database Software Downloads】页面,下载 Oracle 数据库 Linux 版本的 ZIP 压缩包。 LINUX.X64_213000_db_home.zip
-
将压缩包解压,按以下列表搜索并提取出文件,并整理成以下文件结构。
其中
mkstore
文件在压缩包的/bin
目录下,其他 jar 文件分散在剩余的文件夹里。不同版本的 Oracle,所需的文件略有不同,可参考mkstore
文件中对 jar 文件的检索过程以确定具体需要哪些文件。##################################### # 3. locate Jars ##################################### if [ -d "$TOOLROOT/oracle_common" ]; then MW_MOD=$TOOLROOT/oracle_common/modules PKILOC=${MW_MOD}/oracle.pki RSALOC=${MW_MOD}/oracle.rsa OSDTLOC=${MW_MOD}/oracle.osdt OJLIB=$TOOLROOT/jlib elif [ ! -z "$SRCHOME" ]; then PROD_DIST=$SRCHOME/entsec/dist PKILOC=$PROD_DIST/oracle.pki/modules/oracle.pki RSALOC=$PROD_DIST/oracle.rsa.crypto/modules/oracle.rsa OSDTLOC=$PROD_DIST/oracle.osdt.core/modules/oracle.osdt EMMA_JAR=$SRCHOME/ldap/test/lib/emma.jar elif [ ! -z "$ORACLE_HOME" -a -d "$ORACLE_HOME" ]; then OJLIB=$ORACLE_HOME/jlib PKILOC=$OJLIB RSALOC=$OJLIB OSDTLOC=$OJLIB else OJLIB=$TOOLHOME/jlib PKILOC=$OJLIB RSALOC=$OJLIB OSDTLOC=$OJLIB fi PKI=$PKILOC/oraclepki.jar RSA=$RSALOC/cryptoj.jar OSDT_CORE=$OSDTLOC/osdt_core.jar OSDT_CERT=$OSDTLOC/osdt_cert.jar
注意:压缩包中并不包含
mkstore
脚本中所需的emma.jar
文件。经实测,不提取此文件,脚本依然可以正常运行。 -
测试
mkstore
命令能否运行。mkstore
输出以下命令则表示配置成功。
Oracle Secret Store Tool Release 21.0.0.0.0 - Production Version 21.3.0.0.0 Copyright (c) 2004, 2021, Oracle and/or its affiliates. All rights reserved. mkstore [-wrl wrl] [-create] [-createSSO] [-createLSSO] [-createALO] [-delete] [-deleteSSO] [-list] [-createEntry alias secret] [-viewEntry alias] [-modifyEntry alias secret] [-deleteEntry alias] [-createCredential connect_string username password] [-listCredential] [-modifyCredential connect_string username password] [-deleteCredential connect_string] [-createUserCredential map key <username> password] [-modifyUserCredential map key username password] [-deleteUserCredential map key] [-help] [-nologo]
创建数据库连接配置文件 tnsnames.ora
到 Oracle Instant Client 存放目录下的 /network/admin
文件夹,或自己在环境变量中指定的 TNS_ADMIN
目录下创建数据库连接配置文件 tnsnames.ora
。
cd "/home/usr/lib/oracle/network/admin"
touch "tnsnames.ora"
vim "tnsnames.ora"
在该文件中写入以下连接信息,保存退出。
DATABASE_LINK=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=127.168.0.24)
(PORT=1521)
)
)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=DATABASE_NAME)
)
)
使用 mkstore
命令生成 wallet 文件
-
为 Oracle Wallet 文件创建一个目录。
cd "/home/usr/lib/oracle/network/admin" mkdir "wallet"
-
在刚才创建的目录中创建 Oracle Wallet 文件。需要输入以及确认密码。
mkstore -wrl "/home/usr/lib/oracle/network/admin/wallet" -create
-
为之前在
tns_names.ora
文件中创建的数据库连接创建 Oracle Wallet 凭证。mkstore -wrl "/home/usr/lib/oracle/network/admin/wallet" -createCredential DATABASE_LINK username !paSSwORd123
-
确认 Oracle Wallet 凭证已经创建。
mkstore -wrl "/home/usr/lib/oracle/network/admin/wallet" -listCredential
输出以下信息表示凭证创建成功。
Oracle Secret Store Tool Release 21.0.0.0.0 - Production Version 21.3.0.0.0 Copyright (c) 2004, 2021, Oracle and/or its affiliates. All rights reserved. Enter wallet password: List credential (index: connect_string username) 1: DATABASE_LINK username
创建 SQLPlus 配置文件 sqlnet.ora
到 Oracle Instant Client 存放目录下的 /network/admin
文件夹,或自己在环境变量中指定的 TNS_ADMIN
目录下创建数据库监听配置文件 sqlnet.ora
。
cd "/home/usr/lib/oracle/network/admin"
touch "sqlnet.ora"
vim "sqlnet.ora"
在该文件中写入以下连接信息,保存退出。
WALLET_LOCATION=
(SOURCE=
(METHOD=FILE)
(METHOD_DATA=
(DIRECTORY=/home/usr/lib/oracle/network/admin/wallet)
)
)
SQLNET.WALLET_OVERRIDE=TRUE
测试连接
使用 sqlplus
命令连接数据库,只指定数据库连接名 TNS name,用户名和密码留空。
sqlplus /@DATABASE_LINK
出现以下输出信息即表示配置成功。
SQL*Plus: Release 21.0.0.0.0 - Production on Mon Jan 29 04:14:54 2024
Version 21.13.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
SQL>