使用公共密钥和使用Python的cx_Oracle进行身份验证

时间:2012-05-07 15:53:40

标签: python oracle authentication public-key-encryption cx-oracle

我谷歌搜索了一下,但我没有找到任何实质性的结果。是否可以使用基于密钥的身份验证使用Python连接到Oracle服务器?我的目标是能够自动执行我正在使用Python进行的一些报告,而无需在服务器中的任何位置存储用户名/密码。

2 个答案:

答案 0 :(得分:6)

一种可能的解决方案是实施Oracle Wallet。创建Oracle Wallet条目涉及:

  • 为所述实例
  • 建立的tnsname解析名称
  • 用户名和密码

示例:我正在使用的Oracle sid名为ORCL,我必须连接的用户名为my_user。在你的tnsnames.ora文件中,你已经有一个解析ORCL服务名称/ sid的条目,再创建一个具有完全相同参数的条目:

#initial local name entry:
ORCL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = my_ip)(PORT = 1528))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)))

#create an additional local name entry:
ORCL_MY_USER = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = my_ip)(PORT = 1528))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)))

新条目成功解析后,为ORCL_MY_USER本地名称创建oracle钱包条目。您将在python脚本中使用的新本地名称,无需在其中提供或硬编码密码即可进行连接。

示例:

  

导入cx_Oracle

     

db = cx_Oracle.connect(“/ @ ORCL_MY_USER”)

     

cursor = db.cursor()

     

r = cursor.execute(“SELECT用户名,密码,   account_status,default_tablespace,temporary_tablespace来自   dba_users按用户名排序“)

     

用于用户名,密码,account_status,default_tablespace,   cursor中的temporary_tablespace:

    print username, '\t', password, '\t', account_status, '\t', default_tablespace, '\t', temporary_tablespace

答案 1 :(得分:1)

是的,您必须在sqlnet.ora中指定Oracle wallet的位置。

WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /u01/app/oracle/product/11.2.0.2/dbhome_1/owm/wallets/oracle)))
SQLNET.WALLET_OVERRIDE = TRUE
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_VERSION = 0

据我了解,Oracle钱包的默认位置在$ ORACLE_HOME / owm / wallets /。