<-
Apache > HTTP Server > 文件 > 2.4 版 > 模組

Apache 模組 mod_authz_dbd

可用語言:  en  |  fr 

說明使用 SQL 進行群組授權和登入
狀態延伸
模組識別碼authz_dbd_module
原始檔mod_authz_dbd.c
相容性適用於 Apache 2.4 及更新版本

摘要

這個模組提供授權功能,讓已驗證使用者可以透過群組成員權取得網站部分區域的存取權限或遭到拒絕存取。mod_authz_groupfilemod_authz_dbm 提供類似的功能,但與這個模組不同的是,這個模組會查詢 SQL 資料庫,以確定使用者是否為群組的成員。

這個模組也可以提供資料庫備份的使用者登入/登出功能。這些功能與 mod_authn_dbd 結合使用時特別有價值。

這個模組仰賴 mod_dbd 來指定後端資料庫驅動程式和連線參數,並管理資料庫連線。

top

Require 指令

Apache 的 Require 指令使用在授權階段來確保使用者可以存取資源。mod_authz_dbd 擴充授權型別,新增了 dbd-groupdbd-logindbd-logout

從 2.4.8 版開始,DBD require 指令支援 表達式

Require dbd-group

這個指令指定使用者取得存取權限所需要的群組成員權限。

Require dbd-group team
AuthzDBDQuery "SELECT user_group FROM authz WHERE user = %s"

Require dbd-login

這個指令指定一個查詢,用來表示使用者已登入。

Require dbd-login
AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"

Require dbd-logout

此指令指定一個查詢來執行,指出使用者已登出。

Require dbd-logout
AuthzDBDQuery "UPDATE authn SET login = 'false' WHERE user = %s"
top

資料庫登入

除了檢查群組成員身份的標準授權功能外,此模組也能提供伺服器端使用者會話管理,透過資料庫後端登入/登出功能。更具體地來說,它可以在使用者造訪指定的 URL 時更新資料庫中使用者的會話狀態(當然會要求使用者提供必要的憑證)。

其運作方式是定義兩個特殊的 Require 類型:Require dbd-loginRequire dbd-logout。有關使用細節,請參閱以下的設定範例。

top

整合用戶端登入

有些管理員可能希望實作用戶端會話管理,與此模組提供的伺服器端登入/登出功能協同運作,例如在使用者登入或登出時設定或取消設定 HTTP cookie 或其他此類令牌。

為了支援此類整合,mod_authz_dbd 匯出了一個選用掛鉤,此掛鉤將在資料庫中更新使用者的狀態時執行。其他會話管理模組接著可以使用這個掛鉤來實作啟動和結束用戶端會話的功能。

top

設定範例

# 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>
top

AuthzDBDLoginToReferer 指令

說明決定是否在成功登入或登出,且存在 Referer 要求標頭時,將用戶端重新導向至參考頁面。
語法AuthzDBDLoginToReferer On|Off
預設值AuthzDBDLoginToReferer Off
內容目錄
狀態延伸
模組mod_authz_dbd

搭配 Require dbd-loginRequire dbd-logout 使用時,這會提供選項以將用戶端重新導向回參考頁面(在 Referer HTTP 要求標頭中的 URL,如果存在)。當沒有 Referer 標頭時,AuthzDBDLoginToReferer On 將會被忽略。

top

AuthzDBDQuery 指令

說明指定必要的作業的 SQL 查詢
語法AuthzDBDQuery query
內容目錄
狀態延伸
模組mod_authz_dbd

AuthzDBDQuery 指定一個 SQL 查詢來執行。這則查詢的目的取決於作用中的 Require 指令。

  • 當與 Require dbd-group 指令一起使用時,它會指定一個查詢,以在其中查詢現任使用者的群組。這是其他授權模組(例如 mod_authz_groupfilemod_authz_dbm)的標準功能。由查詢陳述式傳回的每一列的第一個欄位值應該是一個包含群組名稱的字串。可能會傳回零、一列或多列。
    Require dbd-group
    AuthzDBDQuery "SELECT group FROM groups WHERE user = %s"
  • 當與 Require dbd-loginRequire dbd-logout 指令一起使用時,它永遠不會拒絕存取,而只會執行一個 SQL 陳述式,旨在讓使用者登入或登出。使用者必須已使用 mod_authn_dbd 驗證。
    Require dbd-login
    AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"

在所有情況下,執行 SQL 查詢時,使用者的 ID 均會作為單一字串參數傳遞。可以使用 %s 格式規範說明符在查詢陳述式內參照它。

top

AuthzDBDRedirectQuery 指令

說明設定查詢以查詢使用者的登入頁面
語法AuthzDBDRedirectQuery query
內容目錄
狀態延伸
模組mod_authz_dbd

指定在成功登入 (或登出) 後使用的 SQL 查詢,以將使用者重新導向到特定使用者的 URL。執行 SQL 查詢時,使用者的 ID 會傳遞為單一字串參數。可以在查詢陳述中使用 %s 格式規範說明符來參照它。

AuthzDBDRedirectQuery "SELECT userpage FROM userpages WHERE user = %s"

查詢陳述傳回的第一列第一個值應該是包含要將使用者重新導向到的網址的字串。將會忽略後續列。如果沒有傳回列,則不會重新導向使用者。

請注意,如果同時設定 AuthzDBDLoginToReferer 和本指令,則 AuthzDBDLoginToReferer 會優先。

可用語言:  en  |  fr 

top

留言

注意事項
此處不是問答區段。請將在此處發表的意見導向改善文件或伺服器的建議,而且如果這些建議已實作或被認為無效/離題,則可能會被我們的協力廠商移除。關於如何管理 Apache HTTP Server 的問題應透過 IRC 頻道,即 Libera.chat 上的 #httpd,或是寄送至我們的 郵件清單