如何在Xlight FTP服務器使用數據庫存儲過程
Xlight FTP服務器可以配置使用數據庫存儲過程認證ftp用戶. 它提供了靈活性以集成Xlight FTP服務器到其他類型數據庫應.
在我們開始存儲過程指南之前, 我們需要解釋一些關於ODBC功能如何在Xlight FTP服務器內部運作.
Xlight FTP服務器使用2個數據庫表存儲用戶設置. Xlight FTP服務器ODBC功能最主要的表是"acct_table", 它存儲一個用戶基本的設置, 例如host_id, host_port, 用戶名, 口令和他的組, 主目錄和主目錄權限等. 第二個表是"acct_param_table", 由在"acct_table"查詢返回的"param_index"列做索引. 它存儲用戶的其他設置, 這些設置可以作為所有用戶的參數模板.
當用戶登錄到FTP服務器, Xlight FTP服務器裡將發送二次SQL查詢到這個數據庫, 驗證他的口令和獲得他的設置. 第一次SQL查詢用這個用戶名和口令, 在數據庫查找符合記錄, 並且獲得基本的參數, 例如"home_path", "home_perm"等. 第一次SQL查詢返回的"param_index"值為索引將用於第二次SQL查詢. 如果第一次SQL查詢不返回"param_index", Xlight FTP服務器將不會發送第二次SQL查詢. 第二次SQL查詢將查詢數據庫表「acct_param_table」獲得此用戶的更多參數.
在Xlight FTP服務器使用數據庫存儲過程
許多數據庫系統支持存儲過程. 我們使用MySQL數據庫作為例子. 使用MySQL之前, 你必須下載最新的 MySQL ODBC Driver - 3.51.16 或者更高版本. 否則,因為MySQL的Bug #27544, 第二次SQL查詢將會失敗. 其他類型的數據庫,你也最好升級數據庫相應的ODBC Driver到最新版本.
在使用存儲過程之前必須設置數據庫ODBC數據源. 你可以參考這裡的設置步驟.
在本例中, 我們有一個表"account_info"在這個數據庫裡. 此表是其他數據庫應用程序所使用, 它存儲用戶名, 口令和用戶發表的文章數目(posts). 我們也創建了另一個表"acct_param_table", 它是Xlight FTP服務器中的一張數據庫表, 用於存儲用戶參數. 我們沒有創建Xlight FTP服務器的主要數據庫表"acct_table ", 因為我們將使用存儲過程模擬其功能.
account_info
|
acct_param_table
|
下面代碼是範例MySQL存儲過程test () ,它接受2個參數, username_in和password_in.
DELIMITER $$ DROP PROCEDURE IF EXISTS test $$ CREATE PROCEDURE test(username_in VARCHAR(65), password_in VARCHAR(65)) main: BEGIN DECLARE user_name VARCHAR(65); DECLARE home_path VARCHAR(255); DECLARE home_perm VARCHAR(10); DECLARE num_posts, param_index INT(10); SELECT `account`, `Posts` INTO user_name, num_posts FROM account_info WHERE account = username_in AND password = password_in; IF user_name != username_in THEN LEAVE main; END IF; SET home_perm = 'LRS'; IF num_posts > 100 THEN SET param_index = 1; SET home_path = 'c:\\folder_1'; ELSEIF num_posts > 200 THEN SET param_index = 2; SET home_path = 'c:\\folder_2'; ELSE SET param_index = 0; SET home_path = 'c:\\folder_0'; END IF; SELECT home_path,home_perm,param_index; END $$ DELIMITER ;
存儲過程test()接受明碼文本口令的password_in參數. 你必須為虛擬服務器配置ODBC使用明碼文本口令, 如下圖所示
上面的存儲過程test()將檢查數據庫account_info驗證用戶, 如果用戶名或口令不符合, 將沒有結果集返回Xlight FTP服務器,這個用戶的驗證將失敗.
在成功的用戶認證以後, 這個程序將根據用戶在"account_info"表裡發表的文章數目(posts), 返回不同的param_index, home_path值. 最終test()程序將用語句"SELECT home_path,home_perm,param_index;"返回結果集到Xlight FTP服務器.
因為test()程序替換"acct_table"的功能, 您應該放置"call test('$USER','$PASS');"在選項"替換第一條內部SQL查詢語句"中,如下圖所示.
$USER和$PASS是預定義參數, Xlight FTP服務期將用登錄用戶實際的用戶名和密碼自動替換它們. 如果需要查詢支持的預定義參數, 請查閱幫助手冊的[全局選項]->[高級]這一節.
如果您想要解決數據庫查詢的問題,你可以選擇這個選項"記錄SQL查詢錯誤到系統錯誤日誌",你將能在系統錯誤日誌中看到SQL查詢錯誤.