首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Apache 整合 MySQL 實現高效能基本身份驗證

     編輯:MySQL 資料庫相關知識

為何選擇資料庫後端驗證?

傳統文字檔(平面搜尋效能差、不安全)與 DBM 格式(萬級用戶力不從心)在高負載下均表現不佳。採用 MySQL 等資料庫作為後端儲存,配合 DES 加密儲存密碼,兼具高效查詢與安全性。得益於 Apache 模組化 DSO 架構,第三方模組 mod_auth_mysql 可無縫擴充功能,同理支援 PostgreSQL、Oracle 等。

模組編譯與安裝

# 下載原始碼
wget ftp://ftp.kcilink.com/pub/mod_auth_mysql.c.gz
gunzip mod_auth_mysql.c.gz

# 以 DSO 方式編譯(假設 MySQL 客戶端庫在 /usr/local/lib/mysql)
apxs -c -i -a -L/usr/local/lib/mysql -lmysqlclient -lm mod_auth_mysql.c

關鍵參數:-L 指定 MySQL 客戶端庫路徑,缺失會導致 Apache 啟動時無法載入模組。

Apache 配置驗證

確認 httpd.conf 包含:

LoadModule mysql_auth_module libexec/mod_auth_mysql.so
AddModule mod_auth_mysql.c

重啟 Apache 無錯誤即安裝成功。

資料庫結構與測試資料

mysql> CREATE DATABASE auth;
mysql> USE auth;
mysql> CREATE TABLE mysql_auth (
    user_name CHAR(20) NOT NULL,
    user_passwd CHAR(25),
    groups CHAR(25),
    PRIMARY KEY (user_name)
);

# 密碼使用 UNIX crypt() (DES) 加密,非 MySQL PASSWORD()
mysql> INSERT INTO mysql_auth VALUES ('xingfei2', ENCRYPT('abcde'), 'xingfei');
mysql> INSERT INTO mysql_auth VALUES ('xingfei', ENCRYPT('abcde'), 'xingfei');

注意:欄位名必須為 user_name、user_passwd,密碼加密必須用 ENCRYPT()(相容 UNIX crypt),不可用 MySQL 內建 PASSWORD()。

目錄保護 .htaccess 設定

AuthName "xingfei"
AuthType Basic
AuthMySQLHost localhost
AuthMySQLUser root
AuthMySQLPassword abc
AuthMySQLDB auth
AuthMySQLUserTable mysql_auth
AuthMySQLGroupField groups
require group xingfei
require user xingfei

支援群組與個別用戶混合驗證,AllowOverride All 須在主配置中開啟。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved