python子进程kerberos_Anaconda3的python找不到kerberos凭证缓存

使用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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php引用计数器,PHP 引用计数器 通俗版解释_PHP教程

PHP 引用计数器 通俗版解释概述最近看PHP中的引用计数器部分,首先被各种绕晕,然后通过看博客和分析后,总结了一个比较通俗的解释,能帮助自己很好地记忆,也希望能帮助到各位读者。这里分享一遍博文,是比较正…

java流式api,Java 8 中流式API性能基准测试

测试代码package hello.test;import org.openjdk.jmh.annotations.*;import org.openjdk.jmh.runner.Runner;import org.openjdk.jmh.runner.RunnerException;import org.openjdk.jmh.runner.options.Options;import org.openjdk.jmh.runner.options.OptionsBuilder;import jav…

windows c语言 http https检测_C语言编程工具的选择

1.先说说我的故事我是2007年上的大学,一所双一流工科大学。专业是计算机科学与技术。我们计算机专业没有C语言这门课。其他工科专业会学C语言这门课。据我所知,其他的工科专业需要过C语言2级考试。计算机专业不用考2级、3级...这些考试。我们计算机专业学…

PHP 继承新增,php类的扩展和继承用法实例

本文实例讲述了php类的扩展和继承用法。分享给大家供大家参考。具体如下:class Thread{var $topic; //帖子主题var $body; //帖子内容var $date; //帖子发布时间var $author; //帖子作者//函数Thread用于初始化变量等function Thread(){//初始化变量}//函数Send用于…

python的固定有没有固定字符_python每次处理固定个数的字符的方法总结

首先,来看每次处理一个字符的情况,可以有如下方法去实现:方法一:代码如下:>>> a1234567>>> list(a)[1, 2, 3, 4, 5, 6, 7]>>>方法二:代码如下:>>> a1234567>>> for i in…

php 按照laravel5.5,Laravel5.5 综合使用

使用 Laravel5.5 开发一个自动交割的项目,把使用到的开源扩展包及特性整理起来,以供后续使用。一、安装IDE提示工具Laravel IDE Helper 是一个极其好用的代码提示及补全工具,可以给编写代码带来极大的便利。1、安装# 如果只想在开发环境安装请…

usb声卡驱动_iCON ProDrive第三代USB声卡驱动全新发布!

2019年3月,iCON官方发布了一款全球首创——全新一代“ProDrive III”USB声卡驱动,iCON所有系列USB声卡(包括带声卡的MIDI键盘)已全面启用ProDrive III !iCON ProDrive III由iCON的国际工程师团队微调的高品质模拟元件和电路,可同时…

分数小数互换图_重复控制器学习心得(二)——超前环节的分数化和校正因子的引入...

本文仅作为学习记录,欢迎各位提出宝贵建议1、超前补偿环节的分数化在上周我学习了分数阶RC的实现方式,无独有偶,超前补偿环节也可以应用插值的方式来近似分数阶补偿。整数阶超前补偿的弊端主要有二:一、当采样频率和固定频率的比值…

php密码怎么用md5,如何使用PHP使用MD5加密此密码?

下面的代码来自一个用PHP编写的登录脚本.它检查密码的数据库不使用MD5加密密码,但是当登录脚本检查数据库中的密码时,它正在检查原始密码而不加密.我熟悉md5()函数但是如何将其合并到以下内容中:session_start();$username $_POST[username];$password $_POST[password];if (…

python嵩天课后题及答案第二章_课后参考答案-第二章部分习题参考答案

习题21-7题,见教材相关章节内容。8.Job1与Job2同时到达,根据短作业优先算法,这时应该先执行Job2,Job2执行完毕时9.0,系统中有job1与job3两个作业,job3较短,所以先执行job3&#xff0…

java中execquery(),javaee登录界面

首先在此之前我们应该正确安装数据库,以及eclipse(javaee)文件包。1.首先在javaee中建立新的项目2.右键点击WebContent-New-JSP File,新建jsp(动态)文件。(想在哪个文件夹里添加jsp文件,就直接右击文件夹新建,注意一定不要展开文件…

电子工程专业评副高总结_微电子科学与工程专业怎么样?

专业简介080704 微电子科学与工程培养目标:本专业培养德、智、体等方面全面发展,具备微电子科学与工程专业扎实的自然科学基础、系统的专业知识和较强的实验技能与工程实践能力,能在微电子科学技术领域从事研究、开发、制造和管理等方面工…

php预处理获取改变行数,php – 使用MySQLi预处理语句时无法获取行数...

如果要使用mysqli_stmt :: $num_rows(即,检查预准备语句中的行数),则需要在执行预准备语句之后使用$stmt-> store_result(),然后才能检查其数量行.这意味着在我们检查返回的行数之前,结果存储在内存中.$stmt $conn->prepare($sql);$stmt->bind_param(ss,$log_usernam…

vue if判断_vue循环判断

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>条件与循环</title><script src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body><h1>判断示例<…

java的一些题目,一些Java题目

1.String str new String("abc"); 请问定义了几个对象。定义了两个对象&#xff0c;一个"abc", 一个是new String().2.面向对象的东西&#xff1a;abstract & interface的各自的作用&#xff0c;区别。3.面向对象的特征&#xff0c;以及怎么实现的。1…

显示器驱动有什么用_科普一下:电脑显示器用什么接口好,主流接口有哪些?...

如今是新的“视”界&#xff0c;生活中总与各种屏幕打交道&#xff0c;难免会遇到选择视频接线的问题&#xff0c;要想搞清楚这点&#xff0c;我们只要通过了解现今常用的几种视频接线就会有个大致的认识。经常会有一些朋友困扰&#xff0c;电脑显示器用什么接口最好&#xff0…

php-cgi并发,对于php-fpm和cgi,还有并发响应的理解

参考链接&#xff1a;首先搞清楚php-fpm与cgi的关系cgicgi是一个web server与cgi程序(这里可以理解为是php解释器)之间进行数据传输的协议&#xff0c;保证了传递的是标准数据。php-cgiphp-cgi是php解释器&#xff0c;就是上文提到的cgi程序。FastcgiFastcgi是用来提高cgi程序(…

更改应用程序图标_在 Windows 10 version 1903 中查看应用程序是否支持 DPI 感知

在显示屏幕上&#xff0c;每英寸点数(DPI)定义构成面板的每个物理单元的像素数。传统上&#xff0c;显示器每英寸输出 96 个像素。但随着技术的发展&#xff0c;各大公司的产品已经开始增加同一物理空间中的像素数&#xff0c;也就造成了屏幕的 DPI 达到 200 甚至更高&#xff…

python程序分析,用Python编写分析Python程序性能的工具的教程

用Python编写分析Python程序性能的工具的教程来源&#xff1a;中文源码网 浏览&#xff1a; 次 日期&#xff1a;2018年9月2日【下载文档: 用Python编写分析Python程序性能的工具的教程.txt 】(友情提示:右键点上行txt文档名->目标另存为)用Python编写分析Python程序…

tina中信号带宽_关于通频带,3dB带宽,三阶截点和1dB压缩点,截止频率,频率范围,带宽,特征频率(中心频率),截止频率和增益(db)...

1、通频带通频带用于衡量放大电路对不同频率信号的放大能力。由于放大电路中电容、电感及半导体器件结电容等电抗元件的存在&#xff0c;在输入信号频率较低或较高时&#xff0c;放大倍数的数值会下降并产生相移。通常情况下&#xff0c;放大电路只适用于放大某一个特定频率范围…