是否可以在通过php连接到SQL Server 2012时加密密码


Is it possible to encrypt passwords while connecting to SQL Server 2012 through php?

我正在尝试在连接到SQL Server 2012时加密密码。我知道有两种方法可以做到:

$serverName = "serverName"; 
$connectionInfo = array( "Database"=>"DbName", 
                         "UID"=>"UserName", 
                         "PWD"=>"Password", 
                         "Encrypt"=>true, 
                         "TrustServerCertificate"=>false); 
$conn = sqlsrv_connect( $serverName, $connectionInfo);

$uid = file_get_contents("C:'AppData'uid.txt");
$pwd = file_get_contents("C:'AppData'pwd.txt");
$connectionInfo = array( "UID"=>$uid,
                         "PWD"=>$pwd,
                         "Database"=>"AdventureWorks");

但是我想知道是否可以在不提及连接字符串中的原始密码的情况下对其进行加密。

我尝试使用以下代码,但收到一条错误消息,指出登录失败。

$serverName = "serverName"; 
$connectionInfo = array( "Database"=>"DbName", 
                         "UID"=>"UserName", 
                         "PWD"=>"7110eda4d09e062aa5e4a390b0a572ac0d2c0220"); //Encrypted Password
$conn = sqlsrv_connect( $serverName, $connectionInfo);

这似乎是不可能的,此外,它并不是真正有用。不幸的是,为什么要在代码中加密它(除非您使用直接套接字),mysql(或mssql或pgsql等)密码将始终在您的代码中可见。

但是由于没有人能够看到您的代码(除非您的网站被黑客入侵),因此这不是真正的问题。但就目前而言,我不会将其作为一个问题,但也许你有充分的理由这样做。

如果你

担心有人看到你的配置文件,你可以使用环境变量来存储你的密码,在Linux中有bashrc,我相信你也可以在Windows中设置环境变量,一旦你设置了它,你可以像这样使用PHP调用环境变量$_ENV["MY_DB_PW"]。以多种方式使用系统的人仍然可以访问此功能,但至少他们不会在配置文件中看到纯密码;)希望有帮助。

我过去研究过类似的东西,我认为解决方案是一个硬件安全模块(HSM),用于将您的密码存储在服务器之外。

您可以在此处阅读有关它们的信息:https://en.wikipedia.org/wiki/Hardware_security_module