Apache HTTP Server 版本 2.4
描述 | 使用 SQL 数据库进行用户身份验证 |
---|---|
状态 | 扩展 |
模块标识符 | authn_dbd_module |
源文件 | mod_authn_dbd.c |
兼容性 | 在 Apache 2.1 及更高版本中可用 |
此模块为身份验证前端(如 mod_auth_digest
和 mod_auth_basic
)提供支持,通过在 SQL 表中查找用户来进行身份验证。类似的功能由例如 mod_authn_file
提供。
此模块依赖于 mod_dbd
来指定后端数据库驱动程序和连接参数,并管理数据库连接。
在使用 mod_auth_basic
或 mod_auth_digest
时,此模块通过 AuthBasicProvider
或 AuthDigestProvider
使用 dbd
值调用。
一些 HTTPD 2.2/2.4 中使用 DBD 身份验证的用户报告说,它对数据库造成了严重的负载。这很可能是因为 HTML 页面包含数百个对象(例如图像、脚本等),每个对象都需要身份验证。受此类问题影响(或担心)的用户应使用 mod_authn_socache
来缓存凭据,并减轻数据库的大部分负载。
此简单示例展示了在身份验证和 DBD 框架上下文中使用此模块。
# mod_dbd configuration # UPDATED to include authentication caching DBDriver pgsql DBDParams "dbname=apacheauth user=apache password=xxxxxx" DBDMin 4 DBDKeep 8 DBDMax 20 DBDExptime 300 <Directory "/usr/www/myhost/private"> # mod_authn_core and mod_auth_basic configuration # for mod_authn_dbd AuthType Basic AuthName "My Server" # To cache credentials, put socache ahead of dbd here AuthBasicProvider socache dbd # Also required for caching: tell the cache to cache dbd lookups! AuthnCacheProvideFor dbd AuthnCacheContext my-server # mod_authz_core configuration Require valid-user # mod_authn_dbd SQL query to authenticate a user AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s" </Directory>
每当向数据库服务器发出查询时,查询返回的第一行中的所有列值都会被放置在环境中,使用以“AUTHENTICATE_”为前缀的环境变量。
例如,如果数据库查询返回了用户的用户名、全名和电话号码,那么 CGI 程序就可以访问这些信息,而无需进行第二次独立的数据库查询来收集这些额外信息。
这有可能极大地简化某些 Web 应用程序所需的编码和配置。
描述 | 查找用户密码的 SQL 查询 |
---|---|
语法 | AuthDBDUserPWQuery query |
上下文 | 目录 |
状态 | 扩展 |
模块 | mod_authn_dbd |
AuthDBDUserPWQuery
指定一个 SQL 查询,用于查找指定用户的密码。当执行 SQL 查询时,用户的 ID 将作为单个字符串参数传递。它可以在查询语句中使用 %s
格式说明符进行引用。
AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"
查询语句返回的第一行的第一列值应是一个包含加密密码的字符串。后续行将被忽略。如果未返回任何行,则用户将不会通过 mod_authn_dbd
进行身份验证。
查询语句返回的第一行中的任何其他列值都将存储为环境变量,其名称格式为 AUTHENTICATE_COLUMN
。
加密密码格式取决于正在使用的身份验证前端(例如 mod_auth_basic
或 mod_auth_digest
)。有关更多信息,请参阅 密码格式。
描述 | 查找用户和领域密码散列的 SQL 查询。 |
---|---|
语法 | AuthDBDUserRealmQuery query |
上下文 | 目录 |
状态 | 扩展 |
模块 | mod_authn_dbd |
AuthDBDUserRealmQuery
指定一个 SQL 查询,用于在摘要身份验证过程中查找指定用户和领域的密码。用户的 ID 和领域(按此顺序)将作为字符串参数传递,当执行 SQL 查询时。它们可以在查询语句中使用 %s
格式说明符进行引用。
AuthDBDUserRealmQuery "SELECT password FROM authn WHERE user = %s AND realm = %s"
查询语句返回的第一行的第一列值应是一个包含加密密码的字符串。后续行将被忽略。如果未返回任何行,则用户将不会通过 mod_authn_dbd
进行身份验证。
查询语句返回的第一行中的任何其他列值都将存储为环境变量,其名称格式为 AUTHENTICATE_COLUMN
。
加密密码格式取决于正在使用的身份验证前端(例如 mod_auth_basic
或 mod_auth_digest
)。有关更多信息,请参阅 密码格式。