資料庫水印演算法(方案一)

2021-10-06 04:16:33 字數 2402 閱讀 8981

資料庫水印,解決方案一在調研中以及平時所見的資料表中得出乙個規律:表與表的主外來鍵關聯,很多時候並不是有效資料,而是輔助的資料;還有就是有資料庫訪問許可權的人很少,對沒個層級來說,可使用資料的使用者(直接訪問資料庫的使用者)是少量的。

基於上述規律,在不改變表間資料參照關係的前提下,將主外來鍵進行變更,然後在生成的主外來鍵上施加一定的隱含規則作為嵌入的水印資訊,以此來保留資料的原始狀態。一旦資料洩露,就可以通過提取的水印來追蹤資料洩露的源頭。該方案不僅可以在靜態資料集上實施,也能在一定程度上支援動態資料集。

溯源的出發點是為了在資料庫中尋找有效的冗餘空間,在不影響資料使用的前提下嵌入水印資訊,並在資料洩露以後可以高效溯源。而主外來鍵具有的優點剛好可以用來解決上述所有的基本要求:

(1)水印嵌入位置較為靈活,可以自己動態的新增主外鍵值,且不需要過多額外的儲存空間,不僅僅適用於小型系統,更符合當今大資料的背景;

(2)可以用表結構變換(及一張表使用多個變換規則)來隱含一定的規則,以此作為嵌入資料表中的水印資訊,這種演算法對資料的型別沒有任何限制;

(3)由於主外來鍵的關聯性,攻擊者一般不會破壞表間的主外來鍵,因此可以抵擋元組攻擊、屬性攻擊以及虛擬水印攻擊等各種常見的資料庫攻擊型別,具有較好的魯棒性。

首先對演算法中需要用到的變數或符號作乙個說明。

字段屬性表(attribute table)、使用者層級表(k-tree table)、金鑰表(u-key table)(此表應該是檔案的形式放在本地以此保證金鑰不會被洩漏,或者對金鑰進行認證訪問揭秘)

字段屬性表(attribute table):改表的功能,主要用來對原始資料表進行欄位的劃分,以此來讓乙個表可以適用多種規則,主要作用是,考慮到乙個表字段可能會很多,而對於不用的使用者來說,可以只會有許可權檢視一部份字段的值,因此也只可能洩漏一部分的值,所以我們還得從一部分的值中去溯源回來。如資料庫原始表table1有如下屬性:

原始表table1

prikey

name

pswd

tele

email

address

那麼我們就可以根據業務場景,及訪問控制許可權對錶的字段進行劃分,按照使用者許可權訪問規則範圍來劃分,如:乙個有3個許可權角色,role1可以訪問name、tele,role2可以訪問name,email,role3可以訪問name、address,那麼就可以這樣來構建屬性拆分表:

table1_attrsplit

tname

pswd

tele

email

address

scopea11

0100

xa110

010x

a3100

01x說明:代表a1屬性的,在表中對scope範圍內來處理嵌入數字水印,scope一般用於有所有訪問許可權的人,起到乙個混淆的作用,如dba可以訪問所有字段,經過他手的資料,就安範圍來進行分屬性加水印。

使用者層級表(k-tree table):該 k-tree 樹狀結構描述的資料分發的層級關係。樹中節點的資料儲存的是每個資料使用者的代號。其中,根節點代表原始資料的擁有者,每個子節點的父節點代表上一級的資料分發者。如下,u0為資料原始擁有者:

金鑰表(u-key table):該金鑰儲存表描述的是儲存資料使用者的名稱、代號以及對應的金鑰和 0-1 屬性表的表。

u-key table

username

user code

keytn

u1xx1

k1(u1)

a1u2

xx2k2(u2)

a1u3

xx3k3(u3)

a2dba

xx4k4(u4)

1(代表所有屬性)

3des(可以直接用國密,如果保密程度要求不是很高,一般對稱加密演算法都可以),演算法主要用於對資料進行加密,不使用統一的密碼,是為了防止被攻擊。

資料原始擁有者的資料在被分發之前根據業務場景對錶的屬性進行劃分,配置規則。如下圖所示。

有3個使用者,他們許可權不同,所訪問的字段屬性也不相同,所以根據他們的訪問許可權,對錶屬性進行欄位的劃分。然後使用相應的金鑰來對資料進行加密,加密後的水印資訊去替換表的主鍵或者乙個與他業務邏輯不相關的列,如果替換主鍵的話,就相應的要去替換其他關聯表所引用的值,所以如果有不太強相關的字段,就直接替換欄位的值,來存水印資訊,這個可以用乙個配置規則表來對每張表進行配置。

當發現資料疑似洩漏資料時,資料原始擁有者(或每個上級資料擁有者)通過相同的加密規則對原始資料加密,然後與洩漏資料比對,如果相同,則確認為洩漏資料。

海量資料庫的查詢優化及分頁演算法方案

create procedure pagination3 tblname varchar 255 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pageindex int 1,頁碼...

海量資料庫的查詢優化及分頁演算法方案

如何在有著 1000 萬條資料的 ms sql server 資料庫中實現快速的資料提取和資料分頁。以下 說明了我們例項中資料庫的 紅標頭檔案 一表的部分資料結構 create table dbo tgongwen tgongwen 是紅標頭檔案表名 gid int identity 1,1 not...

資料庫優化方案 一)

關於資料庫優化方面的文章很多,但是有的寫的似是而非,有的不切實際,對乙個資料庫來說,只能做到更優,不可能最優,並且由於實際需求不同,優化方案還是有所差異,根據實際需要關心的方面 速度 儲存空間 可維護性 可拓展性 來優化資料庫,而這些方面往往又是相互矛盾的,下面結合網上的一些看法和自己的一些觀點做個...