May 4
- 作者:heero
- 时间:2011-5-4 12:45
MySQL是开源软件,但开源不意味着免费,开源软件的使用应遵循该软件提供的使用授权许可。MySQL的授权许可是英文的,而且一直以来没有权威的中文译本,所以很多人都不清楚其中的细节。
最近我在做一些ASP.NET+MySQL的应用,特地对MySQL的授权许可进行了研究。
(以下说明,如有错误,欢迎指正)
使用MySQL作为数据库的应用是否会“被GPL”
MySQL开源软件(包括MySQL社区版数据库服务器、驱动程序和链接库等)是在GPL许可下提供的。GPL(General Public License)是一种开源许可,其大概的内容是:只要在一个软件中使用(“使用”指类库引用,修改后的代码或者衍生代码)GPL协议的产品,则该软件产品也必须采用GPL协议,即必须也开源。
应用程序是否也必须采用GPL进行开源,是由
Jun 24
- 作者:heero
- 时间:2010-6-24 20:25
自从用上SQLite数据库以来,就一直在用SQLite Expert作为图形化管理工具。这个工具的功能非常强大,但糟糕的是,它是一款收费软件,因此之前用的都是破解版。近来在忙前端的工作,好久没打开这个工具了。今天一开,提示版本更新了,而且最新的版本号是3.0.20,比我当前用的2.3.9要高出一个大版本号。
访问官网后发现,SQLite Expert已经分为个人版和专业版两个版本,个人版是免费的,专业版售价$59。下载了个人版并安装好后,立刻开始试用。3.x版本的图标变了:

但界面还是老样子,没有太大的区别:
May 3
- 作者:heero
- 时间:2010-5-3 12:56
SQL注入漏洞曾经是Web应用程序的噩梦,CMS、BBS、Blog无一不曾受其害。
SQL注入的原理
以往在Web应用程序访问数据库时一般是采取拼接字符串的形式,比如登录的时候就是根据用户名和密码去查询:
string sql = "SELECT TOP 1 * FROM [User] WHERE UserName = '" + userName + "' AND Password = '" + password + "'";
其中userName和password两个变量的值是由用户输入的。在userName和password都合法的情况下,这自然没有问题,但是用户输入是不可信的,一些恶意用户只要用一些技巧,就可以绕过用户名、密码登录。
假设password的值是"1' or '1' = '1",userName的值随便取,比如是"abc",那变量sql的值就是:
"SELECT TOP 1 * FROM [Use
Jul 27
- 作者:heero
- 时间:2009-7-27 21:46
目前流行的数据库都提供了自动编号类型,SQLite也不例外。当数据库中包含自动编号的字段时,SQLite会自动建立一个名为 sqlite_sequence 的表。这个表包含两个字段:name 和 seq 。name字段记录了自动编号字段所在的表,seq字段记录了当前用到的序号(下一条记录的编号就是当前序号加1)。
在开发过程中,我们经常要把表重置。也就是说把表中的记录全部清空,并把自动编号归0。在SQLite中,只需要修改 sqlite_sequence 表就可以了:
UPDATE sqlite_sequence SET seq = 0 WHERE name = 'TableName'
也可以直接把该记录删掉:
DELETE FROM sqlite_sequence WHERE name = 'TableName'
要是想重置所有表,那直接把 sqlite_sequence
Jul 27
- 作者:heero
- 时间:2009-7-27 17:40
大部分数据库在进行字符串比较的时候,对大小写是不敏感的。但是,最近使用SQLite的时候,却发现它的情况恰好相反。
假设表User的结构和值如下:
执行下面的SQL语句:
SELECT * FROM [User] WHERE UserName = 'user1'
结果是没有找到任何记录。明显地,SQLite在进行字符串比较的时候,默认对大小写是敏感的。这会对应用程序造成不良的影响。比如