电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

DB2中的數據值加密(1)

瀏覽:7日期:2023-11-10 16:50:41
【導讀】本文描述如何使用 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
標簽: DB2 數據庫
主站蜘蛛池模板: 油液红外光谱仪-油液监测系统-燃油嗅探仪-上海冉超光电科技有限公司 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 一体化预制泵站-一体化提升泵站-一体化泵站厂家-山东康威环保 | 高压包-点火器-高压发生器-点火变压器-江苏天网 | 无水硫酸铝,硫酸铝厂家-淄博双赢新材料科技有限公司 | 耐高温硅酸铝板-硅酸铝棉保温施工|亿欧建设工程 | 深圳激光打标机_激光打标机_激光焊接机_激光切割机_同体激光打标机-深圳市创想激光科技有限公司 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 定量包装秤,吨袋包装称,伸缩溜管,全自动包装秤,码垛机器人,无锡市邦尧机械工程有限公司 | 船用烟火信号弹-CCS防汛救生圈-船用救生抛绳器(海威救生设备) | 热工多功能信号校验仪-热电阻热电偶校验仿真仪-金湖虹润仪表 | 大巴租车平台承接包车,通勤班车,巴士租赁业务 - 鸿鸣巴士 | AGV叉车|无人叉车|AGV智能叉车|AGV搬运车-江西丹巴赫机器人股份有限公司 | 分光色差仪,测色仪,反透射灯箱,爱色丽分光光度仪,美能达色差仪维修_苏州欣美和仪器有限公司 | 压砖机_电动螺旋压力机_粉末成型压力机_郑州华隆机械tel_0371-60121717 | 透平油真空滤油机-变压器油板框滤油机-滤油车-华之源过滤设备 | 硅胶管挤出机厂家_硅胶挤出机生产线_硅胶条挤出机_臣泽智能装备 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 附着力促进剂-尼龙处理剂-PP处理剂-金属附着力处理剂-东莞市炅盛塑胶科技有限公司 | 直读光谱仪,光谱分析仪,手持式光谱仪,碳硫分析仪,创想仪器官网 | 空气能暖气片,暖气片厂家,山东暖气片,临沂暖气片-临沂永超暖通设备有限公司 | 杭州实验室尾气处理_实验台_实验室家具_杭州秋叶实验设备有限公司 | 板式换网器_柱式换网器_自动换网器-郑州海科熔体泵有限公司 | 云南成人高考网| 物和码官网,物和码,免费一物一码数字化营销SaaS平台 | 橡胶粉碎机_橡胶磨粉机_轮胎粉碎机_轮胎磨粉机-河南鼎聚重工机械制造有限公司 | 湖南印刷厂|长沙印刷公司|画册印刷|挂历印刷|台历印刷|杂志印刷-乐成印刷 | 东莞注册公司-代办营业执照-东莞公司注册代理记账-极刻财税 | 活性氧化铝|无烟煤滤料|活性氧化铝厂家|锰砂滤料厂家-河南新泰净水材料有限公司 | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 世纪豪门官网 世纪豪门集成吊顶加盟电话 世纪豪门售后电话 | 铜镍-康铜-锰铜-电阻合金-NC003 - 杭州兴宇合金有限公司 | MVE振动电机_MVE震动电机_MVE卧式振打电机-河南新乡德诚生产厂家 | 稳尚教育加盟-打造高考志愿填报平台_新高考志愿填报加盟_学业生涯规划加盟 | 抖音短视频运营_企业网站建设_网络推广_全网自媒体营销-东莞市凌天信息科技有限公司 | 冷却塔风机厂家_静音冷却塔风机_冷却塔电机维修更换维修-广东特菱节能空调设备有限公司 | 折弯机-刨槽机-数控折弯机-数控刨槽机-数控折弯机厂家-深圳豐科机械有限公司 | 洗石机-移动滚筒式,振动,螺旋,洗矿机-青州冠诚重工机械有限公司 | 楼梯定制_楼梯设计施工厂家_楼梯扶手安装制作-北京凌步楼梯 | 雪花制冰机(实验室雪花制冰机)百科 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 |