亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

DB2中的數據值加密(1)

2024-07-21 02:41:25
字體:
來源:轉載
供稿:網友
  【導讀】本文描述如何使用 IBM DB2 Universal Database Version (Unix & Windows) 中提供的新函數輕松地將數據加密集成到數據庫應用程序中。   多年來,數據庫已經能夠阻止未經授權的人看到其中的數據,這通常是通過數據庫治理器中的特權和權限來實現的。在當前的環境下,對存儲數據的保密的需求日益增長。這意味著即使 DBA 對表中的數據有完全的訪問權限,但是表中可能還有數據擁有者不希望任何其他人看到的某些信息。非凡是對于基于 Web 的應用程序,這一問題就更加明顯了,在這種應用程序中,用戶輸入的數據(比如信用卡號)需要保存起來,以備同一用戶以后使用該應用程序。同時,用戶擁有者希望能夠確保任何其他人不能訪問這種數據。為了實現這種功能,DB2 內置了一些 SQL 函數,這些函數答應應用程序加密和解密數據。當將數據插入到數據庫中時,可以使用用戶提供的加密密碼對其加密。當檢索該數據的時候,必須提供相同的密碼才能解密數據。對于要多次使用同一個密碼的情況,可以使用一個賦值語句設置 ENCRYPTION PASSWord 值,并令其在某次連接期間內有效。   本文將描述這些 SQL 函數,并給出一些關于如何使用這些加密函數的例子。我們還將討論在關系數據庫中使用加密數據的設計和性能相關事項。   實現   下面顯示了這些新的 SQL 函數的簽名。在 DB2 文檔的 SQL Reference 部分中有更具體的文檔。(為了確保對加密的數據使用正確的數據類型和長度,請務必閱讀 SQL Reference 中 ENCRYPT 函數下的“Table Column Definition”部分。)   Encrypt (StringDataToEncrypt, PasswordOrPhrase, PasswordHint)   Decrypt_Char(EncryptedData, PasswordOrPhrase) 12345下一頁   GetHint(EncryptedData)   Set Encryption Password   用于對數據加密的算法是一個 RC2 分組密碼(block cipher),它帶有一個 128 位的密鑰。這個 128 位的密鑰是通過消息摘要從密碼得來的。加密密碼與 DB2 認證無關,僅用于數據的加密和解密。   這里可以提供一個可選的參數 PasswordHint,這是一個字符串,可以幫助用戶記憶用于對數據加密的 PasswordOrPhrase。(例如,可以使用 'George' 作為記憶 'Washington'的提示。)   列級加密   列級加密(column level encryption)意味著對于一個給定列中的所有值都使用相同的密碼進行加密。這種類型的加密可以在視圖中使用,也可以在使用了一個公共密碼的情況下使用。當對一個或多個表中所有的行使用相同的密鑰時,ENCRYPTION PASSWORD 專用寄存器將十分有用。   例 1:這個例子使用 ENCRYPTION PASSWORD 值來保存加密密碼。它對雇員的社會保險號進行加密,并以經過加密的形式將其存儲在 EMP 表中。   create table emp (ssn varchar(124) for bit data);   set encryption password = 'Ben123';   insert into emp (ssn) values(encrypt('289-46-8832'));   insert into emp (ssn) values(encrypt('222-46-1904'));   insert into emp (ssn) values(encrypt('765-23-3221'));   select decrypt_char(ssn) from emp;   例 2:這個例子在結合使用視圖的情況下使用 ENCRYPTION PASSWORD 值來保存加密密碼。下面的語句聲明了 emp 表的一個視圖:   create view clear_ssn (ssn) as select decrypt_char(ssn) from emp;   在應用程序代碼中,我們將 ENCRYPTION PASSWORD 設置為 'Ben123',現在可以使用 clear_ssn 視圖了。 上一頁12345下一頁   set encryption password = 'Ben123';   select ssn from clear_ssn;   行-列(單元格)或 集合-列級加密   行-列(單元格)或 集合-列(Set-Column)級加密意味著在一個加密數據列內使用多個不同的密碼。例如,Web 站點可能需要保存客戶信用卡號(ccn)。在這個數據庫中,每個客戶可以使用他自己的密碼或短語來加密 ccn。   例 3:Web 應用程序收集關于客戶的用戶信息。這種信息包括客戶名稱(存儲在宿主變量 custname中)、信用卡號(存儲在宿主變量 cardnum中)和密碼(存儲在宿主變量 userpswd中)。應用程序像下面這樣執行客戶信息的插入操作。   insert into customer (ccn, name) values(encrypt(:cardnum, :userpswd), :custname)   當應用程序需要重新顯示某客戶的信用卡信息時,客戶要輸入密碼,同樣該密碼也要存儲在宿主變量 userpswd 中。之后,可以像下面這樣檢索該 ccn :   select decrypt_char(ccn, :userpswd) from customer where name = :custname;   例 4:這個例子使用提示來幫助客戶記憶他們的密碼。這里使用與例 3 相同的應用程序,該應用程序將提示保存到宿主變量 pswdhint中。假設 userpswd 的值是 'Chamonix', pswdhint的值是 'Ski Holiday'。   insert into customer (ccn, name)   values(encrypt(:cardnum, :userpswd, :pswdhint), :custname)   假如客戶請求關于所使用的密碼的提示,可以使用下面的查詢。   select gethint(ccn) into :pswdhint from customer where name = :custname;   pswdhint的值被設置為"Ski Holiday"。   加密非字符值   數值和日期/時間數據類型的加密通過強制類型轉換得到間接的支持。非字符的 SQL 類型通過強制轉換為 "varchar" 或 "char",就可以被加密了。有關強制類型轉換的更多信息,請參閱 SQL 參考文檔中的 “Casting Between Data Types” 部分。 上一頁12345下一頁   例 5:加密和解密 TIMESTAMP 數據時用到的強制類型轉換函數。   -- Create a table to store our encrypted value   create table etemp (c1 varchar(124) for bit data);   set encryption password 'next password';   -- Store encrypted timestamp   insert into etemp values encrypt(char(CURRENT TIMESTAMP));   -- Select & decrypt timestamp   select timestamp(decrypt_char(c1)) from etemp;   例 6:加密/解密 double 數據。   set encryption password 'next password';   insert into etemp values encrypt(char(1.11111002E5));   select double(decrypt_char(c1)) from etemp;   性能   加密,就其本質而言,會使大部分 SQL 語句慢下來。但是假如多加注重,多加判定,還是可以將大量的額外開銷降至最低。而且,加密數據對于數據庫的設計有著很大的影響。通常,您需要對一個模式中的一些敏感數據元素進行加密,例如社會保險號、信用卡號、病人姓名,等等。而有些數據值就不是那么適于加密了 -- 例如布爾值(true 和 false),或者其他的像整數 1 到 10 這樣的小型集合。這些值與列名一起很輕易被猜出,因此需要判定加密是否真的有用。   在某些情況下,對加密的數據創建索引是很好的主意。加密數據的正確匹配及連接將使用您創建的索引。由于加密數據實質上是二進制數據,因此對加密數據進行范圍檢查時需要掃描表。范圍檢查需要解密某一列在所有行的值,因此應該避免進行范圍檢查,至少也應該進行適當的調優。   下面的場景闡明了我們的討論??紤]一種常見的主從(master-detail)模式,程序員可以在很多項目中使用這種模式。我們將對雇員的社會保險號(ssn)實現列級加密。在主表 emp 和從表 empPRoject 中,ssn 將以加密的形式存儲。 上一頁12345下一頁   -- Define Tables and Indexes for encrypted data   create table emp (ssn varchar(48) for bit data,   name varchar(48) );   create unique index idxEmp on emp ( ssn ) includes (name) ;   create table empProject( ssn varchar(48) for bit data,   projectName varchar(48) );   create index idxEmpPrj on empProject ( ssn );   -- Add some data   set encryption password = 'ssnPassWord';   insert into emp values (encrypt('480-93-7558'),'Super Programmer');   insert into emp values (encrypt('567-23-2678'),'Novice Programmer');   insert into empProject values (encrypt('480-93-7558'),'UDDI Project');   insert into empProject values (encrypt('567-23-2678'),'UDDI Project');   insert into empProject values (encrypt('480-93-7558'),'DB2 UDB Version 10');   -- Find the programmers working on UDDI select a.name, decrypt_char(a.ssn)   from emp a, empProject b   where   a.ssn = b.ssn   and b.project ='UDDI Project';   -- Build a list of the projects that the programmer with ssn   -- '480-93-7558' is working on   select projectName   from empProject   where ssn = encrypt('480-93-7558');   相對于上面的例子,下面的兩個例子是 不應該采用的反面典型。雖然這些查詢同樣能夠返回正確的答案,但是它們會需要為所有行解密 ssn。當表很大的時候,這個問題就會變得突出起來。   select a.name, decrypt_char(a.ssn)   from emp a, empProject b   where   decrypt_char(a.ssn) = decrypt_char(b.ssn)   and b.project ='UDDI Project';   該查詢會要求解密 emp 表的每一行以及 empProject 表的每個 'UDDI Project' 行,以執行連接。   select projectName   from empProject   where decrypt_char(ssn)= '480-93-7558';   該查詢會要求解密 empProject 表中的每一行。   結束語   在本文中,我們演示了 IBM DB2 Universal Database 中的加密函數如何提供簡單方式來加密敏感數據。這些函數可用來實現列級和行-列級的加密。在設計和實現期間,開發人員應該審閱一些重要的性能相關事項。數據加密為隱藏私有數據增添了一種新的可用工具,即使對于治理人員,也能起到保密的作用。 上一頁12345
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品成人91久久久久久久| 国产剧情久久久久久| 日韩av影片在线观看| 九色成人免费视频| 欧美国产日韩一区二区在线观看| 久久亚洲电影天堂| 91精品免费久久久久久久久| 国产精品美乳在线观看| 欧美精品午夜视频| 久久五月天色综合| 国产欧美一区二区三区久久| 精品国产区一区二区三区在线观看| 性欧美暴力猛交69hd| 国产999精品视频| 亚洲欧美日韩另类| 久久视频中文字幕| 亚洲国产一区二区三区在线观看| 欧美孕妇性xx| 久久综合免费视频影院| 日韩小视频在线观看| 在线观看中文字幕亚洲| 亚洲国产精品热久久| 欧美成在线视频| 久久综合伊人77777蜜臀| 国产一区二区美女视频| 欧美日韩性生活视频| 亚洲电影免费在线观看| 亚洲精品自产拍| 亚洲国产精品电影在线观看| 久久久极品av| 国产精品亚洲激情| 久久亚洲精品一区二区| 91精品国产综合久久男男| 日韩欧美在线视频免费观看| 精品综合久久久久久97| 欧美日韩在线视频一区| 浅井舞香一区二区| 精品香蕉一区二区三区| 2020国产精品视频| 国产精品都在这里| 97国产suv精品一区二区62| 91国自产精品中文字幕亚洲| 国内精品中文字幕| 欧美疯狂做受xxxx高潮| 91av福利视频| 亚洲成人av片| 国产精品一区专区欧美日韩| 国产在线999| 亚洲精品女av网站| 日韩欧美精品网址| 97视频在线免费观看| 日韩精品亚洲视频| 欧美色视频日本版| 国产精品日韩久久久久| 亚洲理论片在线观看| 久久精品国产2020观看福利| 亚洲男人天堂2019| 97成人在线视频| 成人乱色短篇合集| 亚洲最大激情中文字幕| 亚洲综合色激情五月| 亚洲国产私拍精品国模在线观看| 欧美国产第一页| 国产精品久久久久久久app| 欧美激情视频一区二区三区不卡| 色哟哟网站入口亚洲精品| 亚洲欧美国产精品久久久久久久| 亚洲天堂开心观看| 91久久久久久久久久| 26uuu久久噜噜噜噜| 国产日韩综合一区二区性色av| 亚洲xxx大片| 亚洲成年网站在线观看| 国产精品激情av电影在线观看| 亚洲在线第一页| 狠狠干狠狠久久| 亚洲综合日韩中文字幕v在线| 日韩中文在线中文网在线观看| 亚洲欧洲国产一区| 国产欧洲精品视频| 亚洲综合自拍一区| 欧美大片免费看| 亚洲白拍色综合图区| 高清欧美性猛交| 国产一区二区丝袜高跟鞋图片| 久久精品免费播放| 国产综合在线视频| 97精品欧美一区二区三区| 国产精品中文久久久久久久| 国产精品老女人视频| 色多多国产成人永久免费网站| 亚洲第一区第一页| 亚洲视频精品在线| 最近中文字幕mv在线一区二区三区四区| 亚洲**2019国产| 91精品国产自产在线观看永久| 欧美人成在线视频| 亚洲自拍在线观看| 成人网在线免费看| 精品视频偷偷看在线观看| 成人精品网站在线观看| 久久久久亚洲精品成人网小说| 国产亚洲欧美一区| 操人视频在线观看欧美| 91精品视频免费看| 中文字幕日韩在线视频| 欧美日韩第一视频| 国产一区二区日韩精品欧美精品| 在线观看国产精品淫| 国产在线一区二区三区| 91色精品视频在线| 国产精品欧美日韩久久| 欧美老女人性生活| 亚洲美女中文字幕| 96精品久久久久中文字幕| 国产精品亚洲美女av网站| 精品国产一区二区三区久久| 日韩中文字幕免费视频| 亚洲欧美国产一区二区三区| 欧美精品xxx| 色樱桃影院亚洲精品影院| 国产欧美一区二区三区四区| 亚洲综合在线播放| 一本一道久久a久久精品逆3p| 久久天天躁狠狠躁夜夜av| 日韩大陆毛片av| 久久久久久久久网站| 中文字幕在线观看日韩| 亚洲色图欧美制服丝袜另类第一页| 午夜精品久久久久久久男人的天堂| 日韩在线中文字| 国产精品高潮视频| 亚洲综合中文字幕在线观看| 欧美在线视频播放| 日韩一区在线视频| 韩剧1988免费观看全集| 欧美国产视频一区二区| 国产精品永久免费在线| 国产欧美一区二区三区在线看| 日韩av日韩在线观看| 亚洲国产欧美一区二区三区久久| 一区二区三区四区精品| 亚洲午夜久久久影院| 欧美成人激情视频免费观看| 中文字幕日韩欧美在线视频| 国产精品视频免费在线| 亚洲第一区第一页| 91久久久久久国产精品| 国产免费一区二区三区香蕉精| 日韩av资源在线播放| 成人国产在线激情| 欧美日韩精品在线播放| 日韩av在线天堂网| 在线日韩精品视频| 欧美激情综合亚洲一二区| 国产精品综合不卡av| 91精品啪在线观看麻豆免费| 欧美性猛交xxxx乱大交蜜桃| 欧美性xxxx在线播放| 午夜精品蜜臀一区二区三区免费| 欧美一级大片在线免费观看| 91九色国产社区在线观看| 久久伊人91精品综合网站| 精品国产一区二区三区四区在线观看|