莫相离 发表于 2015-1-16 22:38:25

MSSQL网页编程之数据库暴库收拾篇

出于效率方面的考虑,InnoDB数据表的数据行级锁定实际发生在它们的索引上,而不是数据表自身上。显然,数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。数据|数据库数据库暴库收拾篇

转:影子鹰平安网

引子:今天和animator实验了一下,把data.mdb文件更名为data.asp文件后放在wwwroot目次里。然后在IE中输出data.asp路径后,发明IE显现一片空缺,右键->观察源文件,跳出记事本,将内容另存为.mdb文件,用ACCESS翻开,发明必要暗码,也就是说最少文件头被损坏。
然后用Flashget实验下载data.asp文件,并另存为data.mdb文件,发明用ACCESS翻开无缺无损!!!看来,好一些编程职员在开辟的时分都以为,改了mdb后缀为asp就可以防下载的观点,是错的!背景数据库被下载关于一个asp+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={microsoftaccessdriver(*.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={MicrosoftAccessDriver(*.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分区的文件权限设置(bypercyboy)
我们已晓得,ASP.NET中利用ADO.NET会见数据库,经由过程OleDb的毗连能够会见Access数据库——我们十分经常使用的低端数据库之一。本文会商了ASP.NET中大概看到的多少毛病提醒,从中看到Access2000和AccessXP创立的数据库文件,在会见呈现毛病时会呈现不太不异的毛病提醒。但愿对人人有所匡助。另外一个要点是,但愿经由过程此文,使人人对ASP.NET中Access数据库文件的NTFS权限设置有所新的熟悉。

(一)实行历程


为了叙说便利,举个详细例子做个实行:使用程序为/test,数据库寄存在D:wwwroot        estdatadb1.mdb,我们已晓得在ASP.NET中是以一个叫做ASPNET假造用户的身份会见数据库的,我们必要给这个账户以特定的NTFS权限才干使ASP.NET程序一般运转。

为了失掉最严厉的NTFS权限设置,实行入手下手时我们给程序最低的NTFS权限:

a)D:wwwroot        estdata文件夹的给用户ASPNET以以下权限:
同意回绝
完整把持□□
修正□□
读取及运转√□
列出文件夹目次√□
读取√□
写进□□

b)D:wwwroot        estdatadb1.mdb文件自己给用户ASPNET以以下权限:
√同意未来自父系的可承继权限传布给该工具

1.1关于某个只包括有“SELECT”命令的aspx程序,上述权限设置运转时无停滞,即:上述权限已满意这类程序的运转了。

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

(a)假如db1.mdb是Access2000创立的数据库,呈现以下毛病:

“/test”使用程序中的服务器毛病。
---------------------------------------
MicrosoftJet数据库引擎打不开文件’D:wwwroot        estdata’。它已被其余用户以独有体例翻开,或没有检察数据的权限。
申明:实行以后Web哀求时代,呈现未处置的非常。请反省仓库跟踪信息,以懂得有关该毛病和代码中招致毛病的出处的具体信息。
非常具体信息:System.Data.OleDb.OleDbException:MicrosoftJet数据库引擎打不开文件’D:wwwroot        estdata’。它已被其余用户以独有体例翻开,或没有检察数据的权限。

(b)假如db1.mdb是AccessXP创立的数据库,呈现以下毛病:

“/test”使用程序中的服务器毛病。
----------------------------------------------
操纵必需利用一个可更新的查询。
申明:实行以后Web哀求时代,呈现未处置的非常。请反省仓库跟踪信息,以懂得有关该毛病和代码中招致毛病的出处的具体信息。
非常具体信息:System.Data.OleDb.OleDbException:操纵必需利用一个可更新的查询。
(c)缘故原由开端剖析:由于包括有“UPDATE”“INSERT”“UPDATE”等命令,必要对数据库文件自己举行写进操纵,以是上述权限不克不及满意此需求,我们必要进一步摊开权限。

我们摊开一些权限,
a)D:wwwroot        estdata文件夹稳定:

b)D:wwwroot        estdatadb1.mdb文件自己给用户ASPNET以以下权限:
同意回绝
完整把持□□
修正□□
读取及运转√□
列出文件夹目次√□
读取√□
写进√□

