如何在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查询错误.