【问题标题】:Kerberos Delegation (Double-Hop) with pymssql使用 pymssql 的 Kerberos 委派(双跳)
【发布时间】:2015-04-08 11:44:32
【问题描述】:

pymssql 模块声称支持 Kerberos 身份验证(和委托),但我似乎无法启用它。

我正在运行的客户端是在 Windows 上。我需要通过反向数据库代理连接双跳。客户端、代理和数据库都是域的一部分。当我尝试连接 SQL Server Manager 时,我成功了。但是当我尝试连接 Python 中的 pymssql 模块时,它不起作用。如果我直接从客户端连接到数据库,我可以让 Kerberos 身份验证工作。但同样,当我尝试通过代理时它失败了。

这让我相信 Kerberos 身份验证有效,但委派(双跳)无效。

根据section on FreeTDS,我应该能够在C:/freetds.conf 创建一个文件,它应该从那里读取连接信息。我似乎无法以任何有意义的方式验证这一点。此外,根据the freetds schema,我应该能够添加一个参数enable gssapi delegation,启用时(默认关闭)允许 Kerberos 委派。

底线: 我希望在 Windows 上为 pymssql 启用 Kerberos 委派(以便双跳工作)。


目前我在C:/freetds.conf创建了一个文件,并尝试了几种配置方法。

[global]
enable gssapi delegation = on

[global]
enable gssapi delegation = true

【问题讨论】:

  • 您是否有更改来评估我的答案?
  • 机会,是的。我一直在寻找替代解决方案。我找到了一些,不幸的是我不能使用 Pymssql。我会接受你的回答,并奖励赏金。因为如果我无论如何都试图让它工作,那么你为我省去了一个长期的头痛,但徒劳无功。感谢您的努力,希望有更好的答案。
  • (更好的是我的意思是让我可以使用 pymssql)
  • 你能在Windows下编译那个软件吗?补丁非常简单。
  • 自定义编译超出了我所寻找的范围。我需要这个解决方案便于携带。

标签: python kerberos freetds pymssql kerberos-delegation


【解决方案1】:

这很容易回答,并且根源于 FreeTDS 的一个缺点。你没有做错任何事。

如果我们看一下 FreeTDS 的 GSS-API C 代码,我们会看到 lines 307 to 308

if (tds->login->gssapi_use_delegation)
  gssapi_flags |= GSS_C_DELEG_FLAG;

在委托标志中读取您的配置参数已设置。

由于您在 Windows 上并且 Windows 使用其自己的 GSS-API 风格,即 SSPI,我们来看看 C 代码:lines 273 to 278do

status = sec_fn->InitializeSecurityContext(&auth->cred, NULL, auth->sname,
  ISC_REQ_CONFIDENTIALITY | ISC_REQ_REPLAY_DETECT 
    | ISC_REQ_CONNECTION | ISC_REQ_ALLOCATE_MEMORY,
  0, SECURITY_NETWORK_DREP,NULL, 0, &auth->cred_ctx, &desc, &attrs, &ts);

如您所见,上下文标志不在变量中,而是直接传递。既不评估配置参数,也不传递ISC_REQ_DELEGATE

就是您看到的问题。你现在有两个选择:

  1. 提出错误并等待修复。
  2. 从 GitHub 克隆,修复自己并发出拉取请求。

旁注:有几处我根本不喜欢这两个代码部分:

  1. SSPI 不像 GSS-API 那样执行相互身份验证,但应该这样做。
  2. 上下文标志被毫无意义地传递,但功能从未在该 C 文件中使用,例如 ISC_REQ_CONFIDENTIALITY | ISC_REQ_REPLAY_DETECTGSS_C_REPLAY_FLAG | GSS_C_INTEG_FLAG。仅当您需要此处未采用的进一步运输安全性时才需要。
  3. 可能还有更多问题需要修复,但我没有对其进行代码审查。

我也强烈建议在这里提出一些问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 2013-01-11
    • 2018-03-02
    • 2017-03-10
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多