【问题标题】:Authentication with public keys and cx_Oracle using Python使用 Python 使用公钥和 cx_Oracle 进行身份验证
【发布时间】:2012-05-16 03:24:07
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

一种可能的解决方案是实施 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")

光标 = db.cursor()

r = cursor.execute("选择用户名,密码, account_status、default_tablespace、temporary_tablespace 来自 dba_users 按用户名排序")

对于用户名、密码、account_status、default_tablespace、 游标中的临时表空间:

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

【讨论】:

  • 谢谢。我最终实现了一个非常相似的解决方案。我喜欢您将 Wallet 用户的 SID 与“正常”的 SID 分开的想法。不过有一个问题,您不需要在 sqlnet.ora 中指定 Oracle Wallet 的位置吗?
  • 但是没有人能够使用此代码连接到数据库。如果您只希望某些人能够做到这一点,例如使用公钥/私钥模型,该怎么办。
【解决方案2】:

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

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/ 下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-08
    • 2020-08-19
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 2015-10-20
    相关资源
    最近更新 更多