国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

數(shù)據(jù)庫中“寫錯誤”的運用

2016-04-11 13:44:58周進平宋紹云
電腦知識與技術 2016年4期
關鍵詞:數(shù)據(jù)庫

周進平+宋紹云

摘要:數(shù)據(jù)庫的安全機制保障了數(shù)據(jù)庫中數(shù)據(jù)的完整性,如果不允許為空的數(shù)據(jù)項信息不全時無法寫入數(shù)據(jù)。利用數(shù)據(jù)庫的這一特點,用軟件控制數(shù)據(jù)庫的寫錯誤,從而實現(xiàn)了軟件試用限制的功能。

關鍵詞:數(shù)據(jù)庫;寫錯誤;試用限制a

中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)04-0032-02

在開發(fā)信息管理軟件時,我們常常在試用版中進行試用時間的限制,在信息增加、修改時進行判斷試用時間到了就跳過保存。但是如果到期了,修改一下電腦系統(tǒng)日期還可以再接著使用,使用試用次數(shù)限制的方式也容易通過破解軟件跟蹤到跳轉(zhuǎn)點,運用數(shù)據(jù)庫自己的安全機制,在數(shù)據(jù)庫寫入出錯時信息就不能保存這一特點,可以更巧妙地實現(xiàn)軟件試用功能的限制。

1 意外的發(fā)現(xiàn)

曾經(jīng)在寫一個信息管理系統(tǒng)時,使用的是ACCESS數(shù)據(jù)庫,功能全部測試正常,刻錄光盤交付使用,從光盤復制到電腦上時出現(xiàn)了一個問題,新增一條記錄時系統(tǒng)提示新增成功,但是查詢信息時卻看不到新增加的信息,只有以前錄入的信息可以正常查詢。軟件功能在我的電腦上已經(jīng)測試過多次了,一直都是正常的,為什么到了這臺電腦上卻不行了?我把這個模塊的代碼是檢查了三遍也沒發(fā)現(xiàn)有什么錯誤,問題出在哪里?最后才發(fā)現(xiàn)數(shù)據(jù)庫文件的屬性在通過光盤復制到新電腦的磁盤時變成了只讀,把數(shù)據(jù)庫文件的屬性中的只讀取消,再次測試系統(tǒng),功能全部正常。這個問題讓我花了半天的時間,過后一想,這個問題可以加于利用一下,我在程序代碼中增加一小段代碼來控制數(shù)據(jù)庫文件的只讀屬性,這樣就可以給軟件設置全功能的試用時間了。

db="mdb/xxpj@jksmdb.asa" '數(shù)據(jù)庫文件的位置

sysyy=15 '2015年開始,試用185天

sysmmdd=now()

if datediff("d",Cdate("20"&sysyy&"-"&sysmmdd),date())>185 then

Dim fso,f

Set fso = CreateObject("Scripting.FileSystemObject")

Set f = fso.GetFile( Server.MapPath(""&db&""))

if f.attributes <> 1 then

f.attributes = 1

end if

end if

通過上面的幾行代碼,在試用時間結(jié)束時,將數(shù)據(jù)庫文件的屬性改為只讀,這樣系統(tǒng)就只有查詢功能了,任何新增、修改信息在保存時都是提示保存成功,但信息卻不能寫到數(shù)據(jù)庫中,回到查詢窗口自然就找不到剛才操作的信息了,這時再修改電腦系統(tǒng)日期也沒用了,因數(shù)據(jù)庫的屬性已經(jīng)改成只讀了,這樣的方式在利用破解軟件跟蹤時,程序是按順序執(zhí)行下去的,保存指令也執(zhí)行了。

2 擴展一下

這個辦法對于SQL Server或MySql數(shù)據(jù)庫有用嗎?直接操作數(shù)據(jù)庫文件來修改文件屬性是不可能的,查詢了一下百度,要實現(xiàn)SQL Server數(shù)據(jù)庫的只讀還是可行的,可以使用如下命令來設置sql server數(shù)據(jù)庫的只讀特性。

以下是以SQL Server的mydb數(shù)據(jù)庫為例來說明的:

USE [mydb]

GO

ALTER DATABASE [TESTDB] SET READ_ONLY WITH NO_WAIT

GO

對于MySql數(shù)據(jù)庫卻不太好實現(xiàn)了,flush tables with read lock或者set global read_only=1可以修改數(shù)據(jù)庫的屬性,但擁有super權(quán)限的仍然可以寫操作,有沒有更好的辦法來實現(xiàn)呢?一直沒能找到實現(xiàn)的辦法。

3 找到新辦法

