cx_Oracle LDAP连接字符串语法

时间:2016-06-20 22:55:55

标签: python python-2.7 cx-oracle

使用JDBC,我们可以使用以下语法通过LDAP连接连接到Oracle数据库:

jdbc:oracle:thin:@ldap://host:1234/service_name,cn=OracleContext,dc=org,dc=com

如何使用cx_oracle通过LDAP连接?

2 个答案:

答案 0 :(得分:2)

这是我在 Win 10 上使用 Python 3.7 和 cx_Oracle v.8.2.0 的两分钱。

我想使用 Python 向 Oracle 数据库发出查询,而我已经有了:

  • 用户名(或架构)
  • 密码
  • 如下所示的 JDBC 连接字符串: jdbc:oracle:thin:@ldap://[LDAPHostname1]:[LDAPPort1]/[ServiceName],[DomainContext] ldap://[LDAPHostname2]:[LDAPPort2]/[ServiceName],[DomainContext] 其中 [DomainContext] 的形式为 cn=OracleContext,dc=foo,dc=bar

首先,您必须按照 Oracle documentation 安装 cx_Oracle。

注意:

  • cx_Oracle 需要一系列库文件,这些文件是 Oracle Instant Client“Basic”或“Basic Light”包(可用 here)的一部分。假设我们在 C:\path\to\instant_client_xx_yy
  • 下解压缩包
  • 根据您使用的平台,还需要满足其他一些要求(例如在 Windows 上安装一些 Visual Studio 可再发行组件)

对于 LDAP 部分,需要两个配置文件:

  • sqlnet.ora :这是 Oracle 的配置文件配置文件,但我的只是包含:

    NAMES.DIRECTORY_PATH = (LDAP)
    

    它告诉库仅使用 LDAP 解析名称。

  • ldap.ora :该文件告诉在使用 LDAP 解析名称时要查找的位置。我知道我正在访问两个 OID 服务器,所以我的是以下形式:

    DIRECTORY_SERVERS=([LDAPHostname1]:[LDAPPort1], [LDAPHostname2]:[LDAPPort2])
    DEFAULT_ADMIN_CONTEXT="dc=foo,dc=bar"
    DIRECTORY_SERVER_TYPE=oid
    

    重要说明:我必须从 cn=OracleContext 条目中删除 DEFAULT_ADMIN_CONTEXT 以使名称解析工作

    假设这两个文件保存在 C:\path\to\conf

现在是 Python 部分。我使用 cx_Oracle.init_oracle_client() 方法来指向库和配置文件。 (请注意,还有其他方法可以让 cx_Oracle 访问这些文件,例如设置环境变量或将它们放在预定义的位置。这在 install guide 下进行了解释)

这是一个小示例代码:


import cx_Oracle

# username and password retrieved here

cx_Oracle.init_oracle_client(lib_dir=r'C:\path\to\instant_client_xx_yy', config_dir=r'C:\path\to\conf')

try:
    with cx_Oracle.connect(user=username, password=password, dsn='[ServiceName]') as connection:
        cursor = connection.cursor()
        cursor.execute('SELECT * FROM ALL_TAB_COLUMNS')
        # Outputs tables and columns accessible by the user
        for row in cursor:
            print(row[1], '-', row[2])
        cursor.close()

except cx_Oracle.DatabaseError as e:
    print("Oracle Error", e)

答案 1 :(得分:1)

简短的回答是您使用ldap.ora配置文件并指定它将在您的sqlnet.ora配置文件中使用。虽然此链接涉及创建数据库链接而不是直接连接,但同样的原则适用,您可以使用LDAP服务器中引用的任何服务进行连接。

http://technologydribble.info/2015/02/10/how-to-create-an-oracle-database-link-using-ldap-authentication/

有关其工作原理的更多官方文档可在此处找到:

https://docs.oracle.com/cd/B28359_01/network.111/b28317/ldap.htm