1.3摊开权限后持续实行,

(a)假如db1.mdb是Access2000创立的数据库,呈现以下毛病:

“/test”使用程序中的服务器毛病。
------------------------------------------
不克不及锁定文件。
申明:实行以后Web哀求时代,呈现未处置的非常。请反省仓库跟踪信息,以懂得有关该毛病和代码中招致毛病的出处的具体信息。
非常具体信息:System.Data.OleDb.OleDbException:不克不及锁定文件。

(b)假如db1.mdb是AccessXP创立的数据库,没有呈现毛病。

(c)缘故原由开端剖析:我们发明在翻开Access数据库时,同时会在地点目次天生一个同名的*.ldb文件,这是一个Access的锁定标志。鉴于此,我们推测,用户ASPNET会见Access数据库时,也必要天生一个锁定标志,而该目次没有同意其写进,因而堕落。至于AccessXP创立的数据库为何没有这个毛病,缘故原由还不得而知。

我们进一步摊开权限,
a)D:wwwroot        estdata文件夹给用户ASPNET以以下权限:
同意回绝
完整把持□□
修正□□
读取及运转√□
列出文件夹目次√□
读取√□
写进√□

b)D:wwwroot        estdatadb1.mdb文件自己给用户ASPNET以以下权限:
√同意未来自父系的可承继权限传布给该工具

1.4持续实行,发明毛病已办理,那末下面这个权限就是我们必要摊开的“最低权限”。

(a)假如db1.mdb是Access2000创立的数据库,我们会发明一个小成绩:天生的*.ldb文件不会本人删除,会见后该文件仍然存在,但这个成绩不会影响ASP.NET的一般运转。

(b)假如db1.mdb是AccessXP创立的数据库,没有呈现下面相似成绩。

(c)缘故原由开端剖析:我们仅仅是给了ASPNET以写进文件夹的权限,没有给它修正的权限,以是文件一旦写进,便没法修正其内容,*.ldb也就删除不失落了。

假如非要办理这个成绩,进一步摊开权限为:
a)D:wwwroot        estdata文件夹给用户ASPNET以以下权限:
同意回绝
完整把持□□
修正√□
读取及运转√□
列出文件夹目次√□
读取√□
写进√□

b)D:wwwroot        estdatadb1.mdb文件自己给用户ASPNET以以下权限:
√同意未来自父系的可承继权限传布给该工具

1.5附带着,实行另外一种情况:我们把db1.mdb在Access翻开编纂,同时会见ASP.NET。

(a)假如db1.mdb是Access2000创立的数据库,我们发明并没有呈现甚么成绩。


(b)假如db1.mdb是AccessXP创立的数据库,呈现以下毛病:

“/zhao”使用程序中的服务器毛病。
------------------------------------------------
不克不及利用’’;文件已在利用中。
申明:实行以后Web哀求时代,呈现未处置的非常。请反省仓库跟踪信息,以懂得有关该毛病和代码中招致毛病的出处的具体信息。
非常具体信息:System.Data.OleDb.OleDbException:不克不及利用’’;文件已在利用中。

(c)缘故原由开端剖析:Access数据库是单用户单线程的数据库,我们在Access内里翻开编纂数据库文件时实际上是以以后Windows用户(好比Administrator)身份翻开数据库,而ASP.NET默许利用的是ASPNET假造用户(从属于Users组),级别低于Administrator,没法和Administrator“争夺”权限,以是呈现抵触毛病。至于Access2000疏忽这个成绩的情况我们也不用做会商了,多是Access2000没有思索那末多要素吧。

1.6再附带一种情况:将db1.mdb的属性改成“只读”,不管是Access2000仍是AccessXP都将分离呈现与1.2中各自的毛病不异的毛病提醒。

