偶看博客建立数据库连接时出错

偶看刚刚登陆博客的时候,网站出现大大个的提示——建立数据库连接时出错。偶看在想,不应该啊,最近啥也没做。

偶看尝试登陆后台,系统提示“一些数据表不可用。也许需要修复数据库。”,点击”修复数据库“,提示在配置文件添加

(‘WP_ALLOW_REPAIR’, true);

在配置文件添加好以上代码后,点击修复数据库,系统提示:

wp_users数据表正常。

wp_usermeta数据表正常。

wp_posts数据表正常。

wp_comments数据表正常。

wp_links数据表正常。

wp_options数据表正常。

wp_postmeta数据表正常。

wp_terms数据表正常。

wp_term_taxonomy数据表正常。

wp_term_relationships数据表正常。

wp_commentmeta数据表正常。

修复完成。请移除刚刚在wp-config.php中添加的那行代码,以防他人滥用本页面。

define(‘WP_ALLOW_REPAIR’, true);

修复成功,偶看博客已经能够正常访问了。

看来Wordpress的修复还真是简单方便,只是偶看不知道数据库哪里出了问题。

疯狂的英文垃圾评论

偶看帮朋友查看网站,是一个企业网站,很早以前制作的,自从网站上线后,除了在早期添加完产品信息外,就没有去维护。最近需要更新产品信息,但是无法添加,网站后台提示出错。

偶看直接进入网站的FTP将数据库下载分析,因为网站程序多年没有改动,出问题的一般就是数据库了,这个网站是基于ASP+ACCESS架构的。

英文垃圾评论

企业站的中文版数据库有1.73MB,但是英文版的数据库竟然有444.19MB,偶看直接傻眼,这是什么情况,ACCESS的数据库竟然有400多MB,而网站还没被关停。想到早年,偶看建立的一个网站ACCESS数据库超过60MB就因为太耗费资源被主机商给关停了。这400多MB的数据库,偶看下载了一个多小时才搞定。

网站后台提示的错误是因为数据库的产品信息表中有个字段没有填写,将该字段的内容补充完整,网站各项功能恢复正常。

偶看打开英文版的ACCESS数据库,发现数据库如此庞大的原因是有164478条英文垃圾留言,这么多年以来,都没有删除过。偶看直接将该表的数据清空,压缩并修复数据库,完成后,数据库的大小只有1.12MB,真是天差地别。

在国内,垃圾信息一般是往行业站、B2B站、论坛和博客等群发,比较少想企业站群发,而英文垃圾评论则是到处发,信息发布面极广,只要页面中含有英文都可能是其发布信息的对象。而这个企业站对留言没有添加任何的防护功能,连验证码都没有,偶看只能表示无语。

wordpress换域名

wordpress换域名后,在新域名解析成功后,朋友们会发现在浏览器输入http://新域名/wp-admin(wordpress默认管理后台),会变成http://旧域名/wp-admin。这是因为MYSQL数据库中保存的还是旧域名的数据。

换域名后,需要通过phpmyadmin进入wordpress的数据库,默认为wp_options表,找到字段option_value,修改该字段中的域名为新域名。

这时候再通过新域名进入wordpress管理后台,就是正确的管理后台了。

当然这时候虽然后台正确了,还网站前台的域名还没有修改,您还需要进入:仪表盘–常规–站点地址(URL),在这个文本框后输入您的新域名,点击保存后,wordpress前台页面的域名也就全部更换好了。

当然,最直接的办法还是您在更换新域名之前,在旧域名WordPress管理后台,点击设置–常规,将里面的WordPress 地址(URL)和站点地址(URL)都修改为新域名,然后点击保存,退出即可!

Access数据库各项最大值

文件大小 2 G 字节

access 2000中文版为例
打开帮助,找到以下条目
设置和定义microsoft Access -> Microsoft Access 规格
Microsoft Access 数据库常规规格
属性 最大值
Microsoft Access 数据库 (.mdb) 文件大小 2 G 字节。不过,由于数据库可以包括其他文件中的链接表,所以它的大小仅实际上只受可用存储空间大小的限制。
数据库中的对象个数 32,768
模块(包括 HasModule 属性为 True 的窗体和报表) 1,000
对象名称的字符数 64
密码的字符个数 14
用户名或组名的字符个数 20
用户个数 255
Microsoft Access 项目常规规格
属性 最大值
在 Microsoft Access 项目 (.adp) 中的对象数目 32,768
模块(包括 HasModule 属性为 True 的窗体和报表) 1,000
对象名称中字符的数目 64
Microsoft Access 数据库表规格
属性 最大值
表名的字符个数 64
字段名的字符个数 64
表中字段个数 255
打开表的个数 2,048。实际可打开的表的数目可能会少一些,因为 Microsoft Access 还要打开一些内部的表。
表的大小 1G 字节
文本字段的字符个数 255
备注字段的字符个数 通过用户界面输入为 65,535,通过程序输入为 1G 字节。
OLE 对象字段的大小 1G 字节
表中索引个数 32
索引中的字段个数 10
有效性消息的字符个数 255
有效性规则的字符个数 2,048
表或字段说明的字符个数 255
记录的字符个数(除了备注字段和 OLE 对象字段) 2,000
字段属性设置的字符个数 255

