使用集成身份验证连接到PHP中的MSSQL服务器

时间:2015-06-10 14:36:38

标签: php sql-server-2008 windows-integrated-auth

我在MS Server 2012 R2上运行XAMPP。我需要建立一个只接受集成win身份验证的MSSQL服务器的连接 如果我只是尝试下面的操作,我会在SQL Server上遇到登录失败和错误日志,而SQL身份验证不是一个选项。它只接受来自某个用户的连接。显然PHP脚本没有在该帐户下运行。

$server = "sqlServerName";
$SQLUser = "username";
$SQLPass = "pw";
$SQLDatabase = "db";
$link = mssql_connect($server,$SQLUser,$SQLPass);

因为我使用PHP 5.3.1 sqlsrv_connect不是一个选项。我试图加载它的PHP驱动程序,但它只是没有工作。我无法更改sql server的身份验证,我无法使用任何其他版本的PHP。

我也无法打开secure_connection,因为我必须能够连接到需要" normal"的其他sql服务器。 sql身份验证:

mssql.secure_connection = Off

如何连接我有问题的sql server?

更新:将xampp升级到最新版本。 PHP现在是版本5.6.8即使我安装了必要的驱动程序并将每个dll添加到sqlsrv_connect(),我仍然无法使用php.ini。多次重启apache次。任何线索?

  

错误消息:致命错误:调用未定义函数sqlsrv_connect()

2 个答案:

答案 0 :(得分:7)

确定。如果不在服务器上调试服务器问题很困难,但我已经用php和SQL Server做了很多工作,所以我会尽力分享我的经验。

首先,非常高兴您从5.3.1更新了PHP的版本是古老而且非常不安全。以下是您系统的一些健全性检查。这可能对你没有任何帮助,但所有这些都值得检查。

  1. 首先确保您可以使用SQL Server Management Studio使用您提供的凭据连接到sql server。这意味着您在php中使用的凭据与Windows身份验证凭据相同。您应该能够同时拥有两个连接,以便您可以同时进行更改并测试连接。

    1. 启用tcp。 sql server配置管理器 - > SQL Server网络配置 - > sqlexpress的协议 - > tcp / ip(右键单击) - >属性 - >已启用(是) - > ip地址 - > IPAll - > TCP端口1433 - >好的
    2. 启用sql server auth。选择服务器(右键单击) - >属性 - >安全 - > sql server和windows身份验证模式 - >确定
    3. 在防火墙上打开sql server端口。 Windows控制面板 - >系统和安全 - > windows防火墙 - >高级设置 - >入境规则 - >新规则 - >端口 - > tcp - > 1433(或其他) - >允许连接 - >下一个 - >名称 - > sql server - >完成 - >重启电脑。
    4. 当然,如果您想通过非默认用户进行连接,则需要添加用户:sql server - >安全 - >登录(右键单击) - >添加登录 - >服务器角色 - > sysadmin - >确定
    5. 如果您进行任何这些更改,请重新启动sql server:Sql server configuration manager - > sql server services - > sql Server(右键单击) - >重新启动。
  2. 一旦确认可以与管理工作室联系,这里有php配置检查:

    1. 您可以通过创建仅包含函数phpinfo()的php页面来查看扩展本身是否可用。然后搜索 pdo_sqlsrv 。如果它存在,其余的检查可能没有必要,但是因为你已经这么长时间工作,所以无论如何都要检查它们。
    2. php的sql_srv扩展名应该是3.2版本的php 5.6你可以获得该库here
    3. 版本3.2要求可用的扩展程序here检查上一个链接的其他要求。您的操作系统可能会使用与此处链接的扩展名不同的扩展名。
    4. 找到你的php扩展目录。这通常是{php-install-directory} / ext。确保将下载的sqlsrv库的相应版本复制到此目录中。我的名字叫做#34; php_sqlsrv_55_ts.dll"和" php_dpo_sqlsrv_55_ts.dll"你会有56而不是55我想和" ts"应该匹配你的PHP安装。 " TS"意味着线程安全,另一个选项是" nts"不是线程安全的。你使用的那个取决于你的php安装。
    5. 我的php.ini文件按顺序包含这些行extension=php_sqlsrv_55_ts.dllextension=php_pdo_sqlsrv_55_ts.dll。但我认为订单不重要。再次,你的年龄将是56岁和#34; ts"可能是" nts"。
    6. 如果您根据这些进行了任何更改,请确保重新启动apache,然后检查pdo_sqlsrv是否在您的phpinfo()报告中。在重新启动apache后,请检查apache和php错误日志,看看是否有关于php尝试加载扩展的特定错误。如果您需要帮助,可以在这里发布。
  3. 一旦通过管理工作室中的auth creditionals连接到sql server,并在phpinfo()中查看pdo_sqlsrv,这里是代码中最后要查看的内容。

    1. 上面的代码仍然适用于mssql扩展。您可能只是没有使用最新的更改来更新它。对于sql server扩展,您的代码应如下所示:

      $connectionInfo = array( 'UID' => $dbuser, 'PWD' => $dbpass, 'LoginTimeout' => 1, ); $host = $host . ', ' . $port; $connection = sqlsrv_connect($host, $connectionInfo); $error_messages = sqlsrv_errors();

    2. 对于Windows身份验证,请排除uid和pwd。

      $connectionInfo = array(); $conn = sqlsrv_connect( $host, $connectionInfo);

  4. 如果您有更多问题,请告诉我哪个步骤不起作用,以便我们可以深入了解该步骤。

答案 1 :(得分:0)

返回到PHP 5.3.1堆栈,其中mssqlconnect()正在运行。 SQL Server集成模式需要经过身份验证的用户,该用户可以访问运行SQL Server的计算机。因此,如果您可以在SSMS中与用户建立连接,则需要使用用户的凭据启动XAMPP,Apache / httpd。如果apache作为服务运行,请转到服务面板(运行中的services.msc),然后转到Apache-> properties-> logon->'此帐户'并输入您的用户名和密码,以便apache服务与您的凭据一起运行,该凭据经过身份验证以连接到SQL Server实例。默认情况下,httpd是使用系统帐户运行的,显然未被远程计算机上的SQL Server验证,这让您头疼。

相关问题