使用Anaconda的Python 3版本创建到MSSQL服务器的ODBC连接时遇到错误:

pyodbc.Error: (‘HY000’, ‘[HY000] [Microsoft][ODBC Driver 17 for SQL Server]SSPI Provider: No Kerberos credentials available (default cache: KEYRING:persistent:1918003883) (851968) (SQLDriverConnect)’)

服务器已通过SSSD加入Windows Active Directory域和Kerberos域.我可以通过SSH连接到服务器,并使用kinit检索TGT.我甚至可以使用klist查看凭证缓存.但是python进程似乎无法找到Kerberos TGT或Kerberos凭据缓存.

设置:

Python

$/mnt/ds/anaconda3/bin/python --version

Python 3.6.5 :: Anaconda, Inc.

test.py

from pyodbc import connect

connection = connect('DSN=MyDSN')

/etc/odbc.ini

[MyDSN]

#Driver=ODBC Driver 13 for SQL Server

Driver=ODBC Driver 17 for SQL Server

Description=MyMSSQL ODBC Driver

Trace=No

Server=MyMSSQL

Trusted_Connection=Yes

/etc/odbcinst.ini

[ODBC Driver 17 for SQL Server]

Description=Microsoft ODBC Driver 17 for SQL Server

Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.1.so.0.1

UsageCount=1

红帽企业Linux

$cat /etc/redhat-release

Red Hat Enterprise Linux Server release 7.5 (Maipo)

$uname -r

3.10.0-862.2.3.el7.x86_64

msodbcsql17

$sudo yum info msodbcsql17

Loaded plugins: amazon-id, rhui-lb, search-disabled-repos

Installed Packages

Name : msodbcsql17

Arch : x86_64

Version : 17.1.0.1

Release : 1

Size : 17 M

Repo : installed

From repo : packages-microsoft-com-prod

Summary : ODBC Driver for Microsoft(R) SQL Server(R)

License : https://aka.ms/odbc170eula

Description : This package provides an ODBC driver that can connect to Microsoft(R) SQL Server(R).

的unixODBC

$sudo yum info unixODBC

Loaded plugins: amazon-id, rhui-lb, search-disabled-repos

Installed Packages

Name : unixODBC

Arch : x86_64

Version : 2.3.1

Release : 11.el7

Size : 1.2 M

Repo : installed

From repo : rhui-REGION-rhel-server-releases

Summary : A complete ODBC driver manager for Linux

URL : http://www.unixODBC.org/

License : GPLv2+ and LGPLv2+

Description : Install unixODBC if you want to access databases through ODBC.

: You will also need the mysql-connector-odbc package if you want to access

: a MySQL database, and/or the postgresql-odbc package for PostgreSQL.

$/mnt/ds/anaconda3/bin/conda list unixodbc

# packages in environment at /mnt/ds/anaconda3:

#

# Name Version Build Channel

unixodbc 2.3.6 h1bed415_0

pyodbc

$/mnt/ds/anaconda3/bin/conda list pyodbc

# packages in environment at /mnt/ds/anaconda3:

#

# Name Version Build Channel

pyodbc 4.0.23 py36hf484d3e_0

以下是我尝试过的一些事情:

>使用由Anaconda2打包的Python-2.7.15.那很有效!

>使用isql.我运行isql MyDSN并连接.

>有两个unixODBC库(一个通过yum安装;另一个通过conda安装).默认情况下,它将使用conda,但我强制它使用系统unixODBC包和LD_PRELOAD.同样的错误.

>我尝试将数据库驱动程序降级为msodbcsql-13.1.9.2-1,然后降级为msodbcsql-13.0.1.0-1.同样的错误.

>我尝试换掉另一个Python ODBC库TurbODBC的PyODBC.同样的错误.

>我使用python-3.5在conda中创建了一个单独的环境.这很有效!仍然不确定为什么.

>我写了一个与unixODBC接口的简单C程序.该程序能够通过Kerberos连接到MSSQL服务器就好了.

>我通过strace运行python2正面测试用例和python3负面测试用例来检查系统调用.我认为这可能会揭示一些东西.看起来他们都开始在文件系统上查找client.keytab文件.然后,在正面测试案例中,它将回退到搜索内核的密钥环,它将成功找到凭证缓存并继续.但是,在否定测试用例中,它只是重试找到client.keytab,并且从不尝试搜索密钥环.