Microsoft Access 数据库查询规格
属性 最大值
实施关系的个数 每个表为 32 减去表中不包含在关系中的字段或字段组合的索引个数
查询中的表的个数 32
记录集中的字段个数 255
记录集大小 1G 字节
排序限制 255 个字符(一个或一个以上字段)
嵌套查询的级数 50
查询设计网格单元中的字符个数 1,024
参数查询的参数字符个数 255
WHERE 或 HAVING 子句中 AND 的个数 40
SQL 语句的字符个数 约为 64,000

Access数据库防暴库技术

今天找了各方的文章,归纳一下有以下9种办法防止数据库被下载(欢迎补充): 

1.发挥你的想象力 修改数据库文件名 
不用说,这是最最偷懒的方法,但是若攻击者通过第三方途径获得了数据库的路径),就玩完了。比如说攻击者本来只能拿到list权,结果意外看到了数据库路径,就可以冠冕堂皇地把数据库下载回去研究了。另外,数据文件通常大小都比较大,起再隐蔽的文件名都瞒不了人。故保密性为最低。 

2.数据库名后缀改为ASA、ASP等 

此法须配合一些要进行一些设置,否则就会出现本文开头的那种情况 

(1)二进制字段添加(此招我还没有炼成-_-+)。 

(2)在这个文件中加入<%或%>,IIS就会按ASP语法来解析,然后就会报告500错误,自然不能下载了。可是如果只是简单的在数据库的文本或者备注字段加入<%是没用的,因为ACCESS会对其中的内容进行处理,在数据库里他会以< %的形式存在,无效!正确的方法是将<%存入OLE对象字段里,这样我们的目的就能达到了。 
作方法: 
首先,用notepad新建一个内容为 <% 的文本文件,随便起个名字存档。 
  接着,用Access打开您的数据库文件,新建一个表,随便起个名字,在表中添加一个OLE对象的字段,然后添加一个记录,插入之前建立的文本文件,如果操作正确的话,应该可以看到一个新的名为“数据包"的记录。即可 

3.数据库名前加“#” 
  只需要把数据库文件前名加上#、然后修改数据库连接文件(如conn.asp)中的数据库地址。原理是下载的时候只能识别 #号前名的部分,对于后面的自动去掉,比如你要下载:http://www.pcdigest.com/date/#123.mdb(假设存在的话)。无论是IE还是FLASHGET等下到的都是http://www.test.com/date/index.htm(index.asp、default.jsp等你在IIS设置的首页文档) 
  另外在数据库文件名中保留一些空格也起到类似作用,由于HTTP协议对地址解析的特殊性,空格会被编码为"%",如http://www.test.com/date/123 ;456.mdb,下载的时http://www.test.com/date/123 %456.mdb。而我们的目录就根本没有123%456.mdb这个文件,所以下载也是无效的这样的修改后,即使你暴露了数据库地址,一般情况下别人也是无法下载! 

4.加密数据库 
  首先在选取"工具->安全->加密/解密数据库,选取数据库(如:employer.mdb),然后接确定,接着会出现"数据库加密后另存为"的窗口,存为:employer1.mdb。接着employer.mdb就会被编码,然后存为employer1.mdb..要注意的是,以上的动作并不是对数据库设置密码,而只是对数据库文件加以编码,目的是为了防止他人使用别的工具来查看数据库文件的内容。 
接下来我们为数据库加密,首先以打开经过编码了的 employer1.mdb,在打开时,选择"独占"方式。然后选取功能表的"工具->安全->设置数据库密码", 接着输入密码即可。这样即使他人得到了employer1.mdb文件,没有密码他是无法看到 employer1.mdb的。 
  加密后要修改数据库连接页, 如: 
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密码;dbq=数据库路径" 
  这样修改后,数据库即使被人下载了,别人也无法打开(前提是你的数据库连接页中的密码没有被泄露) 
  但值得注意的是,由于Access数据库的加密机制比较简单,即使设置了密码,解密也很容易。该数据库系统通过将用户输入的密码与某一固定密钥进行“异或”来形成一个加密串,并将其存储在*.mdb文件从地址“&H42”开始的区域内。所以一个好的程序员可以轻松制作一个几十行的小程序就可以轻松地获得任何Access数据库的密码。因此,只要数据库被下载,其信息安全依然是个未知数。 

