日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2025/3/12 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

我只想說,我的智慧結束了.任何想法將不勝感激!

總結

以上是生活随笔為你收集整理的python子进程kerberos_Anaconda3的python找不到kerberos凭证缓存的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。