這幾天在開發(fā)一個網(wǎng)絡報名信息管理系統(tǒng)時使用的是SQL Server的數(shù)據(jù)庫,在設計數(shù)據(jù)庫時有一個表的字段較多,在以前的ACCESS數(shù)據(jù)庫做過就想偷懶一下,由ACCESS數(shù)據(jù)庫導到SQL Server數(shù)據(jù)庫中來,ok,成功了。在完成模塊代碼后測試功能,糟了,新增數(shù)據(jù)寫不到數(shù)據(jù)庫中了,檢查了程序代碼也沒發(fā)現(xiàn)問題,想到以前遇到過這個問題,就去查看數(shù)據(jù)庫的屬性,正常呀。為什么不能增加記錄呢?修改也不行。頭大了。只好去求助百度了,可是把百度上解決SQL Server數(shù)據(jù)庫不能寫的辦法都試了一遍,問題還是依舊。只好從頭來檢查修改程序代碼,沒用。再來檢查數(shù)據(jù)庫,檢查到這個由ACCESS數(shù)據(jù)庫導入的表時發(fā)現(xiàn),除了編號字段不允許為空以外,還有一個可以為空的字段不知什么原因也被設置成了不允許為空,因為在程序中新增記錄時這個字段是可以不填的,所以在新增記錄時沒有填寫這個數(shù)據(jù)項,保存數(shù)據(jù)時數(shù)據(jù)庫就認為出錯,導致新增記錄無效,也就出現(xiàn)了系統(tǒng)開發(fā)中的問題。問題解決了。

設置一個無關緊要的字段為不允許為空,在新增記錄時又不填寫這個字段時就會導致數(shù)據(jù)庫新增失敗,這個辦法用來解決去年想實現(xiàn)的問題不是挺好的嗎!

UPDATE xjxxb SET beizhu = "'" WHERE beizhu = ""

ALTER table xjxxb ALTER column beizhu varchar(100) not null

注意修改前需要把這個字段中為空的那些信息填個字符“”進去,修改時一定要帶上字段類型,不然是修改不成功的。

兩行代碼就實現(xiàn)了我想要的功能,而且這個辦法在每個類型的數(shù)據(jù)庫中都可以實現(xiàn),比起設置數(shù)據(jù)庫屬性為只讀要方便可行。

4 結(jié)束語

沒想到在遇到問題時卻發(fā)現(xiàn)了原來問題的解決辦法。我們都怕出現(xiàn)問題,都要解決問題,但是我們可以自己制造問題,利用問題來解決問題,從而實現(xiàn)我們想要的功能。

參考文獻:

[1] 蘇俊.數(shù)據(jù)庫基礎教程[M]. 北京:中國人民大學出版社,2004.

[2] SQL Server 2000基礎[M]. 北京: 紅旗出版社,2005.

[3] 范德蘭斯. SQL完全手冊[M]. 北京: 電子工業(yè)出版社,2007.

[4] 王向云,王嶸,張琨.SQL從入門到精通[M]. 北京: 電子工業(yè)出版社,2009.

猜你喜歡
數(shù)據(jù)庫
數(shù)據(jù)庫
財經(jīng)(2017年15期)2017-07-03 22:40:49
數(shù)據(jù)庫
財經(jīng)(2017年2期)2017-03-10 14:35:35
兩種新的非確定數(shù)據(jù)庫上的Top-K查詢
數(shù)據(jù)庫
財經(jīng)(2016年15期)2016-06-03 07:38:02
數(shù)據(jù)庫
財經(jīng)(2016年3期)2016-03-07 07:44:46
數(shù)據(jù)庫
財經(jīng)(2016年6期)2016-02-24 07:41:51
數(shù)據(jù)庫
財經(jīng)(2015年3期)2015-06-09 17:41:31
數(shù)據(jù)庫
財經(jīng)(2014年21期)2014-08-18 01:50:18
數(shù)據(jù)庫
財經(jīng)(2014年6期)2014-03-12 08:28:19
數(shù)據(jù)庫
財經(jīng)(2013年6期)2013-04-29 17:59:30
青岛市| 方正县| 绿春县| 南华县| 万盛区| 佛山市| 新乐市| 渑池县| 忻州市| 宜城市| 丹凤县| 通河县| 寿宁县| 夹江县| 屯门区| 太仓市| 合山市| 东明县| 泰和县| 汨罗市| 惠来县| 临颍县| 松阳县| 丹东市| 吉木乃县| 虹口区| 奎屯市| 宁远县| 卢湾区| 西吉县| 鹤壁市| 台南县| 南城县| 保亭| 西平县| 沙河市| 彭泽县| 德保县| 宜州市| 佛冈县| 仪陇县|