>我启用了unixODBC跟踪选项,一个使用Python3测试用例,另一个使用Python2测试用例.不幸的是,痕迹(如下所示)并没有向我揭示任何内容.

PY3-unixodbc.trace

[ODBC][8741][1527046794.480751][__handles.c][460]

Exit:[SQL_SUCCESS]

Environment = 0x55eea73ed130

[ODBC][8741][1527046794.480806][SQLSetEnvAttr.c][189]

Entry:

Environment = 0x55eea73ed130

Attribute = SQL_ATTR_ODBC_VERSION

Value = 0x3

StrLen = 4

[ODBC][8741][1527046794.480824][SQLSetEnvAttr.c][363]

Exit:[SQL_SUCCESS]

[ODBC][8741][1527046794.480843][SQLAllocHandle.c][375]

Entry:

Handle Type = 2

Input Handle = 0x55eea73ed130

[ODBC][8741][1527046794.480861][SQLAllocHandle.c][493]

Exit:[SQL_SUCCESS]

Output Handle = 0x55eea7400500

[ODBC][8741][1527046794.481176][SQLDriverConnectW.c][290]

Entry:

Connection = 0x55eea7400500

Window Hdl = (nil)

Str In = [DSN=MyDSN][length = 15]

Str Out = (nil)

Str Out Max = 0

Str Out Ptr = (nil)

Completion = 0

UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE'

[ODBC][8741][1527046794.575566][__handles.c][460]

Exit:[SQL_SUCCESS]

Environment = 0x55eea746e360

[ODBC][8741][1527046794.575614][SQLGetEnvAttr.c][157]

Entry:

Environment = 0x55eea746e360

Attribute = 65002

Value = 0x7ffd399177f0

Buffer Len = 128

StrLen = 0x7ffd3991778c

[ODBC][8741][1527046794.575632][SQLGetEnvAttr.c][264]

Exit:[SQL_SUCCESS]

[ODBC][8741][1527046794.575651][SQLFreeHandle.c][219]

Entry:

Handle Type = 1

Input Handle = 0x55eea746e360

PY2-unixodbc.trace

[ODBC][8746][1527046842.073439][__handles.c][460]

Exit:[SQL_SUCCESS]

Environment = 0x185e2e0

[ODBC][8746][1527046842.073530][SQLSetEnvAttr.c][189]

Entry:

Environment = 0x185e2e0

Attribute = SQL_ATTR_ODBC_VERSION

Value = 0x3

StrLen = 4

[ODBC][8746][1527046842.073552][SQLSetEnvAttr.c][363]

Exit:[SQL_SUCCESS]

[ODBC][8746][1527046842.073572][SQLAllocHandle.c][375]

Entry:

Handle Type = 2

Input Handle = 0x185e2e0

[ODBC][8746][1527046842.073590][SQLAllocHandle.c][493]

Exit:[SQL_SUCCESS]

Output Handle = 0x1857d40

[ODBC][8746][1527046842.073613][SQLDriverConnectW.c][290]

Entry:

Connection = 0x1857d40

Window Hdl = (nil)

Str In = [DSN=MyDSN][length = 15]

Str Out = (nil)

Str Out Max = 0

Str Out Ptr = (nil)

Completion = 0

UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE'

[ODBC][8746][1527046842.208760][__handles.c][460]

Exit:[SQL_SUCCESS]

Environment = 0x1967210

[ODBC][8746][1527046842.208830][SQLGetEnvAttr.c][157]

Entry:

Environment = 0x1967210

Attribute = 65002

Value = 0x7ffe1153fcf0

Buffer Len = 128

StrLen = 0x7ffe1153fc8c

[ODBC][8746][1527046842.208849][SQLGetEnvAttr.c][264]

Exit:[SQL_SUCCESS]

[ODBC][8746][1527046842.208869][SQLFreeHandle.c][219]

Entry:

Handle Type = 1

Input Handle = 0x1967210

我只想说,我的智慧结束了.任何想法将不胜感激!

