当前位置: 首页 > 知识库问答 >
问题:

在macOS上使用pyodbc、FreeTDS和Kerberos身份验证连接到SQL Server

百里骏
2023-03-14

我从不在论坛上提问题,因为我通常可以在互联网上找到答案。
但是,在这种情况下,我不能。

摘要:我可以通过Azure Data Studio和使用FreetDS的tsql使用kerberos身份验证连接和查询数据库。我无法连接到PyODBC。我尝试了几十种不同的配置都没有成功。

我的最终目标是用Python连接到MSSQL server DB。

谢谢你的任何投入。

背景

连接到kerberos身份验证所需VPN的本地计算机macOS 10.15.4已成功从Azure Data Studio数据库查询到数据库是Microsoft SQL Server 2016

弗里特兹

tsql-s-u'directory\username'->工作,可以查询DB

iSQL

isql dsn_name'directory\username''password'

错误DIAG[42000][FreeTDS][SQL Server]登录失败。该登录名来自不受信任的域,不能与Windows身份验证一起使用。

isql dsn_name'directory\username'

错误:DIAG[42000][FreeTDS][SQL Server]登录失败。该登录名来自不受信任的域,不能与Windows身份验证一起使用。

PyODBC

cnxn=pyodbc.connect('dsn=dsn_name;trusted_connection=yes')

错误:Pyodbc.ProgrammingError:(“42000”,“[42000][FreeTDS][SQL Server]登录失败.该登录来自不受信任得域,不能与Windows身份验证一起使用.(18452)(SQLDriverConnect)”)

cnxn=pyodbc.connect('dsn=dsn_name;uid=directory\username;pwd=“password”')

错误:DIAG[01000][FreeTDS][SQL Server]Adaptive Server连接Pyodbc失败。OperationalError:(“08001”,“[08001][FreeTDS][SQL Server]无法连接到数据源(0)(SQLDriverConnect)”)

配置

krb5.conf

libdefaults

default_realm=域

“境界”

domain_same_as_default={

kdc=kdc_address

}

ODBC.INI

[dsn_name]

描述=MSSQL服务器

驱动器=FreeTDS

Servername=server_name

ODBCInst.ini

[FreeTDS]

description=freetds用于Linux和MSSQL的驱动程序

driver=/usr/local/lib/libtdsodbc.so

setup=/usr/local/lib/libtdsodbc.so

USAGECOUNT=1

[ODBC]跟踪=是

tracefile=/dev/stdout

freetds.conf

[server_name]主机=ip_address

port=port_num

数据库=db_name

领域=域

共有1个答案

文喜
2023-03-14

我避免在pyodbc中使用DSN,因为我更喜欢将所有配置放在一个位置。下面是我在域中使用的连接字符串示例。

con = pyodbc.connect(
    r"DRIVER={FreeTDS};"
    r'SERVER=mssql.mydomain.com;'
    r"PORT=1433;"
    r"DATABASE=my_db;"
    f"UID=MYDOMAIN\\my_username;"
    f"PWD=my_password;"
    r"TDS_Version=7.3;"
    r"Encrypt=yes;"
    r"Trusted_Connection=yes;"
)

给它一个回旋?如果使用Windows域身份验证,则需要两个反斜杠(\\)进行转义,这不是一个输入错误。您可能缺少的关键内容是tds_version。有关TDS版本的更多信息,请访问:https://www.freetds.org/userguide/choosingtdsprotocol.html

祝你好运!

 类似资料:
  • 我正在运行一个squid代理服务器(CentOS 5),我正试图通过我们的AD服务器(Windows server 2008)使用kerberos。 我遵循了以下说明:http://wiki.squid-cache.org/ConfigExamples/Authenticate/Kerberos 为服务器设置一个keytab,这一切都运行良好。 当我尝试从客户端PC使用代理时,会出现问题,它会立即

  • 我正在开发一个Web应用程序,它是rest客户端并使用rest服务(API)来执行任何操作。我集成了apache shiro以使用工作正常的jdbc领域执行身份验证。 现在,我正在寻找一种使用apacheDS LDAP执行身份验证的解决方案。我计划使用kerberos身份验证,但我没有找到任何有用的文章或示例来使用apache shiro实现kerberos身份验证。 我发现apache shir

  • 使用这个例子,我的连接几乎可以工作 http://blogs.nologin.es/rickyepoderi/index.php?/archives/105-oracle-driver-and-kerberos.html 我使用的是Java7,但使用另一个没有问题。有没有一种方法可以用jvm正确读取票证(参见jdk中的kinit不要创建正确的票证)

  • 15/02/06 15:17:12警告IPC.Client:连接到服务器时遇到异常:javax.security.sasl.saslexception:GSS initiate失败[由GSSException:未提供有效凭据(机制级别:找不到任何Kerberos tgt导致)]LS:本地异常失败:java.io.ioException:javax.security.sasl.saslexcepti

  • 所有的, 有人能就如何使用JAAS LoginContext对多个KDC/Realm组合进行身份验证提供建议吗?换句话说,如果尝试1对领域A失败,请尝试领域B。 类似于下面的伪代码。 一如既往,任何帮助都非常感谢。 查看剪贴板打印文本?

  • 我知道Fiddler支持Kerberos,所以我的想法是把打嗝链到Fiddler上。我首先确保我可以在Fiddler中使用篡改(使用此链接作为指南)。然后我将Fiddler设置为Burp的上游代理,但是当我在Burp中篡改一个请求时,在发出请求时仍然得到一个未经授权的401。 关于如何让Burp进行Kerberos身份验证,还有其他想法吗?