代码之家  ›  专栏  ›  技术社区  ›  dr_dino

python vertica:如何在vertica python模块中使用kerberos身份验证?

  •  1
  • dr_dino  · 技术社区  · 6 年前

    我正在使用uber的vertica python本地python适配器( https://github.com/uber/vertica-python ,我正在尝试将kerberos身份验证与之集成。我有办法吗?

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Carlos Verdes martypdx    5 年前

    我正在寻找一个类似的答案,使用与气流眩晕。 另一方面,我可以告诉您如何将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'