5.数据库放在WEB目录外或将数据库连接文件放到其他虚拟目录下 
  如你的WEB目录是e:/webroot,可以把数据库放到e:/data这个文件夹里,在e:/webroot里的数据库连接页中修改数据库连接地址为:"../data/数据库名" 的形式,这样数据库可以正常调用,但是无法下载的,因为它不在WEB目录里!这个方法一般也不适合购买虚拟空间的用户。 

6.使用ODBC数据源。 
  在ASP等程序设计中,如果有条件,应尽量使用ODBC数据源,不要把数据库名写在程序中,否则,数据库名将随ASP源代码的失密而一同失密,例如: DBPath = Server.MapPath(“../123/abc/asfadf.mdb ”) 
conn.open “driver={Microsoft Access Driver (*.mdb)};dbq=”& DBPath 
  可见,即使数据库名字起得再怪异,隐藏的目录再深,ASP源代码失密后,也很容易被下载下来。如果使用ODBC数据源,就不会存在这样的问题了: conn.open “ODBC-DSN名” ,不过这样是比较烦的,目录移动的话又要重新设置数据源了,更方便的方法请看第7,8法! 

7.添加数据库名的如MDB的扩展映射 
  这个方法就是通过修改IIS设置来实现,适合有IIS控制权的朋友,不适合购买虚拟主机用户(除非管理员已经设置了)。这个方法我认为是目前最好的。只要修改一处,整个站点的数据库都可以防止被下载。无须修改代码即使暴露目标地址也可以防止下载。 
  我们在IIS属性—主目录—配置—映射—应用程序扩展那里添加.mdb文件的应用解析。注意这里的选择的DLL(或EXE等)似乎也不是任意的,选择不当,这个MDB文件还是可以被下载的, 注意最好不要选择选择asp.dll等。你可以自己多测试下 
  这样修改后下载数据库如:http://www.test.com/data/dvbbs6.mdb。就出现(404或500等错误) 

8:使用.net的优越性 
  动网的木鸟就写过一个防非法下载文件的“WBAL 防盗链工具”。具体可以登陆http://www.9seek.com/WBAL/ ; 
  不过 那个只实现了防止非本地下载的 ,没有起到真正的防下载数据库的功能。不过这个方法已经跟5法差不多可以通过修改.NET文件,实现本地也不能下载! 

  这几个方法中,只有第7和8个是统一性改的,一次修改配置后,整个站点的数据库都可以防止下载,其他几个就要分别修改数据库名和连接文件,比较麻烦,不过对于虚拟主机的朋友也只能这样了! 

  其实第6个方法应该是第5个方法的扩展,可以实现特殊的功能,但对于不支持.net的主机或者怕设置麻烦的话,还是直接用第5个方法了,而且默认情况下第6个方法,依然可以通过复制连接到同主机的论坛或留言本发表,然后就可以点击下载了(因为这样的引用页是来自同主机的) 

9.利用NTFS分区的文件权限设置(by percyboy) 
我们已经知道,ASP.NET 中使用 ADO.NET 访问数据库,通过 OleDb 的连接可以访问 Access 数据库——我们非常常用的低端数据库之一。本文讨论了 ASP.NET 中可能看到的若干错误提示,从中看到&nbs
p;Access 2000 和 Access XP 创建的数据库文件,在访问出现错误时会出现不太相同的错误提示。希望对大家有所帮助。另一个要点是,希望通过此文,使大家对 ASP.NET 中 Access 数据库文件的 NTFS 权限设置有所新的认识。 

(一)实验过程 

为了叙述方便,举个具体例子做个实验:应用程序为 /test ,数据库存放在 D:/wwwroot/test/data/db1.mdb,我们已经知道在 ASP.NET 中是以一个叫做 ASPNET 虚拟用户的身份访问数据库的,我们需要给这个账户以特定的 NTFS 权限才能使 ASP.NET 程序正常运行。 

为了得到最严格的 NTFS 权限设置,实验开始时我们给程序最低的 NTFS 权限: 

a) D:/wwwroot/test/data/ 文件夹的给用户ASPNET以如下权限: 
允许 拒绝 
完全控制 □ □ 
修改 □ □ 
读取及运行 √ □ 
列出文件夹目录 √ □ 
读取 √ □ 
写入 □ □ 

b) D:/wwwroot/test/data/db1.mdb 文件本身给用户ASPNET以如下权限: 
√ 允许将来自父系的可继承权限传播给该对象 

