如何对应用程序的不同“实例”使用不同的数据库领域进行身份验证?

如何对应用程序的不同“实例”使用不同的数据库领域进行身份验证?

我在 apache/httpd 上有一个 Web 应用程序。通过复制此应用程序并将其放在文档根目录下的不同目录中,我创建了该应用程序的一个新实例。我也为每个实例设置了一个新数据库。

我使用数据库领域来验证用户。

问题是我使用 MySQL 存储用户凭据,并且数据库信息存储在 httpd.conf 中,该信息对于所有实例都是全局的,如下所示(尚无密码):

DBDriver mysql
DBDParams "host=server_host port=3306 dbname=db_name user=user_name"

DBDMin  4
DBDKeep 8
DBDMax  20
DBDExptime 300

我想对不同的实例使用不同的数据库名称,或者对用于身份验证的数据库进行一些映射,这取决于访问的应用程序实例。

是否可以使用 Apache2 中内置的身份验证支持来解决问题?如果不行,可以采用哪些策略来解决问题?

答案1

答案是为每个应用程序实例使用虚拟主机。然后,您可以配置每个虚拟主机要使用的数据库。

例如,将其添加到httpd.conf:

NameVirtualHost *:80

<VirtualHost *:80>

ServerName 192.168.1.107
DocumentRoot /var/www/html/instance

DBDriver mysql
DBDParams "host=localhost port=3306 dbname=db_instance user=user"

DBDMin  4    
DBDKeep 8
DBDMax  20
DBDExptime 300


<Directory "/var/www/html/instance">

Options Indexes FollowSymLinks

AllowOverride None

Order allow,deny
    Allow from all

        AuthType Basic
        AuthName "Restricted Files"
        AuthBasicProvider dbd
        Require valid-user
        AuthDBDUserPWQuery "SELECT password FROM user WHERE user = %s"
</Directory>
</VirtualHost>

相关内容