python:使用Oracle的wallet / tnsnames连接到Oracle数据库

时间:2018-07-05 08:34:14

标签: python database oracle database-connection cx-oracle

所以我可以这样连接到Oracle数据库:

import cx_Oracle as ora
dsnStr = ora.makedsn(host="ABC.COM", port="ABC_PORT", sid="ABC")
con = ora.connect(user="ABC_USER", password="ABC_PASSWORD", dsn=dsnStr)
print(con.version)
con.close()

,并且效果很好,但是我想使用Oracle wallet / tnsnames / database.properties进行连接(我来自Java世界)。到目前为止,找不到有关如何实现这一目标的任何信息。另外,如何根据这些cx_Oracle / Oracle wallet / tnsnames相应文件的路径来“配置” database.properties

2 个答案:

答案 0 :(得分:1)

我无法帮助将cx_Oracle所需的Java端转换为C端,但是下面的内容将有助于显示cx_Oracle的需求。我将使用一个基于Oracle Exadata Express的示例,该示例使用钱包进行连接,请参见有关将脚本语言连接到Exadata Express here的通用说明。

您的确切配置和文件可能有所不同。正如Anthony指出的那样,安全设置并非特定于cx_Oracle。经验丰富且乐于助人的安全专家可能会在其他论坛上潜伏。

对于Exadata Express,将下载预先提供的钱包zip文件。对于像cx_Oracle这样的Oracle Call Interface应用程序,我们只需要zip中的以下文件:sqlnet.ora,tnsnames.ora和cwallet.sso。您将需要创建/查找这些(或所需的)文件。

我的文件是:

sqlnet.ora

WALLET_LOCATION = (SOURCE = (METHOD = file)
                   (METHOD_DATA = (DIRECTORY="$TNS_ADMIN")))

SSL_SERVER_DN_MATCH=yes

tnsnames.ora

dbaccess = (description=
          (address=(protocol=tcps)(port=1522)(host=whereever.com))
          (connect_data=(service_name=whereever2.com))   
          (security=(ssl_server_cert_dn="CN=wherever2.com,O=Oracle Corporation,L=Redwood Shores,ST=California,C=US"))  
       )

cwallet.sso : 我会让你想像中...

我将这三个文件放在/Users/cjones/Cloud中,并设置环境以查找它们:

$ export TNS_ADMIN=/Users/cjones/Cloud

现在,我可以使用tnsnames.ora文件中的连接名称进行连接:

$ sqlplus -l cj/mypassword@dbaccess

SQL*Plus: Release 12.2.0.1.0 Production on Fri Jul 6 10:20:21 2018

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

Last Successful login time: Tue Jul 03 2018 13:00:06 +10:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>

在cx_Oracle中,您的dsn也将是dbaccess

答案 1 :(得分:0)

cx_Oracle使用与SQL Plus相同的技术来连接数据库。因此,如果您发现这样做更容易,则可以先使用SQL Plus进行测试。

为此,您将需要创建一个sqlnet.ora配置文件。这使您可以将wallet file的位置等参数设置为。如果在默认位置找不到环境变量TNS_ADMIN,则可以使用它指定此配置文件和其他配置文件的位置(如tnsnames.ora)。有关更多信息,请参见documentation