1.1 对于某个只包含有“SELECT”命令的aspx程序,上述权限设置运行时无障碍,即:上述权限已经满足这类程序的运行了。 

1.2 对于包含有“UPDATE”“INSERT”“UPDATE”等命令的aspx程序, 

(a) 如果 db1.mdb 是 Access 2000 创建的数据库,出现如下错误: 

“/test”应用程序中的服务器错误。 
————————————— 
Microsoft Jet 数据库引擎打不开文件’D:/wwwroot/test/data/’。 它已经被别的用户以独占方式打开,或没有查看数据的权限。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 
异常详细信息: System.Data.OleDb.OleDbException: Microsoft Jet 数据库引擎打不开文件’D:/wwwroot/test/data/’。 它已经被别的用户以独占方式打开,或没有查看数据的权限。 

(b) 如果 db1.mdb 是 Access XP 创建的数据库,出现如下错误: 

“/test”应用程序中的服务器错误。 
———————————————- 
操作必须使用一个可更新的查询。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 
异常详细信息: System.Data.OleDb.OleDbException: 操作必须使用一个可更新的查询。 
(c) 原因初步分析:因为包含有“UPDATE”“INSERT”“UPDATE”等命令,需要对数据库文件本身进行写入操作,所以上述权限不能满足此需求,我们需要进一步放开权限。 

我们放开一些权限, 
a) D:/wwwroot/test/data/ 文件夹不变: 

b) D:/wwwroot/test/data/db1.mdb 文件本身给用户ASPNET以如下权限: 
允许 拒绝 
完全控制 □ □ 
修改 □ □ 
读取及运行 √ □ 
列出文件夹目录 √ □ 
读取 √ □ 
写入 √ □ 

1.3 放开权限后继续实验, 

(a) 如果 db1.mdb 是 Access 2000 创建的数据库,出现如下错误: 

“/test”应用程序中的服务器错误。 
—————————————— 
不能锁定文件。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 
异常详细信息: System.Data.OleDb.OleDbException: 不能锁定文件。 

(b) 如果 db1.mdb 是 Access XP 创建的数据库,没有出现错误。 

(c) 原因初步分析:我们发现在打开 Access 数据库时,同时会在所在目录生成一个同名的 *.ldb 文件,这是一个 Access 的锁定标记。鉴于此,我们猜测,用户 ASPNET 访问 Access 数据库时,也需要生成一个锁定标记,而该目录没有允许其写入,因此出错。至于 Access XP 创建的数据库为什么没有这个错误,原因还不得而知。 

我们进一步放开权限, 
a) D:/wwwroot/test/data/ 文件夹给用户ASPNET以如下权限: 
允许 拒绝 
完全控制 □ □ 
修改 □ □ 
读取及运行 √ □ 
列出文件夹目录 √ □ 
读取 √ □ 
写入 √ □ 

b) D:/wwwroot/test/data/db1.mdb 文件本身给用户ASPNET以如下权限: 
√ 允许将来自父系的可继承权限传播给该对象 

1.4 继续实验,发现错误已解决,那么上面这个权限就是我们需要放开的“最低权限”。 

(a) 如果 db1.mdb 是 Access 2000 创建的数据库,我们会发现一个小问题:生成的 *.ldb 文件不会自己删除,访问后该文件依然存在,但这个问题不会影响 ASP.NET 的正常运行。 

(b) 如果 db1.mdb 是 Access XP 创建的数据库,没有出现上面类似问题。 

(c) 原因初步分析:我们仅仅是给了 ASPNET 以写入文件夹的权限,没有给它修改的权限,所以文件一旦写入,便无法修改其内容,*.ldb 也就删除不掉了。 

如果非要解决这个问题,进一步放开权限为: 
a) D:/wwwroot/test/data/ 文件夹给用户ASPNET以如下权限: 
允许 拒绝 
完全控制 □ □ 
修改 √ □ 
读取及运行 √ □ 
列出文件夹目录 √ □ 
读取 √ □ 
写入 √ □ 

b) D:/wwwroot/test/data/db1.mdb 文件本身给用户ASPNET以如下权限: 
√ 允许将来自父系的可继承权限传播给该对象 

1.5 附带着,实验另一种情形:我们把 db1.mdb 在 Access 打开编辑,同时访问 ASP.NET。 

(a) 如果 db1.mdb 是 Access 2000 创建的数据库,我们发现并没有出现什么问题。 

(b) 如果 db1.mdb 是 Access XP 创建的数据库,出现如下错误: 

“/zhao”应用程序中的服务器错误。 
———————————————— 
不能使用 ’’;文件已在使用中。 
说明: 执行当前 Web 请求期