我正在尝试找出一种好的、安全的方法,使单个文件目录(我们的应用程序的一个实例)连接到一个单一的数据库,而不是多种可能性。我们以前做事的方式是每个客户都有一组文件和一个数据库,他们的文件组将被配置为直接链接到他们的数据库。这行得通,但是很难在所有客户中保持应用程序的标准化版本;确保每个人都有最新的更新。
我考虑的一种解决方法是拥有一个用于登录过程的独特的通用数据库。在该数据库中将有一个包含用户特定数据库名称的字段,然后将其存储在他们的 session 中。一旦他们登录,应用程序就会查看 session 以获取他们的数据库名称,并直接连接到该数据库。
我很确定这种方法会奏效,我只是担心它可能存在一些安全缺陷。关于如何处理这个问题有什么建议吗?
最佳答案
对于每个客户,您唯一需要知道的是数据库连接的用户、密码、数据库名和主机名。我只是将这些存储在一个配置文件中,每个客户一个,根据客户命名:
/path/to/configs/customer1.ini
/path/to/configs/customer2.ini
/path/to/configs/customer3.ini
然后您的应用会根据 VHOST 中设置的环境变量或 $_SERVER['HTTP_HOST'] 中的值来选择要加载的配置文件。
例如,您的 index.php 可能有如下内容:
if (!preg_match('/pattern to ensure valid hostname/', $_SERVER['HTTP_HOST'])) {
header('HTTP/1.1 403 Forbidden');
exit;
}
$config = '/path/to/configs/' . $_SERVER['HTTP_HOST'] . '.ini';
if (!file_exists($config)) {
header('HTTP/1.1 404 Not Found');
exit;
}
require_once $config;
然后创建:
/path/to/configs/customer.com.ini
作为:
dbname = whatever
user = whatever
pass = whatever
dbhost = whatever
(呃,抱歉,你不会 require_once 一个 ini 文件,但你明白了......)
关于php - 一组连接到多个数据库之一的 PHP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10919727/