首页 » ORACLE [C]系列, ORACLE 9i-23c » 如何在Oracle 19c expdp/impdp 脚本中不使用密码?

如何在Oracle 19c expdp/impdp 脚本中不使用密码?

前段时间在谈到数据库客户关注点时,香港的同事说感觉客户非常注重的是安全而非什么分布式,前段同事写过一篇MySQL中容易泄露数据库用户密码的地方,如shell、SQL的历史记录、主从复制等,当然也包括部署的一些数据库脚本,如逻辑导出,Oracle也不例外,好多用户在用户密码复杂度上很苛刻,但如在数据库中部署的如RMAN、EXPDP等脚本还是明文的密码那就比较不规范,下面针对这类shell如何不显示密码。

–env 19.3 导到PDB1中的某张表

1, External password file
这个我翻了翻笔记10年前在北京自学时在Oralce 10g测试地2篇《wallet,外部存储用户名密码,createEntry与createCredential区别(一)》, 这里在19c简单试一下,发现19c 还有个小bug。

— 密码 [非必须]

SQL> alter user system identified by oracle_1234 container=all;
User altered.

— 创建钱包

mkstore -wrl $ORACLE_HOME/network/admin -create <<WRL
wrl_xxxxxxxx
wrl_xxxxxxxx
WRL

— 配置TNSNAMES 增加到tnsnames.ora

cdb1pdb1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oel7db1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pdb1)
    )
  )

— 装钱 加用户为SYSTEM

$ mkstore -wrl $ORACLE_HOME/network/admin -createCredential cdb1pdb1 SYSTEM <<CREATE
oracle_1234
oracle_1234
wrl_xxxxxxxx
CREATE

— 列出用户

$ mkstore -wrl $ORACLE_HOME/network/admin -listCredential

— 如果配置错误,删除用户

$ mkstore -wrl $ORACLE_HOME/network/admin -deleteCredential cdb1pdb1  

— 如果后面修改了密码,需要修改

$mkstore -wrl $ORACLE_HOME/network/admin  -modifyCredential cdb1pdb1 SYSTEM oracle_1234

— 配置SQLnet.ora

cat >> $ORACLE_HOME/network/admin/sqlnet.ora <<'CAT'
WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY="$ORACLE_HOME/network/admin")))
SQLNET.WALLET_OVERRIDE=TRUE
CAT

— 登录测试

[oracle@oel7db1 admin]$ sqlplus /@cdb1pdb1
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Nov 14 19:27:15 2022
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
Last Successful login time: Mon Nov 14 2022 19:22:07 +08:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

USERNAME             INST_NAME            HOST_NAME                  I# SID   SERIAL#  VERSION    STARTED  SPID       OPID  CPID            SADDR            PADDR
-------------------- -------------------- ------------------------- --- ----- -------- ---------- -------- ---------- ----- --------------- ---------------- ----------------
SYSTEM               PDB1-anbob19c        oel7db1                     1 35    22844    19.0.0.0.0 20221114 8497       54    8495            00000000780D5CF8 0000000078D14028

SQL> 

— 导出

[oracle@oel7db1 admin]$ expdp /@cdb1pdb1 directory=datapump tables=anbob.t1

Export: Release 19.0.0.0.0 - Production on Mon Nov 14 19:30:09 2022
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
Password:

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Starting "SYSTEM"."SYS_EXPORT_TABLE_02":  /********@cdb1pdb1 directory=datapump tables=anbob.t1
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "ANBOB"."T1"                                84.07 MB  611120 rows
Master table "SYSTEM"."SYS_EXPORT_TABLE_02" successfully loaded/unloaded
******************************************************************************

Note:
这里还提示输入密码,但是回车忽略又可以继续。这是19c的一个小bug 28707931,到19.7 RU中包含.只需要简单的修改脚本就可以解决。

[oracle@oel7db1 ~]$ expdp /@cdb1pdb1 directory=datapump tables=anbob.t1 </dev/null

Export: Release 19.0.0.0.0 - Production on Mon Nov 14 19:32:24 2022
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
Password:

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Starting "SYSTEM"."SYS_EXPORT_TABLE_02":  /********@cdb1pdb1 directory=datapump tables=anbob.t1
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "ANBOB"."T1"                                84.07 MB  611120 rows
Master table "SYSTEM"."SYS_EXPORT_TABLE_02" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TABLE_02 is:
  /home/oracle/expdat.dmp

Note:
这里增加个/dev/null输入就可以避免交互。

2, OS 认证 AS SYSDBA
如果你懒的配置钱包,可以使用sysdba OS认证,但是对于多租户环境默认登陆是CDB$ROOT, 可以配合环境变量 ORACLE_PDB_SID切换PDB.

[oracle@oel7db1 ~]$ export ORACLE_PDB_SID=pdb1

[oracle@oel7db1 ~]$ expdp '"/ as sysdba"' directory=datapump tables=anbob.t1 </dev/null

Export: Release 19.0.0.0.0 - Production on Mon Nov 14 19:36:07 2022
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
Password:

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Starting "SYS"."SYS_EXPORT_TABLE_01":  "/******** AS SYSDBA" directory=datapump tables=anbob.t1
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "ANBOB"."T1"                                84.07 MB  611120 rows
Master table "SYS"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded

Note:
用双引号括起/ as sysdba,同样如果有上面的密码提示的小bug,也可以使用上面的小技巧绕过。

打赏

,

对不起,这篇文章暂时关闭评论。