代码改变世界

让Xlight使用SQLServer验证用户

2011-10-18 10:37  贼寇在何方  阅读(1224)  评论(7编辑  收藏  举报

在我们的一个数据管理系统的项目中,需要让FTP使用与系统相同的用户。这就需要让FTP服务端访问数据库,取得用户信息。

我们使用的Xlight FTP Server的外部权限鉴定功能能够轻松地实现这一功能。

 

环境

Windows 2008 R2 标准版

SQL Server 2008 R2 Express

Xlight 3.6.5

 

创建ODBC数据源

运行odbcad32,启动ODBC数据源管理器,在用户DSN中添加新项,选SQL Server

之后填写相关信息,直到完成。

最后一步不要忘了测试下数据源。

 

数据库的改动

Xlight对查询数据库返回的结果格式有一定要求,需要要对数据库做一些改动。

按照我们的设计,Xlight通过ODBC,在数据库中使用用户名和密码进行查询。如果查询成功,则取出到该用户对应的组。

例如原数据库表中有如下数据:

为了尽可能不影响原有数据库,我们选择使用创建视图而不是创建新表的方式来返回Xlight所需的数据。其中,Xlight ODBC数据库表结构可以在帮助文档中找到。

 

acct_table(用户表)

SELECT    0 AS host_id, 0 AS host_port, Account AS username, PasswordHash AS password, 0 AS no_password, NULL AS home_path, NULL AS home_perm, Role AS groupname, NULL AS expire_time, 0 AS hide_pub_path, 0 AS hide_grp_path, 0 AS enable_quotas, 0 AS enable_ratios, 0 AS freeze_user, 0 AS bypass_svr_max, NULL AS virtual_path_indexes, 0 AS param_index
FROM    dbo.Account

acct_param_table(参数表)

SELECT    0 AS param_index, 0 AS max_down_speed, 0 AS max_up_speed, 0 AS max_user_conn, 0 AS max_conn_per_ip, 0 AS max_session_time, 0 AS max_down_file_num, 0 AS max_up_file_num, 0 AS max_session_down, 0 AS max_session_up, 0 AS max_down_file_size, 0 AS max_up_file_size, 0 AS disk_quotas, 0 AS ratios_type, 0 AS download_ratios, 0 AS upload_ratios, 0 AS starting_credit, 0 AS ftp_cmd_speed, NULL AS allowed_login_ip, NULL AS denied_login_ip, NULL  AS allowed_login_time, NULL AS deny_ftp_commands, NULL AS files_allow_access, NULL AS files_deny_access, 0 AS send_socket_buffer, 0 AS recv_socket_buffer

virtual_path_table(虚拟目录表)

SELECT    0 AS virtual_path_index, NULL AS virtual_path, NULL AS real_path, NULL AS permission

 

设置Xlight全局选项中的ODBC数据源

全局选项->高级->ODBC数据库设置,把刚才创建的ODBC数据源的信息输进去,测试通过后,即可确定。

 

设置站点的组用户

为了方便起见,我们把所有权限相关的设置放在了Xlight的组权限中。当然,放在数据库中也是可以的。

我们设定添加了新的组:“管理员”

注意这边的组的名称和数据库中的相同。

 

设置站点属性,启用外部用户鉴权

设定鉴权类型:ODBC,我们选择的密码类型:SHA1,勾选”忽略'host_id'列“、”忽略'host_id'列“

 

所有的设置完成,试着用FlashFxp登录下,成功。