Python Vertica:如何在vertica-python模块中使用Kerberos身份验证?

时间:2018-06-18 20:39:20

标签: python kerberos vertica

我正在使用Uber的vertica-python本机python适配器(https://github.com/uber/vertica-python),我正在尝试将kerberos身份验证与它集成。有没有办法可以做到?

问题:我想要与我的脚本一起使用的数据库用户将认证方法kerberos设置为最高优先级,似乎vertica-python适配器只有基于密码的身份验证。我阅读了Vertica文档,它说如果优先级设置为使用Kerberos,那么它是Vertica要求的唯一身份验证方法。

1 个答案:

答案 0 :(得分:0)

我正在寻找将Vertica与Airflow结合使用的类似答案。 另一方面,我可以告诉您如何将Vertica与Kerberos和Python结合使用,就我而言,我发现最好的解决方案是使用ODBC。

首先安装ODBC客户端,如果您使用的是Linux或Mac,则可以访问下一个站点:unixodbc

然后在客户端计算机上配置DSN,您可以像这样编辑主文件夹中的默认文件(Mac和Linux的示例): 〜/ .odbc.ini:

[ConnectionAliasABC]
Description = Database description
# Driver for MAC
# Driver = /Library/Vertica/ODBC/lib/libverticaodbc.dylib
# Driver for Linux
Driver = /opt/vertica/lib64/libverticaodbc.so
Database = DatabaseName
ServerName = ServerHost
UID = username
Port = 5433
KerberosServiceName = kerberosServiceName
KerberosHostname = kerberosHostname

然后,您可以使用下一个代码段:

    import pyodbc


    # here you should init a kerberos ticket, we use a keytab file for this
    initKerberos()

    odbc_dsn = 'ConnectionAliasABC' # same as the .odbc.ini file section

    print(f'Connecting to Vertica using dsn: {odbc_dsn}')

    connection = pyodbc.connect(f'DSN={odbc_dsn}')
    connection.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
    connection.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
    connection.setdecoding(pyodbc.SQL_WMETADATA, encoding='utf-16')
    connection.setencoding(encoding='utf-8')

    cursor = conn.cursor()
    cursor.execute("SELECT dummy as test_column_name FROM DUAL")
    row = cursor.fetchone()
    print(f'query result: {row[0]}') # this should show an 'X'