1

遵循https://docs.oracle.com/cd/E78494_01/aip/pdf/1411/html/ig/aip-ig-apx_wallet.htm指南并创建 ewallet.p12(也生成 cwallet.sso)、sqlnet.ora、和 tnsnames.ora:

PS C:\Users\myname\Oracle> echo $env:ORACLE_HOME
C:\app\oracle\product\19.0.0\client_1
PS C:\Users\myname\Oracle> echo $env:TNS_ADMIN
C:\Users\myname\Oracle\my_admin

然后测试了我的凭据,并且 tnsnames.ora 成功:

sqlplus user/password@tns_alias

但是,从上面删除用户和密码(期望从 ewallet.p12 文件中获取它们)会出错:

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jul xxxxxxxxx
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:

然后在出现提示时输入用户名和密码,给我 tns 适配器错误:

Enter user-name: user
Enter password:
ERROR:
ORA-12560: TNS:protocol adapter error

以下是 sqlnet.ora 内容:

SSL_CLIENT_AUTHENTICATION=FALSE
SSL_SERVER_DN_MATCH=TRUE

WALLET_LOCATION = 
    (SOURCE = 
    (METHOD=FILE) (METHOD_DATA = (DIRECTORY = C:\Users\myname\Oracle\my_wallet)))

TRACE_LEVEL_CLIENT=16
TRACE_FILE_CLIENT = client.trc
TRACE_DIRECTORY_CLIENT=%USERPROFILE%\ORACLE

和钱包文件夹的内容:

PS P:\> ls C:\Users\myname\Oracle\my_wallet\


    Directory: C:\Users\myname\Oracle\my_wallet


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       30/07/2020   7:59 PM           2509 cwallet.sso
-a----       30/07/2020   7:39 PM              0 cwallet.sso.lck
-a----       30/07/2020   7:59 PM           2464 ewallet.p12
-a----       30/07/2020   7:39 PM              0 ewallet.p12.lck

这似乎很简单,但不确定我错过了什么?

4

1 回答 1

1

当您使用 WALLET 通过密码存储进行身份验证时,最好包含两个sqlnet.ora and tnsnames.ora与您通常用于密码连接的文件不同的附加文件 ( )。

tnsnames.oraand复制sqlnet.ora到相同的钱包目录并按照以下步骤操作:

3.编辑sqlnet.ora看起来像这样

WALLET_LOCATION =
   (SOURCE =
     (METHOD = FILE)
     (METHOD_DATA =
       (DIRECTORY =  C:\Users\myname\Oracle\my_wallet )
     )
    )

SQLNET.WALLET_OVERRIDE = TRUE
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_VERSION = 0

3.您的新tnsnames.ora必须包含钱包的条目( service_name 或 sid )

MY_EXAMPLE=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = server  )(PORT = port ))(CONNECT_DATA =(SERVER = DEDICATED)(SID = databasesid)))

4.将 TNS_ADMIN 设置为新的 sqlnet 和 tnsnames 文件的位置

SET TNS_ADMIN=C:\Users\myname\Oracle\my_wallet

5.所有文件的目录应该看起来像(在我的例子中我使用Linux)

-rw-------. 1 orafil finance    0 Feb  6 16:30 ewallet.p12.lck
-rw-------. 1 orafil finance    0 Feb  6 16:30 cwallet.sso.lck
-rw-rw-r--. 1 orafil finance  235 Feb 18 10:26 sqlnet.ora
-rw-rw-r--. 1 orafil finance  454 May 14 11:35 tnsnames.ora
-rw-------. 1 orafil finance 2872 May 14 14:26 ewallet.p12
-rw-------. 1 orafil finance 2917 May 14 14:26 cwallet.sso

然后连接

sqlplus user/@MY_EXAMPLE
于 2020-07-30T12:32:08.360 回答