(二)实行结论


(1)我们起首再次总结一下Access数据库文件的NTFS权限设置的缘起:

在ASP.NET中默许是以一个叫做ASPNET的假造用户的身份来会见、操纵数据库的,你能够在“把持面板”-“办理工具”-“盘算机办理”-“当地用户和组”-“用户”中看到这个用户,默许情形下是:

全名:ASP.NET盘算机帐户
形貌为:用于运转ASP.NET帮助历程(aspnet_wp.exe)的帐户。
从属于:Users组。

利用这么一个从属于Users组的用户来举行文件操纵、数据库操纵的风险是要比用一个Administrators组的用户的风险峻小很多,这也是ASP.NET在平安方面的一个思索吧。

既然是这么一个用户必要会见、操纵数据库文件自己,那末我们就必要给它必定的NTFS权限以同意它的会见。明显没有NTFS的权限允许,ASPNET就没法会见、操纵数据库,就会呈现下面实行中所看到的那些毛病了。


(2)经由下面的实行,我们已晓得以下的NTFS权限设置是能够满意一样平常需求的:

a)D:wwwroot        estdata文件夹给用户ASPNET以以下权限:
同意回绝
完整把持□□
修正□□
读取及运转√□
列出文件夹目次√□
读取√□
写进√□

b)D:wwwroot        estdatadb1.mdb文件自己给用户ASPNET以以下权限:
√同意未来自父系的可承继权限传布给该工具

同时我们也注重到db1.mdb是不是为“只读”文件对ASPNET的会见也会有必定影响。

(3)上述权限设置能够间接设置给ASPNET用户本人,也能够设置给Users组,大概间接给Everyone组上述权限都是能够的。由于ASPNET从属于Users组,能够经由过程用户组给ASPNET设置权限。

(4)NTFS权限在文件或文件夹右击后失掉的“属性”对话框-“平安”选项卡中设置,一样平常情形下,能够思索给Adminitrators组以“完整把持”的权限,同时不要容易在“回绝”中打勾,有关NTFS权限设置的技能,能够征询收集办理员、收集平安专家的倡议。

注:FAT,FAT32格局的分区中不撑持NTFS权限。

(5)Windows2000系列,WindowsServer2003系列的“平安”选项卡默许是很简单找到的,但WindowsXPProfessional中的“平安”选项卡默许是封闭的,能够将“把持面板”-“文件夹选项”-“检察”选项卡中的“初级设置”中“利用复杂共享(保举)”一项的“√”往除,“断定”以后,再次依照下面的办法便可看到“平安”选项卡了。

===========
综上所述,2、3、4法一同利用,是避免数据库被下载最基础,最卓有成效的办法,既合用于对服务器有统领权的网管,又合用于假造主机的用户,保举每个制造者同时必用这三种办法

若你对服务器具有统领权,保举再加上办法9,你的ACCESS数据库的平安性就能够年夜年夜进步了。


假定网站被暴库(打击者经由过程各类路子取到了数据库的URL)。关于提防较弱的Web体系,这意味着数据库将被打击者下载归去,网站全体背景数据保守。对于update操作,event中依次记录旧行,新行的值。

小魔女 发表于 2015-1-19 20:04:46

SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)

精灵巫婆 发表于 2015-1-27 08:20:29

从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。

再现理想 发表于 2015-2-5 04:39:25

语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!

爱飞 发表于 2015-2-11 04:54:36

如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.

小妖女 发表于 2015-3-1 21:52:43

也可谈一下你是怎么优化存储过程的?

兰色精灵 发表于 2015-3-11 00:27:56

很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。

灵魂腐蚀 发表于 2015-3-17 17:08:24

原来公司用过MYSQL自己也只是建个表写个SQL

简单生活 发表于 2015-3-24 13:39:06

记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
页: [1]
查看完整版本: MSSQL网页编程之数据库暴库收拾篇