Apache基於MySQL的身份驗證(轉)

post0發表於2007-08-09
Apache基於MySQL的身份驗證(轉)[@more@]

本文介紹在Apache中實現使用者身份驗證的方法,討論如何在MySQL資料庫中儲存驗證資訊,然後透過mod_auth_mysql模組實現身份驗證。

一、概述

   前文討論了在身份驗證中使用資料庫的方法,具體介紹了mod_auth_db模組和DB檔案的使用。這裡要介紹的是如何使用非常流行的MySQL資料庫儲存身份驗證資訊,再透過mod_auth_mysql訪問MySQL資料庫實現身份驗證。

  1.1 關於MySQL

   MySQL是一種優秀的資料庫伺服器,具有體積小速度快的特點。MySQL以GPL方式發行,它的主頁在http: //。MySQL缺少某些昂貴的大型資料庫所提供的功能,比如儲存過程、觸發子等等,但它具備了大多數中小型工程所需要的基本功能。另外,它還有一些非常實用的特色,比如可用於SQL命令的正規表示式等。

   由於MySQL是免費的,而且其表現又如此不俗,在UNIX家族的作業系統上它是很受歡迎的資料庫——特別是對於那些預算有限的使用者來說。另外請注意,MySQL也有在Windows上執行的版本。

  1.2 關於mod_auth_mysql模組

   我們可以使用mod_auth_mysql模組把使用者名稱字和密碼儲存到MySQL資料庫,然後直接使用它們進行身份驗證。

   使用這種方法除了能夠提高資料訪問速度之外,還有其他許多好處。例如,假設使用者資訊原來儲存在資料庫中,使用文字檔案進行密碼驗證時必須把使用者名稱字和密碼再複製一份,這樣你就得在兩個地方維護同樣的資料,如果這兩份資料不是同步更新,使用者就有可能不能登入。

   反過來,如果使用的是mod_auth_mysql,我們就可以直接用資料庫中的使用者資訊進行身份驗證,此時使用者資訊只需一份就足夠了,使用者名稱字和密碼可以用SQL命令更新,不會出現使用文字檔案時可能遇到的問題。另外,要修改使用者所屬的組也很方便。

二、安裝和配置

   要獲得mod_auth_mysql模組或者檢視它的詳細資料,請訪問。

   mod_auth_mysql可以編譯成DSO(Dynamic Shared Object,動態共享物件),然後只需透過配置指令即可將它安裝到伺服器上。關於DSO的更多說明,請參見Apache指南:新手安裝必讀。

   配置mod_auth_mysql模組時,我們必須告訴它要用哪一個資料庫來進行身份驗證,以及哪一個表、什麼欄位包含了驗證用的資訊。下面是配置mod_auth_mysql時必須瞭解的配置指令:

Auth_MySQL_Info [host] [user] [password]

   這個指令宣告資料庫在哪一個伺服器上執行以及訪問這個資料庫應該使用的使用者名稱字和密碼。只有當資料庫不在localhost(即本地機器)上執行或者訪問資料庫的不是httpd使用者時,我們才需要使用這個指令。

   如果所有的身份驗證操作都使用同一個資料庫,那麼你可以使用下面這個指令:

Auth_MySQL_General_DB [資料庫名字]

   否則,如果對不同目錄的身份驗證操作使用不同的資料庫,你可以忽略這個指令,然後在各個的目錄中指定所用資料庫。

   下面介紹的幾個指令既可用於httpd.conf配置檔案,也可用於各個目錄的.htaccess檔案。請參見Using .htaccess Files with Apache瞭解更多資訊。

   注意在為目錄設定密碼保護時可以應用通常使用的指令,如下所示:

AuthType Basic

AuthName "Members Only"

require group admin

Auth_MySQL_DB [資料庫名字]:宣告使用哪一個資料庫中的資訊進行身份驗證。

Auth_MySQL_Password_Table [密碼錶的名字]:宣告資料庫中哪一個表包含密碼資訊。除非特別宣告,否則預設包含使用者名稱字的欄位是“username”,包含密碼的欄位是“password”。但我們可以按照下面介紹的方法指定另外的欄位。

Auth_MySQL_Group_Table [儲存組資訊的表]:一般地,我們可以把使用者所屬組的資訊(groups欄位)和使用者名稱字、密碼儲存到同一個表中。但是如果有必要把它儲存到獨立的表,這裡可以指定該表的名字。

Auth_MySQL_Username_Field [使用者名稱字欄位]:如果儲存使用者名稱字資訊的欄位不是“username”,可以用這個指令指定實際使用的欄位名字。

Auth_MySQL_Password_Field [密碼欄位]:如果儲存密碼的欄位不是“password”,可以用這個指令指定實際使用的欄位名字。

Auth_MySQL_Group_Field [使用者所屬組的欄位]:如果儲存組資訊的欄位不是“groups”,可以用這個指令指定實際使用的欄位名字。

Auth_MySQL_Encrypted_Passwords on/off:告訴mod_auth_mysql模組儲存在資料庫中的密碼是否經過加密。預設on,即假定資料庫中儲存的密碼是經過加密的。

   還有其他一些指令,不過經常要用到的就是上面這些。下面是.htaccess檔案的一個例子:

Auth_MySQL_Info localhost db_user db_password

Auth_MySQL_DB authentication

Auth_Mysql_Password_Table passwords

AuthType Basic

AuthName "Members Only"

require valid-user

   上例假定儲存使用者名稱字的欄位是username,密碼經過加密再儲存到password欄位。

三、其他

   只要按照上面介紹的方法設定好了.htaccess檔案,訪問該目錄下面的頁面時就會出現密碼輸入視窗。對於使用者來說,不同的密碼保護實現方法並沒有什麼差別。

   你可以使用任何自己熟悉的資料庫管理工具管理使用者資訊,目前似乎還沒有象dbmmanage一樣從命令列管理資料庫裡使用者資訊的簡單工具。

   但我們可以透過Perl和DBI運算元據庫。下一篇文章要討論的就是用Perl管理密碼檔案的諸多優點。用Perl管理密碼的方法實在很多,所以讓它單獨成文應該是比較合適的。

   結束語:使用mod_auth_mysql,我們可以把使用者名稱字、密碼和所屬組資訊儲存到MySQL資料庫。MySQL是一種小型、快速、免費的資料庫伺服器,大多數流行的作業系統上都有MySQL的相應版本

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-937361/,如需轉載,請註明出處,否則將追究法律責任。

相關文章