• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    嵌入式數(shù)據(jù)庫SQLite的安全機制分析與設(shè)計

    2014-04-29 00:00:00王春波
    計算機光盤軟件與應(yīng)用 2014年5期

    摘 要:嵌入式系統(tǒng)已經(jīng)成為了當(dāng)今IT方面的熱門話題。隨之而來的嵌入式數(shù)據(jù)庫的安全問題更得到了重視,本文設(shè)計了一套相對比較可行的安全機制。保持了嵌入式數(shù)據(jù)庫的特性基礎(chǔ)上,大大的提高了使用的安全性。

    關(guān)鍵詞:數(shù)據(jù)庫;安全;加密;SQLite

    中圖分類號:TP311.13

    SQLite是一個開源的,同時具有查詢快、占用內(nèi)存空間小以及存儲效率高等特性,能夠被企業(yè)廣泛的應(yīng)用。其安全問題也受到高度重視。本文在對數(shù)據(jù)庫安全機制進行分析的基礎(chǔ)上,也設(shè)計和實現(xiàn)了SQLite數(shù)據(jù)庫的安全機制。

    1 數(shù)據(jù)庫的安全機制分析

    為了使嵌入式系統(tǒng)滿足對數(shù)據(jù)庫本身的輕便性,和對數(shù)據(jù)存儲效率、以及訪問速度、內(nèi)存占用率等性能的要求條件,SQLite采取了不同于大型數(shù)據(jù)庫的實現(xiàn)方法機制,與此同時也帶來了一些潛在的安全隱患。

    開源的SQLite數(shù)據(jù)庫沒有為用戶提供嚴(yán)謹(jǐn)?shù)募用軝C制,在數(shù)據(jù)的使用安全上有很大隱患。而且,由于SQLite數(shù)據(jù)庫的數(shù)據(jù)存儲方式相對比較簡單,目前沒有一個特定存儲的工具,用戶通過文本編輯器就可以對數(shù)據(jù)內(nèi)容進行查看。同時,SQLite數(shù)據(jù)庫沒有為大家提供多用戶機制,數(shù)據(jù)庫就缺少了相應(yīng)的審計機制,在對數(shù)據(jù)庫的數(shù)據(jù)進行備份和恢復(fù)時,通常只是通過手工的拷貝來完成,這對數(shù)據(jù)的安全使用是非常不安全的。

    2 SQLite的安全機制設(shè)計

    2.1 口令認證

    SQLite數(shù)據(jù)庫文件比較簡單,僅僅是一個普通的文本文件,所以對數(shù)據(jù)庫的訪問主要是依賴于對文件的訪問控制。本文對數(shù)據(jù)庫文件添加了口令認證,用戶只有在提供正確的口令之后,才能夠?qū)υ摂?shù)據(jù)庫文件中的數(shù)據(jù)進行增加、刪除、修改、查詢等操作。如果口令不正確,將不能對數(shù)據(jù)文件進行任何操作。

    2.2 數(shù)據(jù)庫加密

    有以下兩種數(shù)據(jù)庫加密的方式:(1)將加密功能在數(shù)據(jù)庫管理系統(tǒng)中進行實現(xiàn);(2)對應(yīng)用程序中數(shù)據(jù)庫的一些字段的值實現(xiàn)加密,數(shù)據(jù)庫管理系統(tǒng)管理的是已經(jīng)加密的密文。

    在SQLite數(shù)據(jù)庫進行開發(fā)的時候,設(shè)計人員已經(jīng)事先留好了對數(shù)據(jù)庫進行加密的相關(guān)接口,方便使用該數(shù)據(jù)庫的工作人員對DBMS進行進一步的加密操作。目前已經(jīng)實現(xiàn)了對SQLite數(shù)據(jù)庫進行加密的設(shè)置[1],和之前的版本進行比較,其內(nèi)部的函數(shù)和數(shù)據(jù)結(jié)構(gòu)等方面已經(jīng)有了進一步的改進和提高。

    2.3 審計機制

    開發(fā)具體的審計的功能是針對SQLite沒有用戶管理這一功能來設(shè)計的。在不對原本導(dǎo)出接口進行改變的前提下,本設(shè)計采用特定的文本文件方式,來對系統(tǒng)的重要事件進行簡單的記錄,如打開和關(guān)閉數(shù)據(jù)庫、設(shè)計和更改口令等。

    由于SQLite數(shù)據(jù)庫系統(tǒng)沒有設(shè)計用戶管理這一模塊,因此我們需要開發(fā)一個具體的審計機制。在不改變數(shù)據(jù)庫原本的導(dǎo)出接口的基礎(chǔ)之上,本設(shè)計采用特定的文本文件方式,來對數(shù)據(jù)庫系統(tǒng)進行一系列的操作,打開、關(guān)閉數(shù)據(jù)庫操作,修改和刪除數(shù)據(jù)操作等。

    2.4 備份和恢復(fù)機制

    根據(jù)SQLite存儲數(shù)據(jù)庫數(shù)據(jù)內(nèi)容的特殊方式(單個文件存儲整個內(nèi)容),我們可以用文件拷貝的方式來對數(shù)據(jù)庫進行備份和恢復(fù)。

    3 SQLite加密機制的實現(xiàn)

    3.1 SQLite提供的加密接口

    一是sqlite3.h中所提供的sqlite3_key()和sqlite3_rekey()函數(shù),其中指定數(shù)據(jù)庫所設(shè)定的密鑰由sqlite3_key()實現(xiàn),給數(shù)據(jù)庫重新設(shè)定密鑰由sqlite3_rekey()實現(xiàn);另一種是在attach.c文件中所提供的密鑰與數(shù)據(jù)庫進行關(guān)聯(lián)的接口函數(shù)sqlite3CodecGetKey()和sqlite3CodecAttach,返回當(dāng)前數(shù)據(jù)庫的密鑰由sqlite3CodecGetKey()完成,將密鑰和頁面編碼函數(shù)關(guān)聯(lián)于數(shù)據(jù)庫由sqlite3CodecAttach實現(xiàn)[2]。

    3.2 加密算法的選擇與實現(xiàn)

    SQLite數(shù)據(jù)庫對數(shù)據(jù)的保存時銅鼓哦頁面形式完成的。因此,我們可以選擇使用以下兩種加密算法:分組加密算法和須留加密算法。當(dāng)加密快的大小和頁面的大小之間相差不是整數(shù)倍數(shù)時,分組加密算法需要對數(shù)據(jù)進行填充,這將改變存儲頁面的長度,還需要對數(shù)據(jù)庫做出相應(yīng)的修改。而序列加密算法恰好對這一問題有所處理,能夠很好的避免。

    3.3 密鑰的設(shè)計與實現(xiàn)

    一般情況下,用戶所設(shè)定的口令長度是不固定的,如果用用戶輸入的口令來作為加密密鑰就會存在安全隱患,在應(yīng)用程序中可能會泄露密鑰。因此,本系統(tǒng)設(shè)計了一個導(dǎo)出函數(shù)用來密鑰的設(shè)計,對輸入的口令進行變換,將其結(jié)構(gòu)用作密鑰來對數(shù)據(jù)庫進行加密。

    3.4 安全機制的設(shè)計與實現(xiàn)

    本文在SQLite3.6.15版本的基礎(chǔ)上進行研究,對上述SQLite安全機制,使用了標(biāo)準(zhǔn)C實現(xiàn)了SQLite的上述安全機制。通過用文本文件來加密數(shù)據(jù)庫的數(shù)據(jù),實現(xiàn)了審計功能;通過用文件拷貝的方式來實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)的備份和恢復(fù);通過使用序列加密算法RC4來實現(xiàn)對SQLite的加密機制。

    3.5 測試加密功能

    筆者測試了SQLite數(shù)據(jù)庫的各項修改后的功能,均能夠正常運行。

    測試過程:編寫一個SQLite3應(yīng)用程序。程序代碼的功能是打開一個數(shù)據(jù)庫test2.db,創(chuàng)建一個數(shù)據(jù)庫表(table),并插入兩條記錄[3]。

    由測試結(jié)果可以看出:在不使用加密機制的情況下,直接訪問數(shù)據(jù)庫文件就可以得知數(shù)據(jù)庫中存儲信息的內(nèi)容。修改程序代碼,在代碼sqlite3 _open (“test2.db”,db)的下面增加一行代碼:Sqlite3_key(db,“123456”,6);表示對數(shù)據(jù)庫db進行加密,口令為“123456”,口令長度為6。

    由測試結(jié)果可看出:數(shù)據(jù)庫文件的內(nèi)容已經(jīng)變?yōu)閬y碼,達到了數(shù)據(jù)保密的目的。編寫一個SQLite3 應(yīng)用程序,程序的功能是讀出加密后的數(shù)據(jù)庫test2. db的表user的內(nèi)容,其中:代碼sqlite3 _key(db,“123456”,6)指定數(shù)據(jù)庫的加密口令;函數(shù)SelectTable為回調(diào)函數(shù)。如果提供的口令不正確,如:sqlite3_key( db,“1234”,4),則訪問數(shù)據(jù)庫的函數(shù)會報錯:“file is encryp ted or isnot a database”,并且不能執(zhí)行數(shù)據(jù)庫訪問操作。

    4 結(jié)束語

    在信息系統(tǒng)中,對數(shù)據(jù)庫中的所有數(shù)據(jù)進行存儲和使用都是通過數(shù)據(jù)庫來完成了,整個安全機制的設(shè)計數(shù)據(jù)庫的安全至關(guān)重要。筆記分析了當(dāng)前數(shù)據(jù)庫的安全機制,并在現(xiàn)有的基礎(chǔ)之上,對SQLite數(shù)據(jù)庫進行改進,將其安全性盡可能的提高。通過測試,SQLite系統(tǒng)不但繼承了原有系統(tǒng)的優(yōu)點,同時還增強了對數(shù)據(jù)庫使用的安全性。

    參考文獻:

    [1]路旋.SQLite嵌入式數(shù)據(jù)庫系統(tǒng)的研究與實現(xiàn)[J].計算機應(yīng)用技術(shù),2009.

    [2]唐敏,宋杰.嵌入式數(shù)據(jù)庫SQLite的原理與應(yīng)用[J].電腦知識與技術(shù),2008(02):51-54.

    [3]劉海燕.楊健康.嵌入式數(shù)據(jù)庫SQLite的安全機制分析與設(shè)計[J].裝甲兵工程學(xué)院學(xué)報,2009(10):41-46.

    作者簡介:王春波(1986.12-,男,吉林九臺人,碩士,研究方向:計算機網(wǎng)絡(luò)與通信。

    作者單位:長春理工大學(xué) 計算機科學(xué)技術(shù)學(xué)院,長春 130022

    日土县| 闵行区| 涡阳县| 阿鲁科尔沁旗| 绥江县| 浙江省| 金堂县| 伊通| 峨眉山市| 手游| 铜鼓县| 团风县| 滦平县| 桂林市| 桐乡市| 黄平县| 翁源县| 始兴县| 平山县| 称多县| 韩城市| 兴隆县| 平和县| 邵阳县| 睢宁县| 垦利县| 泽州县| 枣阳市| 张北县| 河北省| 旬邑县| 自治县| 奈曼旗| 蒲城县| 西昌市| 白山市| 勐海县| 长海县| 禄丰县| 四子王旗| 巴里|