Xlight FTP/使用数据库存储过程

来自站长百科
跳转至: 导航、​ 搜索

Xlight FTP | Xlight FTP安装 |Xlight FTP使用

使用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 ", 因为我们将使用存储过程模拟其功能.

A1.jpg


下面代码是范例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使用明码文本口令, 如下图所示

A2.jpg


上面的存储过程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查询语句"中,如下图所示.


A3.jpg

$USER和$PASS是预定义参数, Xlight FTP服务期将用登录用户实际的用户名和密码自动替换它们. 如果需要查询支持的预定义参数, 请查阅帮助手册的[全局选项]->[高级]这一节.

如果您想要解决数据库查询的问题,你可以选择这个选项"记录SQL查询错误到系统错误日志",你将能在系统错误日志中看到SQL查询错误.


参考来源[ ]


Xlight FTP使用手册导航

Xlight FTP安装

Xlight FTP服务器安装

Xlight FTP使用

使用Xlight FTP的UPnP功能 | 设置Xlight FTP SSL/TLS功能 | 设置Xlight FTP SSH2/SFTP协议 | UNC路径账号身份模拟功能 | 使用ODBC用户数据库 | 使用数据库存储过程 | 将文件传输日志通过ODBC写入数据库 | 设置电子邮件通知 | 整合微软活动目录 | 整合LDAP服务器 | 设置外部认证的默认用户