| 描述: | 组授权和使用SQL登录 | 
|---|---|
| 状态: | 延期 | 
| 模块标识符: | authz_dbd_module | 
| 源文件: | mod_authz_dbd.c | 
| 兼容性: | 在Apache 2.4和更高版本中可用 | 
此模块提供授权功能,以便可以通过组成员身份来允许或拒绝经过身份验证的用户访问网站的某些部分。类似的功能是通过提供mod_authz_groupfile和
        mod_authz_dbm,与此模块查询一个SQL数据库,以确定用户是否是一个组的成员的异常。
该模块还可以提供数据库支持的用户登录/注销功能。与结合使用时,这些可能最有价值mod_authn_dbd。
该模块依赖于mod_dbd指定后端数据库驱动程序和连接参数,并管理数据库连接。
Require
    在授权阶段使用Apache的指令,以确保允许用户访问资源。mod_authz_dbd延长授权类型的dbd-group,dbd-login和
     dbd-logout。
从v2.4.8开始,DBD require指令支持表达式。
该指令指定用户获得访问权限所需的组成员身份。
Require dbd-group team AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"
该指令指定要运行的查询,指示用户已登录。
Require dbd-login AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
该伪指令指定要运行的查询,指示用户已注销。
Require dbd-logout AuthzDBDQuery "UPDATE authn SET login = 'false' WHERE user = %s"
除了检查组成员资格的标准授权功能之外,该模块还可以通过数据库支持的登录/注销功能提供服务器端用户会话管理。具体来说,每当用户访问指定的URL时,它就可以更新数据库中用户的会话状态(当然,这取决于提供必要凭据的用户)。
这通过定义两种特殊Require类型来起作用
 :
 Require dbd-login和Require dbd-logout。有关用法的详细信息,请参见下面的配置示例。
一些管理员可能希望实现与该模块提供的服务器端登录/注销功能协同工作的客户端会话管理,例如,通过在用户登录或注销时设置或取消设置HTTP cookie或其他此类令牌, 。
为了支持这种集成,请mod_authz_dbd导出一个可选的挂钩,该挂钩将在数据库中更新用户状态时运行。然后,其他会话管理模块可以使用该钩子来实现启动和结束客户端会话的功能。
# mod_dbd configuration
DBDriver pgsql
DBDParams "dbname=apacheauth user=apache pass=xxxxxx"
DBDMin  4
DBDKeep 8
DBDMax  20
DBDExptime 300
<Directory "/usr/www/my.site/team-private/">
  # mod_authn_core and mod_auth_basic configuration
  # for mod_authn_dbd
  AuthType Basic
  AuthName Team
  AuthBasicProvider dbd
  # mod_authn_dbd SQL query to authenticate a logged-in user
  AuthDBDUserPWQuery \
    "SELECT password FROM authn WHERE user = %s AND login = 'true'"
  # mod_authz_core configuration for mod_authz_dbd
  Require dbd-group team
  # mod_authz_dbd configuration
  AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"
  # when a user fails to be authenticated or authorized,
  # invite them to login; this page should provide a link
  # to /team-private/login.html
  ErrorDocument 401 "/login-info.html"
  <Files "login.html">
    # don't require user to already be logged in!
    AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"
    # dbd-login action executes a statement to log user in
    Require dbd-login
    AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
    # return user to referring page (if any) after
    # successful login
    AuthzDBDLoginToReferer On
  </Files>
  <Files "logout.html">
    # dbd-logout action executes a statement to log user out
    Require dbd-logout
    AuthzDBDQuery "UPDATE authn SET login = 'false' WHERE user = %s"
  </Files>
</Directory>
| 描述: | 确定是否在成功登录或注销时将客户端重定向到引荐页面(如果存在 Referer请求标头) | 
|---|---|
| 句法: | AuthzDBDLoginToReferer On|Off | 
| 默认: | AuthzDBDLoginToReferer Off | 
| 内容: | 目录 | 
| 状态: | 延期 | 
| 模块: | mod_authz_dbd | 
与Require dbd-login或
     结合使用Require dbd-logout,这提供了将客户端重定向回引荐页(RefererHTTP请求标头中的URL ,如果存在)的选项。当没有Referer头时,
     AuthzDBDLoginToReferer On将被忽略。
| 描述: | 为所需的操作指定SQL查询 | 
|---|---|
| 句法: | AuthzDBDQuery query | 
| 内容: | 目录 | 
| 状态: | 延期 | 
| 模块: | mod_authz_dbd | 
在AuthzDBDQuery指定SQL查询来运行。查询的目的取决于有效的
     Require指令。
Require dbd-group指令一起使用时,它指定查询以查找当前用户的组。这是其他授权模块(例如mod_authz_groupfile和)的标准功能
     mod_authz_dbm。查询语句返回的每一行的第一列值应为包含组名的字符串。可能会返回零,一或多个行。
    Require dbd-group AuthzDBDQuery "SELECT group FROM groups WHERE user = %s"
Require dbd-login或
     Require dbd-logout指令一起使用时,它将永远不会拒绝访问,而将执行旨在登录或注销用户的SQL语句。用户必须已经通过进行了身份验证
     mod_authn_dbd。
    Require dbd-login AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
在所有情况下,执行SQL查询时,用户ID都将作为单个字符串参数传递。可以使用%s格式说明符在查询语句中引用它。
| 描述: | 指定查询以查找用户的登录页面 | 
|---|---|
| 句法: | AuthzDBDRedirectQuery query | 
| 内容: | 目录 | 
| 状态: | 延期 | 
| 模块: | mod_authz_dbd | 
指定一个可选的SQL查询,该查询在成功登录(或注销)后用于将用户重定向到特定于该用户的URL。执行SQL查询时,用户ID将作为单个字符串参数传递。可以使用%s格式说明符在查询语句中引用它。
AuthzDBDRedirectQuery "SELECT userpage FROM userpages WHERE user = %s"
查询语句返回的第一行的第一列值应该是一个字符串,其中包含要将客户端重定向到的URL。随后的行将被忽略。如果未返回任何行,则不会重定向客户端。
请注意,AuthzDBDLoginToReferer如果两者都设置,则优先。