Xlight FTPªA°È¾¹¥i¥H¨Ï¥Î¥~³¡ªº¥Î¤á¼Æ¾Ú®wÀò±o¥Î¤á°Ñ¼Æ.µù·N: ¥u¦³±M·~ª©¥»ªºXlight FTPªA°È¾¹¦³³oÓ¥\¯à, ¥Î¤á¦b30-¤Ñ¸Õ¥Î´Á¤]¥i¥H¸Õ¥Î³oÓ¥\¯à.¨Ï¥Î¥~³¡¥Î¤á¼Æ¾Ú®w¤è«K¨t²ÎºÞ²zûºÞ²z¤j¶q¥Î¤á.
¨Ï¥Î¥~³¡¥Î¤á¼Æ¾Ú®w»Ýn°t¸mODBC¼Æ¾Ú·½. ¤U±¥HMySQL¼Æ¾Ú®w¬°¨Ò. ¹ï©ó¨ä¥L¼Æ¾Ú®w,³]¸m¤èªk«ÜÃþ¦ü.
¨Ï¥Î³oÓ¥\¯à¤§«e, §Aº¥ý»Ýn³]¸mODBC¼Æ¾Ú·½.
1. MySQL ODBC¼Æ¾Ú·½¥i¥H¦bºô§}http://www.mysql.com/downloads/api-myodbc.html¤U¸ü.¦b¹B¦æXlight FTPªA°È¾¹ªº¾÷¾¹¤W¦w¸ËMySQL ODBC¼Æ¾Ú·½.
2. ¦w¸Ë§¹mysql ODBC¼Æ¾Ú·½«á§A»Ýn¨ìWindows"±±¨î±ªO-ºÞ²z¤u¨ã"¤¤¦b"¨t²ÎDSN"¼Ðñ¤º²K¥[MySQL¼Æ¾Ú·½.
3. ¿ï¾Ü"¨t²ÎDSN"¤ºªº"²K¥[(D)..."«öÁä¡A¿ï¾Ü"MySQL ODBC Driver"¡A«ö"§¹¦¨"«öÁä.
4. ¦b³oÓ¨Ò¤lùØ, §Ų́ϥΠ"Xlight FTP Server" §@¬°¼Æ¾Ú·½¦W¦r. §A¥i¥H¨Ï¥Î¥ô¦ó¼Æ¾Ú·½¦W¦r. ³oùذ²©wMySQL¼Æ¾Ú®w¦b»·ºÝ192.168.11.2ªºLINUXªA°È¾¹¤W. §Ú̲{n¦b¨ä¤¤³Ð«Ø¤@Ó¦W¦r¬O"ftp_user_db"ªºªÅ¼Æ¾Ú®w. ³oùاA¥i¥H¨Ï¥Î¥ô¦ó¼Æ¾Ú®w¦W¦r. ¦b¾÷¾¹192.168.11.2¤W, ¦bMySQL©R¥O´£¥Ü²Å mysql>, Áä¤J©R¥O"create database ftpd_user_db;"
³Ð«Ø¤@Ó¦W¦r¬O "ftpd_user_db" ªº¼Æ¾Ú®w. ¦pªG§A»Ýn¦b¼Æ¾Ú®w¤¤¨Ï¥ÎÁcÅ餤¤å¦r²Å¶°¡A¦b"MySQL ODBC Driver"ªº[²Ó¸`]-[³s±µ]-[¦r²Å¶°]¤¤½s½Xn³]¬°BIG5.
5. §A»Ýn¦bXlight FTPªA°È¾¹ªº [¥þ§½¿ï¶µ]->[°ª¯Å]->[ODBC ¼Æ¾Ú®w³]¸m] ¤¤°t¸m¥~³¡¼Æ¾Ú®w". §A»Ýn¶ñ¤J¼Æ¾Ú®w¥Î¤á©M±K½X,¥H¤ÎODBC¼Æ¾Ú·½. ¦pªG§A·Q¤â¤u³Ð«Ø¼Æ¾Ú®wªí, §A¥i¥H¸õ¨ì¨BÆJ 7. ¦b³oÓ¨Ò¤lùØ,§Ṵ́²©w¼Æ¾Ú®w¥Î¤á"test"¹ï¼Æ¾Ú®w"ftpd_user_db"¦³§¹¥þªº³X°ÝÅv. §A¥i¥HÂIÀ»"³Ð«Ø"Áä,ÅýXlight FTPªA°È¾¹´À§A¦b¼Æ¾Ú®wùسЫػÝnªº¼Æ¾Ú®w.§A¤]¥i¥HÂIÀ»"´ú¸Õ"Áä,Àˬd§A¬O§_¤w¥¿½T³Ð«Ø¼Æ¾Úªí.
µù·N: ¹ï©ó64bit¨t²Î, §A»Ýn¥Î32bit ODBCºÞ²zµ{§Ç³]¸mDNS. 32bit ODBCºÞ²zµ{§Ç¦bC:\Windows\sysWOW64\odbcad32.exe. ¨ãÅéì¦]¥i¥H¬d¬Ý http://support.microsoft.com/kb/942976.
6. ³q¹LODBC¨Ï¥Î¥~³¡¥Î¤á¼Æ¾Ú®w»{ÃÒ, §A»Ýn¨ì [µêÀÀªA°È¾¹³]¸m]->[³q¥Î]->[µêÀÀªA°È¾¹], ¿ï¾Ü¿ï¶µ"±Ò¥Î¥~³¡¥Î¤áųÅv" . ³æÀ»"³]¸m..."Áä, ¦bµêÀÀªA°È¾¹ªº"ųÅvÃþ«¬" ¤¤¥²¶·¿ï¾ÜODBC, ¦p¤U¹Ï©Ò¥Ü:
7. ³oÓ¨BÆJ¥u¬O¥Î©ó¤â¤u³Ð«Ø¼Æ¾Ú®wªí. ¦pªG§A¤w¸g¦b²Ä5¨B§¹¦¨¼Æ¾Ú®wªíªº³Ð«Ø,§A¥i¥H©¿²¤³oÓ¨BÆJ. ¤â¤u³Ð«Ø¼Æ¾Ú®wªí,¦b¼Æ¾Ú®w¤¤»Ýn¨âÓªí: acct_table and acct_param_table. §A¥i¥H¦bXlight FTPªA°È¾¹ªº¦w¸Ë¥Ø¿ý¤¤ªºodbc¥Ø¿ý¤U§ä¨ì¤å¥ó "odbc_tables.sql". §A¥i¥H¥Î³oÓ¤å¥ó¤â¤u³Ð«Ø¼Æ¾Ú®wªí.
8. ¬°¤F¦w¥þªº¼Æ¾Ú®w³X°Ý, ³Ð«Ø¤W±¨âÓªí¤§«á, §A¥i¥H¦b¼Æ¾Ú®w¤¤³Ð«Ø¤@Ó¥uŪ¥Î¤á,¥L¹ï"ftp_user_db"ªº¼Æ¾Ú®w¥u¦³SELECTªºÅv,¦p¤U©Ò¥Ü:
¦bMySQL©R¥O´£¥Ü²Å mysql>, Áä¤J©R¥O grant select on ftpd_user_db.*
anon@'192.168.11.%' Identified by "ftpd"; ³oùاA³Ð«Ø¤F¤@Ó·sªº¼Æ¾Ú®w¥Î¤á"anon",¥Lªº±K½X¬O"ftpd",¥L¹ï¼Æ¾Ú®w"ftpd_user_db"¥u¦³SELECTªº³X°ÝÅv. ³oÓ©R¥O¤]¨î¥Î¨Ó¬d¸ß¼Æ¾Ú®wªº³X°Ý¥u¯à¨Ó¦Ûºô¬q"192.168.11.0". µM«á§A¥i¥H±NXlight FTPªA°È¾¹ªº¥~³¡ODBC¼Æ¾Ú®w°t¸m¤¤ªº¥Î¤á©M±K½X§ï¦¨³oÓ¥uŪ¥Î¤á.
²{¦b§A§¹¦¨¤FODBC³]¸m¨BÆJ. ODBC¥\¯à¬O¦b¨CÓµêÀÀªA°È¾¹¤¤³æ¿W±Ò¥Îªº. ¦b¦P¤@ÓXlight FTPªA°È¾¹,§A¥i¥H¦³¤@¨ÇµêÀÀªA°È¾¹¨Ï¥ÎODBC¥~³¡¥Î¤á¼Æ¾Ú®w, ¦Ó¤@¨Ç¤£¨Ï¥Î. ¦pªG§A¿ï¾Ü¿ï¶µ "©¿²¤ host_id ¦C" ©Î "©¿²¤ host_port ¦C", ¦b¼Æ¾Ú®w¬d¸ß®É, Xlight FTPªA°È¾¹±N·|©¿²¤ "host_id" ©Î "host_port" ¦C. ¦]¬° "host_id" ¦C¥i¥H¥Î¨Óªí¥Ü¤£¦Pªº¾÷¾¹, ¦Ó "host_port" ¦C¥i¥H¥Î¨Óªí¥Ü¦b¦P¤@»O¾÷¾¹¤Wªº¤£¦PªºµêÀÀªA°È¾¹. ³o¨âÓ¿ï¶µ¥i¥H¥Î¨Ó¦b¤£¦P¹B¦æXlight FTPªA°È¾¹ªº¾÷¾¹¶¡¦@¨É¥Î¤á¼Æ¾Ú®w,¤]¥i¥H¦b¦P¤@Ó¾÷¾¹ªº¤£¦PµêÀÀªA°È¾¹¶¡¦@¨É¥Î¤á¼Æ¾Ú®w. ¦pªG§A¥u¥Î¼Æ¾Ú®wųÅv¥Î¤á, §A¥i¥H¿ï¾Ü¿ï¶µ "¥uÀˬd¥Î¤á¦W©M±K½X", ¨Ï¥Î³oÓ¿ï¶µ§A»Ýn¦b¥»¦aFTPªA°È¾¹³Ð«Ø¦P¦Wªº¥Î¤á. ¼Æ¾Ú®w¥u¬O¥Î¨ÓÀˬd¥Î¤á¦s¦b¼Æ¾Ú®w¤¤ªº±K½X. ·í³oÓ¿ï¶µ±Ò¥Î, ©Ò¦³ªº¥Î¤á³]¸m³£¬O±q¥»¦aªA°È¾¹¤¤¦P¦Wªº¥Î¤á³]¸mùØÀò±o.
§A¥i¥H¨Ï¥Î¥~³¡ªº¼Æ¾Ú®w¤u¨ã³s±µ¨ì¼Æ¾Ú®w¨Ã³Ð«Ø¥Î¤á. ³o¥u¬O¥Î©ó´ú¸Õ¥Øªº.
¦b¹ê»Úªº¥Í²£Àô¹ÒùØ, §A¥i¥H¨Ï¥Î PHP ©Î ¨ä¥L CGI ¸}¥»³Ð«Ø°ò©óºô¶ªº¬É±,¥Î©ó²K¥[,§R°£©Î¤¹³\¥Î¤á³q¹Lºô¶§ó§ï±K½Xµ¥µ¥.³oºØ¤è¦¡«K©óºÞ²z¤j¶qªº¥Î¤á.§A¤]¥i¥H©M§A²{¦³ªº¼Æ¾Ú®wÀ³¥Îµ²¦X. ¦]¬°Xlight FTPªA°È¾¹¥u»ÝnŪ¨ú¥Î¤á¼Æ¾Ú®w, ¦ý¤£¼g¤J¥Î¤á¼Æ¾Ú®w, §A¤£»Ýn¾á¤ß©M§A¨ä¥L¼Æ¾Ú®wÀ³¥Î¨R¬ð.
¦b¼Æ¾Ú®w³Ð«Ø¥Î¤á¤§«e, §A³Ì¦n¥ý¾\Ū Xlight À°§U¤åÀɤ¤, "ODBC ¼Æ¾Ú®wªíµ²ºc" ³o¤@¸`.
¥Î¤áªº±K½X¥i¥H¬O¥H MD5/SHA1 Hash©Î©ú½Xªº§Î¦¡¦s©ñ¦b¼Æ¾Ú®w. Àq»{¬O¨Ï¥ÎMD5 hash. §A¥i¥H¦bµêÀÀªA°È¾¹ªº¥~³¡¥Î¤á»{ÃÒ,ODBC³]¸m¤¤§ó§ï±K½XÃþ«¬. ¦pªG¨Ï¥Î MD5 hash, §A¥i¥H³q¹L·j¯Á"MD5 calculator" «Ü®e©ö¦bGoogle§ä¨ìMD5pºâªº¤u¨ã. ¦b§Ú̪º¨Ò¤lùإΤá¦W¬O "test" ¥Lªº±K½X¤]¬O "test" , ±K½XªºMD5 hashȬO"098f6bcd4621d373cade4e832627b4f6". ¦p¤U¹Ï©Ò¥Ü:
µù·N: ¦pªG¥Î¤áªº¥D¥Ø¿ý¤£¦s¦b, ·í¥L²Ä¤@¦¸µn¿ý®É, Xlight FTPªA°È¾¹·|¦Û°Ê¦b¥»¦a³Ð«Ø¥Ø¿ý. ¨Ò¦p, ·í¥Î¤á¦W¬O"test" ªº¥D¥Ø¿ý"c:\wutemp"¤£¦s¦b. ·í³oÓ¦W¦r¬O"test"ªº¥Î¤áµn¿ý®É, Xlight FTPªA°È¾¹·|¦Û°Ê¬°¥L³Ð«Ø³oӥؿý.
¦pªG§A·Q¨Ï¥Î§ó¦hªº¥Î¤á°Ñ¼Æ, §A¥i¥H¦b¼Æ¾Úªí "acct_param_table" ¤¤³Ð«Ø "param_index" ¦C. ¦b³o¤@¦æ¤¤¶ñ¤J§A·Q¨Ï¥Îªº°Ñ¼Æ, ¨Ã¥B±N³oӰѼƩñ¨ì³oӥΤá¦b"acct_table"ªí¤¤ªº"param_index"¦C. ¦C"param_index"ªºÈ¥i¥H¦b¤£¦P¥Î¤á¶¡¦@¨É, ¦]¦¹¦pªG§A¦³«Ü¦h¥Î¤á¦³¦P¼Ëªº°Ñ¼Æ, ¦b¼Æ¾Úªí "acct_param_table" ¤¤§A¤£»Ýn³Ð«Ø«Ü¦h¤£¦Pªº"param_index"¦æ.
¹ï©ó§A¤£¨Ï¥Îªº¼Æ¾Ú®wªí¤¤ªº¨º¨Ç¦C, §A¥i¥HÅý¥¦ÌªºÈ¬°ªÅ. ¦ý¦C "host_id", "host_port", "username" ¬O¥²¶·ªºÈ, §A¥²¶·¶ñ¼g. ¥t¥~¦pªG¨Ï¥Î"home_path"¦C,"home_perm"¦C¤]¥²¶·¶ñ¼g.
"virtual_path_table" ³Q¥Î¨Ó³]¸m¥Î¤áªºµêÀÀ¥Ø¿ý. ¤@ӥΤá¦b¼Æ¾Ú®w¤¤¥i¥H¦³¦hÓµêÀÀ¥Ø¿ý. ³o¨ÇµêÀÀ¥Ø¿ý¦b"virtual_path_table"ªí¤¤¦³¤£¦P©Î¬Û¦Pªº"virtual_path_index". ¦b"acct_table"¤¤ªº"virtual_path_indexes"¦C³q¹L"virtual_path_index"¦CÃì±µ¨ì"virtual_path_table"ªº¤@өΦhÓ¦æ. ¦pªG¥L¥]§t¦hÓ"virtual_path_index", ¥¦Ì¤§¶¡¥²¶·³q¹L","(³r¸¹)¤À¹j.
°Ñ¼Æ%username%¥i¥H¥Î©ó"virtual_path_table"ùتºreal path. %username%±N·|³Q´À´«¦¨¹ê»Úµn¿ýªº¥Î¤á¦W. ¦pªG¥Î¤áµn¿ý®Éreal path¤£¦s¦b, Xlight FTPªA°È¾¹±N·|¦Û°Ê³Ð«Ø¥Ø¿ý.
³q¹L¿ï¤¤¿ï¶µ"¦b¿ù»~¤é»xÅã¥Ü½Õ¸Õ¸òÂÜ«H®§"¡A¥i¥HÀ°§U§A¬d§ä¨Ã¸Ñ¨M¼Æ¾Ú®w»{ÃÒªº°ÝÃD¡A³oÓ¿ï¶µ¥i¥H¦b[µêÀÀªA°È¾¹³]¸m]->[±Ò¥Î¥~³¡¥Î¤áųÅv]§ä¨ì. ±Ò¥Î³oÓ¿ï¶µ«á, §A¥i¥H¦b¿ù»~¤é»x¬Ý¨ìXlight FTPªA°È¾¹¼Æ¾Ú®w¬d¸ß¹Lµ{.
·í¥Î¤áµn¿ýXlightªA°È¾¹®É¡AªA°È¾¹·|³q¹LODBC³s±µ¡A¥ÎSQL»y¥y¤À¨â¦¸¬d¸ß¼Æ¾Ú®w¡C
²Ä¤@ӼƾڮwªºSQL¬d¸ß¥Î©ó¦b¼Æ¾Ú®w¤¤§ä¨ì»P¥Î¤áµn¿ý®É¿é¤Jªº¥Î¤á¦W¡A±K½X¬Û¤Ç°tªº¬ö¿ý¡A¨Ã¥BÀò±oÃö©ó³oӥΤ᪺¤@¨Ç°ò¥»°t¸m°Ñ¼Æ¡A¦p"home_path", "home_perm" µ¥µ¥. ¦b³o¦¸¬d¸ß¤¤ªð¦^ªº"param_index"ȱN·|¦P®É¥Î¦b²Ä¤G¦¸¼Æ¾Ú®w¬d¸ß¡C
²Ä¤G¦¸¼Æ¾Ú®wªºSQL¬d¸ß±N·|¥Î²Ä¤@¦¸¬d¸ßªð¦^ªº"param_index"È¡A¬d¸ß¼Æ¾Ú®wªº"acct_param_table"¡A¥H±o¨ì§ó¦hªº¥Î¤á°Ñ ¼Æ³]¸m¡C
XlightªA°È¾¹¨Ï¥Îªº"acct_table"©M"acct_param_table"¼Æ¾Ú®wªí¥i¥H¤£¹ê»Ú¦s¦b»P¼Æ¾Ú®wùØ. XlightªA°È¾¹¨Ã¤£ª¾¹D"acct_table"©M"acct_param_table"¬O§_¦s¦b©ó¼Æ¾Ú®w¤¤. ¥¦¥u¬O³q¹L¹î¬Ý¨âÓSQL¬d¸ßªºªð¦^µ²ªG. ¦pªG²Ä¤@±øSQL¬d¸ß´À´«»y¥y±q¼Æ¾Ú®w¤¤ªð¦^¤@¦æ, XlightªA°È¾¹´N»{¬°¥Î¤áµn¿ýÅçÃÒ¦¨¥\¡A¦P®É¥¦·|±qªð¦^ªº¦æ¤¤¡AÀò±o¥Î¤áªº°ò¥»°t¸m°Ñ¼Æ. ¦pªG¼Æ¾Ú®w¨S¦³ªð¦^µ²ªG¡A¥¦»{¬°¥Î¤áµn¿ýÅçÃÒ¥¢±Ñ¡C ©Ò¥H¼Æ¾Ú®w¦pªG¤£·QÅý¥Î¤á³X°ÝªA°È¾¹¡A´N¤£nªð¦^SQL¬d¸ßµ²ªG. ¦b²Ä¤@±ø¬d¸ßªð¦^ªº"param_index"È,±N·|¥Î¦b²Ä¤G±øSQL¬d¸ß»y¥y¤¤.
XlightªA°È¾¹¤¹³\ºÞ²zû´À´«¤W±¨âÓSQL¬d¸ß»y¥y¡A¥H¤ä«ù°ª¯Åªº¼Æ¾Ú®wÀ³¥Î¡A¦p¼Æ¾Ú®wªº"¦sÀx¹Lµ{"(Stored Procedure), §A¥i¥H¬Ý³oÓ¨Ò¤l¦p¦ó¨Ï¥Î¼Æ¾Ú®w¦sÀx¹Lµ{
´À´«²Ä¤@±ø¤º³¡SQL¬d¸ß»y¥y - ¦b²Ä¤@±øSQL´À´«»y¥y¤¤¡A¥i¥H¨Ï¥Î¤U±ªºÅܶq:
$USER - ³oÓÅܶq±N¥H¥Î¤áªºµn¿ý¦W´À´«
$PASS - ³oÓÅܶq±N¥H¥Î¤áªº±K½X(MD5©ÎText)´À´«
$ID - ³oÓÅܶq±N¥H"¥»¦a¥D¾÷ID"´À´«
$PORT - ³oÓÅܶq±N¥HµêÀÀªA°È¾¹ªººÝ¤f´À´«
$USERIP - ³oÓÅܶq±N¥H¥Î¤áªºIP¦a§}´À´«
$SERVERIP - ³oÓÅܶq±N¥HµêÀÀªA°È¾¹ªºIP¦a§}´À´«
¨Ò¦p, ¦pªG¥Î»y¥y "EXEC proc_getuser '$USER', '$PASS', $ID, $PORT"
§@¬°²Ä¤@±øSQL»y¥yªº´À´«, ·í¥Î¤á¬O"test"ªº¥Î¤á¥H±K½X"hello"µn¿ý¨ìFTPªA°È¾¹21ºÝ¤f, ¥»¦a¥D¾÷ID¬O1,
¸g¹L´À´«³Ì«á°e¨ì¼Æ¾Ú®wªºSQL»y¥y¬O "EXEC proc_getuser 'test', 'hello', 21, 0".
´À´«²Ä¤G±ø¤º³¡SQL¬d¸ß»y¥y - ¦b²Ä¤G±øSQL´À´«»y¥y¤¤¡A¥i¥H¨Ï¥Î¤U±ªºÅܶq:
$INDEX - ³oÓÅܶq±N·|´À´«¬°²Ä¤@±øSQL´À´«¬d¸ß»y¥yªð¦^ªº"param_index"È.
$PORT - ³oÓÅܶq±N¥HµêÀÀªA°È¾¹ªººÝ¤f´À´«
$SERVERIP - ³oÓÅܶq±N¥HµêÀÀªA°È¾¹ªºIP¦a§}´À´«