升級大對象(Large Object,即LOB)存儲能力的關鍵原因是在Oracle 11g中數據安全需求越來越高,本文主要是研究如何擴充對LOB和表空間的透明數據加密(Transparent Data Encryption,即TDE)特性來提高數據的安全性,並解釋這些特性是如何保護復雜的、非結構化數據的,如醫學數字圖像通訊信息(Digital Imaging for Communication of Medical Information,即DICOM)對象。
Oracle 11g新的SecureFile特性主要是集中在數據壓縮和重復數據刪除方面,主要是為了節約存儲LOB對象的空間,當然在安全特性方面Oracle 11g不僅只有這兩個,所有這些安全特性也非常符合最近當選的美國總統奧巴馬頒布的議事日程,白宮的技術方向明確指明新的管理計劃:
在電子信息技術系統方面增加投入以降低醫療保健方面的成本,使用衛生信息技術降低醫療保健方面的成本,每年投入100億美元,到五年後讓美國的醫療保健系統擴展為基於標准的電子醫療信息系統,包括電子健康記錄。
加密LOB:把安全放進SecureFile
Oracle 11g現在把在SecureFile LOB中存儲敏感信息放在非常重要的戰略位置,因為這樣才能夠證明在Oracle 10gR2中推出的透明數據加密(TDE)的作用,TDE在列級提供了遵循工業標准的自動加密算法(如3DES168,AES128,AES192和AES256)。
1、開啟透明數據加密
在開始使用透明數據加密特性之前,需要在數據庫中進行一翻設置,幸運的是,在Oracle 11g數據庫中這個設置非常簡單了,因為現在只需要在數據庫的網絡配置文件中添加合適的配置目錄即可,在之前的Oracle版本中,最簡單的方法就是通過Oracle Wallet Manager utility設置這個“wallet”文件,欲了解前期版本是如何啟用透明數據加密特性的,請參考我之前的文章“如何在Oracle 10g R2中實現透明數據加密”。
清單1中的內容顯示了我在SQLNET.ORA網絡配置文件中添加的內容,以便在我指定的目錄中創建默認的TDE PKI密鑰文件ewallet.p12,然後我使用ALTER SYSTEM SET ENCRYPTION KEY命令打開這個“wallet”並開啟加密特性。
清單1 開啟透明數據加密
在SQLNET.ORA網絡配置文件中添加參數設置開啟Oracle 11g數據庫的透明數據加密功能
ENCRYPTION_WALLET_LOCATION =(SOURCE=
(METHOD=FILE)
(METHOD_DATA=
(DIRECTORY=/u01/app/Oracle/admin/orcl/wallet))
然後,打開wallet並設置加密密鑰密碼激活Oracle 11g的加密功能
SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "r3aL1y!T16ht";SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "r3aL1y!T16ht";
2、控制SecureFile加密
完成TDE設置後,在開啟SecureFile LOB加密相對就簡單了,和在Oracle表中開啟其它類型的加密很類似,ENCRYPT告訴Oracle在現有SecureFile LOB上應用TDE加密,也可以通過DECRYPT告訴Oracle從SecureFile LOB上移除加密特性。
3、改變SecureFile加密算法或加密密鑰
和其它Oracle數據類型一樣,ALTER TABLE REKEY命令可以用來修改當前的加密算法,如默認的加密算法AES192改為AES256,TDE PKI密鑰發生變化的話,REKEY命令也可以用於重新加密現有的SecureFile LOB。Oracle將會在塊級進行加密,確保重新加密執行得更有效。
但請注意在相同的分區下對應的SecureFile LOB段只能夠被修改為啟用或禁用加密,如LOB段不能被REKEY,這是因為Oracle 11g在相同的LOB分區內對所有SecureFile LOB使用了相同的加密算法。
清單2顯示這些命令的示例。
清單2 對已有的SecureFile LOB應用透明數據加密
應用默認的加密給單個SecureFile LOB
SQL> ALTER TABLE trbtkt.secure_ticketsMODIFY (document CLOB ENCRYPT);
應用非默認的AES 256位加密算法給單個SecureFile LOB
SQL> ALTER TABLE trbtkt.secure_ticketsMODIFY (scrnimg CLOB ENCRYPT USING 'AES256');
為單個SecureFile LOB rekey加密
SQL> ALTER TABLE trbtkt.secure_ticketsMODIFY (scrnimg CLOB REKEY USING 'AES192');
將加密應用給一個分區段
SQL> ALTER TABLE trbtkt.secure_ticketsMODIFY PARTITION sts_open (LOB(document) (ENCRYPT));
從單個SecureFile LOB中移除加密
SQL> ALTER TABLE trbtkt.secure_ticketsMODIFY (scrnimg CLOB DECRYPT);
加密表空間
Oracle 10g R2將它的加密能力擴展到數據庫的任意表和索引了,但要識別和隔離那些需要加密的對象和列工作量很大,通常,可能僅僅是將許多在業務功能上相似的對象全部加密了,如數據庫中所有封裝了機密雇員信息的表和索引,為了使在這些情況下的加密變得更加簡單易行,Oracle 11g現在可以加密整個表空間了。
表空間加密仍然是在塊級實現的,但遺憾的是它不能在現有的表空間上執行,因此Oracle DBA必須在一開始創建表空間的時候就啟用加密,然後Oracle DBA就可以使用ALTER TABLE MOVE命令來將表移動到加密表空間中,與此類似,已有的索引也可以通過重新創建命令ALTER INDEX REBUILD ONLINE,直接遷移到加密表空間中去。
和加密列一樣,在創建加密表空間之前,數據庫加密wallet必須先打開才行,通過CREATE TABLESPACE命令中新的ENCRYPTION指令,新的表空間將會自動應用指定的加密算法到所有存儲在其內部的對象,默認采用的是AES 128位加密算法,但可以應用任意一個標准的加密算法(3DES168,AES128,AES192和AES256之一),如果不出什麼問題的話,一個加密表空間可以傳輸到一個不同的Oracle 11g數據庫中,只要源和目標數據庫服務器使用了相同的endianness,並共享了相同的加密wallet即可。
但注意臨時表空間和UNDO表空間不能使用這類加密算法,同樣,擴展表源數據和擴展LOB(如BFILE)也不能加密。最後,由於加密密鑰是在表級應用的,因此無法為加密表空間內的加密對象執行全局rekey,但在初始化加密表空間時可以使用這個方法來執行一次rekey操作。
為了說明加密表空間的特性,我創建了一個新的表空間PATIMAGES,采用了AES 256位加密算法,如清單3中的代碼所示。我將使用這個新的表空間作為容器,存儲後面我們將要討論到的通過SecureFile在表中存儲敏感的醫療信息:使用來自DICOM文件的源數據,在Oracle 11g中存儲醫療影像和相關信息。
清單3 創建一個加密表空間存儲敏感信息
DROP TABLESPACE patimages INCLUDING CONTENTS AND DATAFILES;CREATE TABLESPACE patimages
DATAFILE '/u01/app/Oracle/oradata/orcl/patimages01.dbf'
SIZE 64M REUSE
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT AUTO
ENCRYPTION USING 'AES256'
DEFAULT STORAGE (ENCRYPT);
DICOM:存儲病人醫療影像和元數據的工業標准
美國放射學會(ACR)和國家電氣制造聯合會(NEMA)在1993年通過協作將醫學影像和通訊(DICOM)標准化了,為醫學影像設備和相關應用程序的開發提供了可供參照執行的依據,後來成為存儲和傳輸放射影像通用的標准,Oracle 10g R2完全支持DICOM 3.0標准,但是直到Oracle 11g才實現了對DICOM數據進行加密。
Oracle 11g擴展了Oracle 10g R2 中ORDImage對象類型的能力,增加了一個新的ORDDicom對象類型,以便更有效地存儲DICOM影像,由於ORDDicom對象可以存儲在SecureFile LOB中,這樣就可以實現壓縮、重復數據刪除和加密存儲在DICOM文件中的影像和相關的元數據的能力,醫生、大學和醫院使用計算的病人信息,特別是診斷和研究。
Oracle 10gR2提供了轉儲病人信息到XML文件的能力,但現在的ORDDicom對象擴展了這些能力,使得可以直接在Oracle 11g數據庫查詢病人的元數據,這就意味著可以使用新的高級索引特性如XMLIndex數據類型來檢索特殊的病人信息,此外,Oracle 11g現在還可以創建、存儲、展現和檢索存儲在ORDDicom對象內的數據影像的指紋特征,也就是說將會更容易選中正確的病人信息,ORDDicom數據模型也可以幫助保證病人信息的機密性,因為它提供了一個方法可以避免洩露來自DICOM文件病人元數據中的私密信息。
1、創建DICOM對象
為了說明如何使用這些強大的功能特性增強Oracle 11g SecureFile的加密能力,我創建了一個新的方案和表MIPS.PATIENT_IMAGES,我將使用這個表存儲DICOM元數據,並在ORDDicom和ORDImage數據類型列中存儲影像數據,DICOM_IMAGE列將會存儲來自對應的源文件直接載入的DICOM信息,ANONYMOUS列將會存儲病人的敏感數據,THUMBPRINT列將會存儲來自每個DICOM文件中第一個影像的指紋圖像,清單4顯示了我創建這個表的DDL語句。
清單4 創建加密的SecureFile LOB存儲敏感信息
創建一個用戶(MIPS)
DROP USER mips CASCADE;CREATE USER mips
IDENTIFIED BY mips
DEFAULT TABLESPACE patimages
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON patimages;
GRANT CONNECT, RESOURCE TO mips;
GRANT EXECUTE ANY PROCEDURE to mips;
GRANT CREATE ANY DIRECTORY TO mips;
創建一個新的目錄DROP DIRECTORY mips_imgs;
CREATE OR REPLACE DIRECTORY mips_imgs
AS '/home/Oracle/dicom';
GRANT READ ON DIRECTORY mips_imgs TO mips;
創建一個新表MIPS.PATIENT_IMAGES使用SecureFile LOB存儲DICOM文件。DROP TABLE mips.patIEnt_images PURGE;
CREATE TABLE mips.patIEnt_images (
patIEnt_id NUMBER
,name VARCHAR2(30)
,ssn VARCHAR2(11)
,dob DATE
,dicom_image ORDSYS.ORDDICOM
,anonymous ORDSYS.ORDDICOM
,thumbprint ORDSYS.ORDIMAGE
)
TABLESPACE patimages
LOB(dicom_image.source.localData)
STORE AS SECUREFILE (
TABLESPACE patimages
DISABLE STORAGE IN ROW
DEDUPLICATE
COMPRESS HIGH
CACHE READS
)
LOB(anonymous.source.localData)
STORE AS SECUREFILE (
TABLESPACE patimages
DISABLE STORAGE IN ROW
DEDUPLICATE
COMPRESS HIGH
CACHE READS
)
LOB(thumbprint.source.localData)
STORE AS SECUREFILE (
TABLESPACE patimages
DISABLE STORAGE IN ROW
DEDUPLICATE
COMPRESS HIGH
CACHE READS
)
;
-- 注釋
COMMENT ON TABLE mips.patIEnt_images
IS 'Contains PatIEnt metadata and DICOM images';
COMMENT ON COLUMN mips.patient_images.patIEnt_id
IS 'Unique identifier for a PatIEnt';
COMMENT ON COLUMN mips.patIEnt_images.name
IS 'PatIEnt Name';
COMMENT ON COLUMN mips.patIEnt_images.ssn
IS 'PatIEnt Social Security Number';
COMMENT ON COLUMN mips.patIEnt_images.dob
IS 'PatIEnt Date of Birth';
COMMENT ON COLUMN mips.patIEnt_images.dicom_image
IS 'DICOM LOB';
COMMENT ON COLUMN mips.patIEnt_images.anonymous
IS 'Anonymous DICOM LOB';
COMMENT ON COLUMN mips.patIEnt_images.thumbprint
IS 'Thumbprint of DICOM image';
-- 創建索引和約束
CREATE UNIQUE INDEX mips.patIEnt_images_pk_idx
ON mips.patient_images(patIEnt_id)
TABLESPACE patimages;
ALTER TABLE mips.patIEnt_images
ADD CONSTRAINT patIEnt_images_pk
PRIMARY KEY (patIEnt_id);
2、從DICOM源文件轉移到ORDDicom對象
現在我已經為DICOM信息創建好了適當的資料庫,我將要使用SQL*Loader直接從DICOM源文件中提取並格式化病人元數據,對於我的源數據,我將使用若干個簡單的DICOM文件,這些DICOM文件都是從http://www.barre.nom.fr/medical/下載得到的,病人的姓名和其它信息完全是虛構的,只是為了說明這些概念,清單5顯示了SQL*Loader用於初始化、格式化和從這些源文件中載入DICOM數據到ORDDicom和ORDImage數據類型列的參數文件,以及調用SQL*Loader執行這個初始化數據載入的結果。
清單5 使用SQL*Loader載入DICOM原始文件到Oracle 11g數據庫中
-- SQL*Loader參數文件: LoadDICOMFromFile.sqlparms
-- 目的: 這個參數文件將直接從DICOM文件載入DICOM數據到MIPS.PATIENT_IMAGES 表的DICOM_IMAGE 列,它也控制了ANONYMOUS列(它容納匿名的DICOM數據)和THUMBPRINT列(它容納DICOM圖像本身的指紋圖像)的初始化。
LOAD DATAINFILE *
INTO TABLE mips.patIEnt_images
TRUNCATE
FIELDS TERMINATED BY WHITESPACE
OPTIONALLY ENCLOSED BY '"'
(
patIEnt_id INTEGER EXTERNAL
,name CHAR
,ssn CHAR
,dob DATE "yyyy-mm-dd"
,fn FILLER CHAR
-- 載入列對象MIPS.PATIENT_IMAGES.DICOM_IMAGE:
-- 1.) LOB屬性source.localData和DICOM數據一起載入。
-- 2.) 屬性srcType被設置為"local"。
-- 3.) 屬性updateTime被初始化到當前日期。
-- 4.) LOB屬性擴展使用空的LOB進行初始化。
,dicom_image COLUMN OBJECT (
source COLUMN OBJECT (
localData LOBFILE(fn) TERMINATED BY EOF
,srcType CONSTANT 'local'
,updateTime EXPRESSION "SYSDATE"
)
,extension LOBFILE(fn) TERMINATED BY EOF
DEFAULTIF dicom_image.source.srcType='local'
)
-- 初始化(但不載入)列對象MIPS.PATIENT_IMAGES.ANONYMOUS:
-- 1.) LOB屬性source.localData和擴展被初始化。
-- 2.) srcType屬性被初始化為"local"。
-- 3.) localData LOB將容納DICOM數據的匿名內容。
-- 4.) srcType屬性被初始化為"local"。
-- 5.) LOB擴展是一個由ORDDICOM使用的內部字段。
,anonymous COLUMN OBJECT (
source COLUMN OBJECT (
localData LOBFILE(fn) TERMINATED BY EOF
DEFAULTIF anonymous.source.srcType='local'
,srcType CONSTANT 'LOCAL'
)
,extension LOBFILE(fn) TERMINATED BY EOF
DEFAULTIF dicom_image.source.srcType='local'
)
-- 初始化(但不載入)列對象MIPS.PATIENT_IMAGES.THUMBPRINT:
-- 1.) LOB屬性擴展被一個空的LOB初始化。
-- 2.) LOB屬性source.localData被一個空的LOB初始化。
-- 3.) 本地屬性被初始化為1。
,thumbprint COLUMN OBJECT (
source COLUMN OBJECT (
localData LOBFILE(fn) TERMINATED BY EOF
DEFAULTIF thumbprint.source.local=X'1'
,local CONSTANT 1
)
)
)
BEGINDATA
101 "Ames, Aldritch" 322-51-1111 1907-12-01 CT-MONO2-16-ankle.dcm
202 "Barry, Dave" 345-21-2222 1968-12-24 OT-MONO2-8-colon.dcm
303 "Colson, Charles" 342-43-3333 1931-11-03 MR-MONO2-8-16x-heart.dcm
404 "Dean, John" 322-09-4444 1942-02-18 NM-MONO2-16-13x-heart.dcm
505 "Ehrlichman, John" 345-09-5555 1914-08-01 US-PAL-8-10x-echo.dcm
606 "Haldeman, Robert" 322-18-6666 1918-11-11 US-RGB-8-esopecho.dcm
>>> SQL*Loader results:
SQL*Loader: Release 11.1.0.6.0 - Production on Sat Mar 14 13:00:40 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Control File: LoadDICOMFromFile.sqlparms
Data File: LoadDICOMFromFile.sqlparms
Bad File: LoadDICOMFromFile.bad
Discard File: none specifIEd
(Allow all discards)
Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array: 64 rows, maximum of 256000 bytes
Continuation: none specifIEd
Path used: Conventional
Table MIPS.PATIENT_IMAGES, loaded from every logical record.
Insert option in effect for this table: TRUNCATE
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
PATIENT_ID FIRST * WHT O(") CHARACTER
NAME NEXT * WHT O(") CHARACTER
SSN NEXT * WHT O(") CHARACTER
DOB NEXT * WHT O(") DATE yyyy-mm-dd
FN NEXT * WHT O(") CHARACTER
(FILLER FIELD)
DICOM_IMAGE DERIVED * COLUMN OBJECT
*** FIElds in DICOM_IMAGE
SOURCE DERIVED * COLUMN OBJECT
*** FIElds in DICOM_IMAGE.SOURCE
LOCALDATA DERIVED * EOF CHARACTER
Dynamic LOBFILE. Filename in fIEld FN
SRCTYPE CONSTANT
Value is 'local'
UPDATETIME EXPRESSION
SQL string for column : "SYSDATE"
*** End of fIElds in DICOM_IMAGE.SOURCE
EXTENSION DERIVED * EOF CHARACTER
Dynamic LOBFILE. Filename in fIEld FN
DEFAULT if DICOM_IMAGE.SOURCE.SRCTYPE = 0X6c6f63616c(character 'local')
*** End of fIElds in DICOM_IMAGE
ANONYMOUS DERIVED * COLUMN OBJECT
*** FIElds in ANONYMOUS
SOURCE DERIVED * COLUMN OBJECT
*** FIElds in ANONYMOUS.SOURCE
LOCALDATA DERIVED * EOF CHARACTER
Dynamic LOBFILE. Filename in fIEld FN
DEFAULT if ANONYMOUS.SOURCE.SRCTYPE = 0X6c6f63616c(character 'local')
SRCTYPE CONSTANT
Value is 'LOCAL'
*** End of fIElds in ANONYMOUS.SOURCE
EXTENSION DERIVED * EOF CHARACTER
Dynamic LOBFILE. Filename in fIEld FN
DEFAULT if DICOM_IMAGE.SOURCE.SRCTYPE = 0X6c6f63616c(character 'local')
*** End of fIElds in ANONYMOUS
THUMBPRINT DERIVED * COLUMN OBJECT
*** FIElds in THUMBPRINT
SOURCE DERIVED * COLUMN OBJECT
*** FIElds in THUMBPRINT.SOURCE
LOCALDATA DERIVED * EOF CHARACTER
Dynamic LOBFILE. Filename in fIEld FN
DEFAULT if THUMBPRINT.SOURCE.LOCAL = 0X01(character '')
LOCAL CONSTANT
Value is '1'
*** End of fIElds in THUMBPRINT.SOURCE
*** End of fIElds in THUMBPRINT
Table MIPS.PATIENT_IMAGES:
6 Rows successfully loaded.
0 Rows not loaded due to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fIElds were null.
Space allocated for bind array: 83456 bytes(64 rows)
Read buffer bytes: 1048576
Total logical records skipped: 0
Total logical records read: 6
Total logical records rejected: 0
Total logical records discarded: 0
Run began on Sat Mar 14 13:00:40 2009
Run ended on Sat Mar 14 13:00:49 2009
Elapsed time was: 00:00:09.65
CPU time was: 00:00:00.61
3、生成指紋圖像和匿名的元數據
為了完成ANONYMOUS和THUMBPRINT列的填充,我將使用一些技巧:
(1)首先,我將通過調用setModel 方法載入ORDDicom對象模型,這個對象模型必須在調用其它方法之前載入。
(2)然後使用processCopy方法生成一張150x200的JPEG圖像,將其存儲到THUMBPRINT列中。
(3)最後,我使用makeAnonymous方法創建一個匿名版本的DICOM_IMAGE列數據,並將其存儲到ANONYMOUS列中。
清單6 顯示了如何在最初被載入MIPS.PATIENT_IMAGES表中的所有行上執行這些方法。
清單6 從前面載入的ORDDicom對象創建和存儲匿名的病人信息和指紋圖像:
1)將DICOM模型載入到內存中。
2)將原始的DICOM文件元數據轉換成對應的元素。
3)基於原始的DICOM影像以JPEG格式創建一個縮略圖。
4)生成一個匿名的DICOM文件版本。
5)將新的信息保存到它們對應的SecureFile LOB中。
SET SERVEROUTPUT ONDECLARE
dcm_row ORDSYS.ORDDICOM;
BEGIN
-- 載入DICOM數據模型
ord_dicom.setDatamodel;
-- 在醫學圖像表中遍歷所有行
FOR dcm_row IN (
SELECT
patIEnt_id
,dicom_image
,anonymous
,thumbprint
FROM mips.patIEnt_images
FOR UPDATE
)
LOOP
BEGIN
-----
--通過setPropertIEs存儲過程初始化DICOM SecureFile LOB列屬性
-----
dcm_row.dicom_image.setPropertIEs();
-----
-- 在原始DICOM影像的基礎上構建一個縮略圖圖像
-----
dcm_row.dicom_image.processCopy('fileFormat=JPEG fixedScale=150,200', dcm_row.thumbprint);
-----
-- 通過makeAnonymous()函數生成DICOM對象的匿名版本
-----
dcm_row.dicom_image.makeAnonymous(genUID(dcm_row.patIEnt_id), dcm_row.anonymous);
-----
-- 將新產生的信息保存到它們對應的SecureFile LOB中
-----
UPDATE mips.patIEnt_images
SET dicom_image = dcm_row.dicom_image
,anonymous = dcm_row.anonymous
,thumbprint = dcm_row.thumbprint
WHERE patient_id = dcm_row.patIEnt_id;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error processing image for Patient ID #' || dcm_row.patIEnt_id);
END;
END LOOP;
COMMIT;
END;
/
4、使用ORDDicom和ORDImage列的內容
最後,我已經准備好研究這些已經載入到DICOM列的DICOM信息,幸運的是,ORDDicom數據類型使得這些工作變得相當簡單,因為它提供了多種方法來直接查詢病人的元數據屬性,清單7顯示了一個簡單的查詢,它直接從DICOM_IMAGE和THUMBPRINT列查詢多個屬性。
清單7 查看已經載入到ORDDICOM和ORDIMAGE對象中的元數據
顯示選擇的內容:
1)普通數據類型
2)ORDDICOM數據類型
3)ORDIMAGE數據類型
SET LINESIZE 80SET PAGESIZE 80
TTITLE 'Sample Patient Metadata|(from MIPS.PATIENT_IMAGES)'
COLUMN patIEnt_id FORMAT 99999 HEADING 'Pat|ID'
COLUMN name FORMAT A20 HEADING 'PatIEnt Name' WRAP
COLUMN ssn FORMAT A11 HEADING 'PatIEnt SSN'
COLUMN di_sop_uid FORMAT A30 HEADING 'DICOM Image SOP UID' WRAP
COLUMN tp_len FORMAT 99999 HEADING 'Thumb|Print|Image|Size'
SELECT
PI.patIEnt_id
,PI.name
,PI.ssn
,PI.dicom_image.sop_instance_uid AS di_sop_uid
,PI.thumbprint.getcontentlength() AS tp_len
FROM mips.patIEnt_images PI
ORDER BY PI.patIEnt_id
;
TTITLE OFF
Sun Mar 15 page 1
Sample PatIEnt Metadata
(from MIPS.PATIENT_IMAGES)
Thumb
Pat Image
ID Patient Name PatIEnt SSN DICOM Image SOP UID Size
------ -------------------- ----------- ------------------------------ ------
101 Ames, Aldritch 322-51-1111 1.2.840.113619.2.1.2411.103115 5034
2382.365.1.736169244
202 Barry, Dave 345-21-2222 1.3.46.670589.17.1.7.0.16 5677
303 Colson, Charles 342-43-3333 999.999.2.19960619.163000.1.10 3648
3
404 Dean, John 322-09-4444 2.16.840.1.113662.5.8796818449 1596
476.121423489.1.1.3101.5309511
143
505 Ehrlichman, John 345-09-5555 999.999.133.1996.1.1800.1.6.25 5252
606 Haldeman, Robert 322-18-6666 999.999.2.19941105.112000.2.10 4683
7
校驗存儲在ORDDicom或ORDImage數據類型列中的圖像需要一點技巧,因為需要一個接口才能查看這些圖像,因為這些圖像都采用基於工業標准的格式存儲,如JPEG,TIF,PNG等,所以有大量的免費圖像查看程序可以拿來使用。
小結
Oracle 11g新的SecureFile特性大大擴展在Oracle數據庫中存儲大對象的能力,並提高了安全性和有效性,SecureFILE LOB的壓縮和重復數據刪除功能在空間利用上更是讓人驚訝,SecureFILE LOB的透明數據加密特性讓存儲在Oracle 11g數據庫中的敏感信息和機密信息安全性更有保障,這些特性讓Oracle 11g數據庫成為美國新的聯邦政府在啟動存儲醫院、病人和醫療元數據方面的主要候選數據庫。