我想要实现的是允许连接到MySQL服务器而不在PDO连接中定义密码,而不是我想在MySQL配置中定义它。
我已创建文件/etc/mysql/conf.d/nopass.cnf,内容为:
[client]
host = localhost
user = someuser
password = somepass
socket = /var/run/mysqld/mysqld.sock
从shell连接时,它按预期工作:
$ mysql -u someuser
mysql>
但是,我无法通过PHP连接:
new PDO('mysql:host=127.0.0.1:3306;charset=utf8;dbname=somedb', 'someuser');
new PDO('mysql:host=127.0.0.1:3306;charset=utf8;dbname=somedb', 'someuser', null);
new PDO('mysql:host=127.0.0.1:3306;charset=utf8;dbname=somedb', 'someuser', );
在每种情况下,我都会收到错误
PDOException: SQLSTATE[HY000] [1045] Access denied for user 'someuser'@'localhost' (using password: NO)
如果我设置了正确的密码
,则有效new PDO('mysql:host=127.0.0.1:3306;charset=utf8;dbname=somedb', 'someuser', 'somepassword');
是否可以使这项工作?
答案 0 :(得分:0)
就我的测试而言,PDO 要求在密码字段中提供某些内容,因此无论您使用什么配置设置,它都会尝试使用自己的语法。如果没有密码,则密码字段应设置为空字符串,即 ''
并提交该空字符串作为您的密码。简短的回答是,AFAIK 不可能做你正在尝试的事情。
如果您的主要担忧是由于有人找到一种方法来窥探您的 PHP 文件而导致密码泄露,那么将其放置在客户端配置中是一种尝试规避这种情况的好方法,但也有一些本机 PHP 方法也可以隐藏敏感信息,避免因 PHP 文件内容泄露而导致的潜在安全漏洞。
不久前我回答了一个类似的问题,其中谈到了我对 SQL 密码的 PHP 安全性提出的三个主要建议:Set up PDO connection without password,其中主要包括将 php 脚本移出您的 webdata 目录以及保护 php 文件不被直接访问,即使通过使用重定向来隐藏它们的存在来访问,并且如果直接访问文件本身,则具有返回 404 错误的代码。此外,我建议创建访问范围非常有限的 PHP 专有帐户,以便万一有人找到注入 sql 的方法,他们将无法执行或查看太多内容。有关我正在谈论的内容的示例,请随时点击链接阅读。