【发布时间】:2020-01-31 15:42:19
【问题描述】:
我已在此处搜索了有关此问题的所有可用主题,但没有一个答案对我有用。
我已安装(Windows 10 64 位)Apache2.4(64 位)、PHP 7.4.2(64 位)和 SQL Server 2016(64 位)。 我已经更新了 php.ini 以包含
extension=php_sqlsrv.dll
它来自包 php_sqlsrv-5.7.1preview-7.4-ts-vc15-x64 并且当我运行 php -m 以列出所有模块 sqlsrv 已列出。
但是,当我尝试从 PHP 文件连接到 SQL 服务器时,它会失败并显示错误消息。
<?php
$serverName = "MYPC\\SQLINSTANCE";
$uid = "sa";
$pwd = "thePassword";
$databaseName = "TesterDB";
$connectionInfo = array( "UID"=>$uid,
"PWD"=>$pwd,
"Database"=>$databaseName);
/* Connect using SQL Server Authentication. */
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn )
{
echo "Connected";
}
else
{
echo "Error";
die( print_r( sqlsrv_errors(), true));
}
?>
错误信息:
用户“sa”登录失败。 ) [1] => 数组 ([0] => 42000 [SQLSTATE] => 42000 [1] => 4060 [code] => 4060 [2] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]无法打开请求的数据库“TesterDB” 通过登录。登录失败。
登录名和密码正确,PC 和实例名称也正确。 还有什么可能导致连接失败?一些格式问题?有些不兼容?
【问题讨论】:
-
您为什么首先尝试使用
sa帐户连接到您的SQL Server?应用程序永远不应使用sa帐户。我首先建议创建一个仅具有您的应用程序所需权限的登录名。然后,如果失败,请查阅 SQL Server 的日志,它会告诉您身份验证失败的确切原因(如果您不理解错误,请将其包含在您的问题中)。 -
“在我们使用的软件中,sa账户总是用来访问这个实例和数据库的。”嗯,这个需要改一下;这是一个糟糕的主意,原因有很多。如果您是网站,在这种情况下,该人可以访问字面上做他们想做的任何事情。你真的需要尽快修复你的安全模型。
-
“坦率地说,这对我没有兴趣” 因此,如果有人恶意使用 您的 应用程序为所欲为,这不是您的问题,因为 您不想获得权限受限的服务帐户?我的意思是没有冒犯,但这样的态度就是为什么安全漏洞最终会导致如此多的数据泄露;因为应该关心的人不关心。
-
听起来您的实例上没有数据库
TesterDB,但我仍然建议您修复这些凭据。这里表达的对数据安全的态度真的很差。如果您受到 GDPR 的影响(我怀疑您没有),那么这种不良做法将被视为一个重要因素,作为应用程序开发人员,您是负责确保您也拥有正确的工具;而sa帐户是完全错误的工具。 -
如果您无法控制,作为维护连接到数据库的应用程序的人,那么您需要联系确实有能力更改登录的人详细信息,并要求它发生。如果您对此不感兴趣,那么我很抱歉地说,但坦率地说,这只是疏忽,而且我不会雇用我的团队中对他们所涉及的应用程序有这种感觉的人。
标签: php sql-server apache