php - 使用 WindowsAuth / Kerberos 连接到 MS SQL Server 的 Linux Apache+PHP 问题(“没有可用的 Kerberos 凭据”)
问题描述
以下设置:我有一台 Linux (Debian) 机器作为网络服务器 (apache) 和 Windows 上的 MS SQL Server。此外,我无法为此获取 SQL 用户,只能通过 AD/Windows Auth 进行身份验证。
我正在使用按照 Microsoft 的说明安装的 Microsoft ODBC 驱动程序和 sqlsrv 扩展。
我kinit
成功地使用主体名称和密码运行。现在,基于 Windows-Auth 的与 MSSQL Server 的连接在使用 sqlsrv_connect 时sqlcmd
甚至在交互模式下使用 PHP(php -a
. 我收到这样的错误消息:
Array ( [0] => Array ( [0] => HY000 [SQLSTATE] => HY000 [1] => 851968 [code] => 851968 [2] => [Microsoft][ODBC Driver 17 for SQL Server]SSPI Provider: No Kerberos credentials available (default cache: FILE:/tmp/krb5cc_33) [message] => [Microsoft][ODBC Driver 17 for SQL Server]SSPI Provider: No Kerberos credentials available (default cache: FILE:/tmp/krb5cc_33) ) [1] => Array ( [0] => HY000 [SQLSTATE] => HY000 [1] => 851968 [code] => 851968 [2] => [Microsoft][ODBC Driver 17 for SQL Server]Cannot generate SSPI context [message] => [Microsoft][ODBC Driver 17 for SQL Server]Cannot generate SSPI context ) )
我知道附加 _XX 的缓存代表 UID,所以认为这可能是我已经尝试过不同用户请求票证的问题,但我无法让它工作。
我还尝试使用 unixODBC 并定义一个 DSN。它在测试isql
和使用odbc_connect
php 交互模式(也使用 python 使用 pyodbc)时工作,但不是来自 php 页面。
有人知道我缺少什么吗?这可能很明显,但我对这个主题相当陌生,并且没有太多关于从 linux 机器访问基于 Windows 的 MS SQL 服务器而无需额外 SQL 用户的信息。提前感谢您的帮助!
解决方案
自己找到了答案,本来可以早点想出这个的,但是我会把这个留在这里,以防其他人偶然发现这个问题:
我已经认为它与访问权限/权限有关,因为它基本上可以在除 Apache 之外的任何地方工作,但我不知道为什么,直到我发现这是由 systemd 引起的:
Systemd 有一个阻止服务访问的功能,/tmp
称为 SecureTmp。按照此处所述为 Apache 停用此功能以进行测试解决了该问题。我现在将看到如何以不同的方式执行此操作,因为我不想禁用此功能。希望这对某人有帮助:-)
推荐阅读
- animation - NativeScript Grid 行高调整动画
- intellij-idea - 如何撤消上次丢弃的 2 个未提交文件?
- amazon-web-services - 如何在 EMR 集群上访问此路径 /etc/hadoop/conf?
- javascript - 在 Node.js 中需要 posix cksum
- vue.js - vuejs 计算属性 - 何时触发更新?
- python - ValueError:名称投影仪的重复插件
- azure-data-explorer - 如何在 Azure 数据资源管理器中对 JSON 对象进行动态联接
- android - 底页和 ListView
- node.js - ValidationError:产品验证失败:年龄:需要路径“年龄”。,名字:需要路径“名字”
- numpy - 获取颜色和颜色列表之间的欧几里得距离