python子进程kerberos_Anaconda3的python找不到kerberos凭证缓存相关推荐

  1. python子进程异常结束_Python子进程

    python子进程异常结束 Python subprocess module provides easy functions that allow us to spawn a new process ...

  2. 万字长文Python面试题,年后找工作就靠这了

    废话不多说,年后找工作,就靠这些啦! 基础篇(一) 1. 为什么学习 Python Python 语言简单易懂,上手容易,随着 AI 风潮,越来越火. 2. 解释型和编译型语言的区别 编译型语言:把做 ...

  3. python子进程通信_python执行子进程实现进程间通信的方法

    本文实例讲述了python执行子进程实现进程间通信的方法.分享给大家供大家参考.具体实现方法如下: a.py: import subprocess, time subproc = subprocess ...

  4. python子进程模块subprocess

    2019独角兽企业重金招聘Python工程师标准>>> python子进程模块subprocess 目录 一.subprocess 模块简介 1.1. 使用 subprocess模块 ...

  5. python子进程修改父进程内变量_如何将父变量传递给python中的子进程?

    这里的简单答案是:不要使用subprocess.Popen,使用 multiprocessing.Process.或者,更好的是,multiprocessing.Pool或 concurrent.fu ...

  6. python子进程进行kinit认证_使用kafka-python客户端进行kafka kerberos认证

    之前说过python confluent kafka客户端做kerberos认证的过程,如果使用kafka python客户端的话同样也可以进行kerberos的认证,具体的认证机制这里不再描述,主要 ...

  7. python进阶14文件路径(找不到文件)

    原创链接:python进阶14文件路径(找不到文件) 开发时遇到问题,文件路径不正确,找不到文件等等,都是这一类问题. curdir,argv,file 举例: 文件1代码: 1 2 3 4 5 6 ...

  8. 自学python到什么程度可以找工作-Python学到什么程度才可以去找工作?掌握这4点足够了!...

    大家在学习Python的时候,有人会问"Python要学到什么程度才能出去找工作",对于在Python培训机构学习Python的同学来说这都不是问题,因为按照Python课程大纲来 ...

  9. 专科python应届生工资多少-请问学过一点python,应届生怎么找工作?

    感谢邀请.知乎有人提了这么个问题,Python这么火,为啥找工作这么难呢? 这两年因为第三波人工智能热潮让 Python火了一把,让中小学生.非程序员(产品经理.运营)都加入到了学习Python的行列 ...

最新文章

  1. 【转】】Vue项目部署tomcat,刷新报错404解决办法
  2. 程序员常犯的五个非技术性错误
  3. tensordot 的源码解读
  4. 工具类:获取 spring 容器中 bean
  5. Centos7.6环境Docker安装Oracle19c企业版
  6. The use specified as definer('root'@'%') does not exist的解决办法
  7. c++中字符输入函数getline、cin.getline区分
  8. 下边框_css基础篇07--边框样式
  9. android本地gradle地址,android gradle本地路径不存在
  10. socket 函数 setsockopt()用法
  11. 转发表是什么鬼?怎么工作?
  12. 使用Mybatis拦截器实现数据分表
  13. 方程推导:二阶有源带通滤波器设计!(下载:教程+原理图+视频+代码)
  14. softmax 激活函数
  15. solidworks属性管理器_SolidWorks自定义属性——属性标签编制程序
  16. 计算机视觉教程2-6:八大图像特效算法制作你的专属滤镜(附Python代码)
  17. 易基因 | 植物DNA甲基化专题 | NAR:拟南芥AtHDA6与着丝粒周围DNA甲基化关系研究
  18. Android机应用多开分身CK获取ksjsb-jrttjsb-aqc羊毛
  19. php 一天是多少秒,1天 等于 86400 秒?
  20. 高翔视觉SLAM十四讲(第二版)各种软件、库安装的以及报错解决方法

热门文章

  1. 【ffmpeg裁剪视频faster rcnn自动检测 via】全自动实现ffmpeg将视频切割为图片帧,再使用faster rcnn将图片中的人检测出来,最后将检测结果转化为via可识别的csv格式
  2. ASP.NET MVC 阻止通过URL访问服务器上的静态资源文件
  3. java面向对象基础代码_JAVA基础知识点之Java面向对象
  4. mongodb 字段出现次数_MongoDB数据库
  5. 儿童编程python入门_儿童编程python入门
  6. centos6.5搭建mysql主从_mysql 主从配置,主-》windows,从-》centos6.5
  7. C++PrimerPlus学习——第十一章编程练习
  8. php mysql redis mq_docker 搭建 php-mysql-nginx-redis-rabbitmq环境
  9. ginapi服务器性能,如何使用 Gin 和 Gorm 搭建一个简单的 API 服务 (一)
  10. sq服务启动后又停止_SQL SERVER SQL Agent  服务启动后又停止的解决办法