国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Oracle 11g透明數(shù)據(jù)加密安全特性解析

瀏覽:163日期:2023-11-25 12:55:38

升級大對象(Large Object,即LOB)存儲(chǔ)能力的關(guān)鍵原因是在Oracle 11g中數(shù)據(jù)安全需求越來越高,本文主要是研究如何擴(kuò)充對LOB和表空間的透明數(shù)據(jù)加密(Transparent Data Encryption,即TDE)特性來提高數(shù)據(jù)的安全性,并解釋這些特性是如何保護(hù)復(fù)雜的、非結(jié)構(gòu)化數(shù)據(jù)的,如醫(yī)學(xué)數(shù)字圖像通訊信息(Digital Imaging for Communication of Medical Information,即DICOM)對象。

oracle 11g新的SecureFile特性主要是集中在數(shù)據(jù)壓縮和重復(fù)數(shù)據(jù)刪除方面,主要是為了節(jié)約存儲(chǔ)LOB對象的空間,當(dāng)然在安全特性方面Oracle 11g不僅只有這兩個(gè),所有這些安全特性也非常符合最近當(dāng)選的美國總統(tǒng)奧巴馬頒布的議事日程,白宮的技術(shù)方向明確指明新的管理計(jì)劃:

在電子信息技術(shù)系統(tǒng)方面增加投入以降低醫(yī)療保健方面的成本,使用衛(wèi)生信息技術(shù)降低醫(yī)療保健方面的成本,每年投入100億美元,到五年后讓美國的醫(yī)療保健系統(tǒng)擴(kuò)展為基于標(biāo)準(zhǔn)的電子醫(yī)療信息系統(tǒng),包括電子健康記錄。

加密LOB:把安全放進(jìn)SecureFile

oracle 11g現(xiàn)在把在SecureFile LOB中存儲(chǔ)敏感信息放在非常重要的戰(zhàn)略位置,因?yàn)檫@樣才能夠證明在Oracle 10gR2中推出的透明數(shù)據(jù)加密(TDE)的作用,TDE在列級提供了遵循工業(yè)標(biāo)準(zhǔn)的自動(dòng)加密算法(如3DES168,AES128,AES192和AES256)。

1、開啟透明數(shù)據(jù)加密

在開始使用透明數(shù)據(jù)加密特性之前,需要在數(shù)據(jù)庫中進(jìn)行一翻設(shè)置,幸運(yùn)的是,在Oracle 11g數(shù)據(jù)庫中這個(gè)設(shè)置非常簡單了,因?yàn)楝F(xiàn)在只需要在數(shù)據(jù)庫的網(wǎng)絡(luò)配置文件中添加合適的配置目錄即可,在之前的Oracle版本中,最簡單的方法就是通過Oracle Wallet Manager utility設(shè)置這個(gè)“wallet”文件,欲了解前期版本是如何啟用透明數(shù)據(jù)加密特性的,請參考我之前的文章“如何在Oracle 10g R2中實(shí)現(xiàn)透明數(shù)據(jù)加密”。

清單1中的內(nèi)容顯示了我在SQLNET.ORA網(wǎng)絡(luò)配置文件中添加的內(nèi)容,以便在我指定的目錄中創(chuàng)建默認(rèn)的TDE PKI密鑰文件ewallet.p12,然后我使用ALTER system SET ENCRYPTION KEY命令打開這個(gè)“wallet”并開啟加密特性。

清單1 開啟透明數(shù)據(jù)加密

在SQLNET.ORA網(wǎng)絡(luò)配置文件中添加參數(shù)設(shè)置開啟Oracle 11g數(shù)據(jù)庫的透明數(shù)據(jù)加密功能

;;;;ENCRYPTION_WALLET_LOCATION = (SOURCE=

(METHOD=FILE)

(METHOD_DATA=

(DIRECTORY=/u01/app/oracle/admin/orcl/wallet))然后,打開wallet并設(shè)置加密密鑰密碼激活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設(shè)置后,在開啟SecureFile LOB加密相對就簡單了,和在Oracle表中開啟其它類型的加密很類似,ENCRYPT告訴Oracle在現(xiàn)有SecureFile LOB上應(yīng)用TDE加密,也可以通過DECRYPT告訴Oracle從SecureFile LOB上移除加密特性。

3、改變SecureFile加密算法或加密密鑰

和其它Oracle數(shù)據(jù)類型一樣,ALTER table REKEY命令可以用來修改當(dāng)前的加密算法,如默認(rèn)的加密算法AES192改為AES256,TDE PKI密鑰發(fā)生變化的話,REKEY命令也可以用于重新加密現(xiàn)有的SecureFile LOB。Oracle將會(huì)在塊級進(jìn)行加密,確保重新加密執(zhí)行得更有效。

但請注意在相同的分區(qū)下對應(yīng)的SecureFile LOB段只能夠被修改為啟用或禁用加密,如LOB段不能被REKEY,這是因?yàn)镺racle 11g在相同的LOB分區(qū)內(nèi)對所有SecureFile LOB使用了相同的加密算法。

清單2顯示這些命令的示例。

清單2 對已有的SecureFile LOB應(yīng)用透明數(shù)據(jù)加密

應(yīng)用默認(rèn)的加密給單個(gè)SecureFile LOB

;;;sql> ALTER table trbtkt.secure_ticketsMODIFY (document CLOB ENCRYPT);

應(yīng)用非默認(rèn)的AES 256位加密算法給單個(gè)SecureFile LOB

;;;;sql> ALTER table trbtkt.secure_tickets MODIFY (scrnimg CLOB ENCRYPT USING 'AES256');為單個(gè)SecureFile LOB rekey加密

;;;;sql> ALTER table trbtkt.secure_tickets MODIFY (scrnimg CLOB REKEY USING 'AES192');將加密應(yīng)用給一個(gè)分區(qū)段

;;;;sql> ALTER table trbtkt.secure_tickets MODIFY PARTITION sts_open (LOB(document) (ENCRYPT));從單個(gè)SecureFile LOB中移除加密

;;;;sql> ALTER table trbtkt.secure_tickets MODIFY (scrnimg CLOB DECRYPT);加密表空間

oracle 10g R2將它的加密能力擴(kuò)展到數(shù)據(jù)庫的任意表和索引了,但要識(shí)別和隔離那些需要加密的對象和列工作量很大,通常,可能僅僅是將許多在業(yè)務(wù)功能上相似的對象全部加密了,如數(shù)據(jù)庫中所有封裝了機(jī)密雇員信息的表和索引,為了使在這些情況下的加密變得更加簡單易行,Oracle 11g現(xiàn)在可以加密整個(gè)表空間了。

表空間加密仍然是在塊級實(shí)現(xiàn)的,但遺憾的是它不能在現(xiàn)有的表空間上執(zhí)行,因此Oracle DBA必須在一開始創(chuàng)建表空間的時(shí)候就啟用加密,然后Oracle DBA就可以使用ALTER table MOVE命令來將表移動(dòng)到加密表空間中,與此類似,已有的索引也可以通過重新創(chuàng)建命令A(yù)LTER INDEX REBUILD ONLINE,直接遷移到加密表空間中去。

和加密列一樣,在創(chuàng)建加密表空間之前,數(shù)據(jù)庫加密wallet必須先打開才行,通過CREATE TABLESPACE命令中新的ENCRYPTION指令,新的表空間將會(huì)自動(dòng)應(yīng)用指定的加密算法到所有存儲(chǔ)在其內(nèi)部的對象,默認(rèn)采用的是AES 128位加密算法,但可以應(yīng)用任意一個(gè)標(biāo)準(zhǔn)的加密算法(3DES168,AES128,AES192和AES256之一),如果不出什么問題的話,一個(gè)加密表空間可以傳輸?shù)揭粋€(gè)不同的Oracle 11g數(shù)據(jù)庫中,只要源和目標(biāo)數(shù)據(jù)庫服務(wù)器使用了相同的endianness,并共享了相同的加密wallet即可。

但注意臨時(shí)表空間和UNDO表空間不能使用這類加密算法,同樣,擴(kuò)展表源數(shù)據(jù)和擴(kuò)展LOB(如BFILE)也不能加密。最后,由于加密密鑰是在表級應(yīng)用的,因此無法為加密表空間內(nèi)的加密對象執(zhí)行全局rekey,但在初始化加密表空間時(shí)可以使用這個(gè)方法來執(zhí)行一次rekey操作。

為了說明加密表空間的特性,我創(chuàng)建了一個(gè)新的表空間PATIMAGES,采用了AES 256位加密算法,如清單3中的代碼所示。我將使用這個(gè)新的表空間作為容器,存儲(chǔ)后面我們將要討論到的通過SecureFile在表中存儲(chǔ)敏感的醫(yī)療信息:使用來自DICOM文件的源數(shù)據(jù),在Oracle 11g中存儲(chǔ)醫(yī)療影像和相關(guān)信息。

清單3 創(chuàng)建一個(gè)加密表空間存儲(chǔ)敏感信息

;;;;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 AUTOENCRYPTION USING 'AES256'DEFAULT STORAGE (ENCRYPT);DICOM:存儲(chǔ)病人醫(yī)療影像和元數(shù)據(jù)的工業(yè)標(biāo)準(zhǔn)

美國放射學(xué)會(huì)(ACR)和國家電氣制造聯(lián)合會(huì)(NEMA)在1993年通過協(xié)作將醫(yī)學(xué)影像和通訊(DICOM)標(biāo)準(zhǔn)化了,為醫(yī)學(xué)影像設(shè)備和相關(guān)應(yīng)用程序的開發(fā)提供了可供參照執(zhí)行的依據(jù),后來成為存儲(chǔ)和傳輸放射影像通用的標(biāo)準(zhǔn),Oracle 10g R2完全支持DICOM 3.0標(biāo)準(zhǔn),但是直到Oracle 11g才實(shí)現(xiàn)了對DICOM數(shù)據(jù)進(jìn)行加密。

oracle 11g擴(kuò)展了Oracle 10g R2 中ORDImage對象類型的能力,增加了一個(gè)新的ORDDicom對象類型,以便更有效地存儲(chǔ)DICOM影像,由于ORDDicom對象可以存儲(chǔ)在SecureFile LOB中,這樣就可以實(shí)現(xiàn)壓縮、重復(fù)數(shù)據(jù)刪除和加密存儲(chǔ)在DICOM文件中的影像和相關(guān)的元數(shù)據(jù)的能力,醫(yī)生、大學(xué)和醫(yī)院使用計(jì)算的病人信息,特別是診斷和研究。

oracle 10gR2提供了轉(zhuǎn)儲(chǔ)病人信息到XML文件的能力,但現(xiàn)在的ORDDicom對象擴(kuò)展了這些能力,使得可以直接在Oracle 11g數(shù)據(jù)庫查詢病人的元數(shù)據(jù),這就意味著可以使用新的高級索引特性如XMLIndex數(shù)據(jù)類型來檢索特殊的病人信息,此外,Oracle 11g現(xiàn)在還可以創(chuàng)建、存儲(chǔ)、展現(xiàn)和檢索存儲(chǔ)在ORDDicom對象內(nèi)的數(shù)據(jù)影像的指紋特征,也就是說將會(huì)更容易選中正確的病人信息,ORDDicom數(shù)據(jù)模型也可以幫助保證病人信息的機(jī)密性,因?yàn)樗峁┝艘粋€(gè)方法可以避免泄露來自DICOM文件病人元數(shù)據(jù)中的私密信息。

 1、創(chuàng)建DICOM對象

為了說明如何使用這些強(qiáng)大的功能特性增強(qiáng)Oracle 11g SecureFile的加密能力,我創(chuàng)建了一個(gè)新的方案和表MIPS.PATIENT_IMAGES,我將使用這個(gè)表存儲(chǔ)DICOM元數(shù)據(jù),并在ORDDicom和ORDImage數(shù)據(jù)類型列中存儲(chǔ)影像數(shù)據(jù),DICOM_IMAGE列將會(huì)存儲(chǔ)來自對應(yīng)的源文件直接載入的DICOM信息,ANONYMOUS列將會(huì)存儲(chǔ)病人的敏感數(shù)據(jù),THUMBPRINT列將會(huì)存儲(chǔ)來自每個(gè)DICOM文件中第一個(gè)影像的指紋圖像,清單4顯示了我創(chuàng)建這個(gè)表的DDL語句。

清單4 創(chuàng)建加密的SecureFile LOB存儲(chǔ)敏感信息

創(chuàng)建一個(gè)用戶(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;創(chuàng)建一個(gè)新的目錄

DROP DIRECTORY mips_imgs;

CREATE OR REPLACE DIRECTORY mips_imgs

AS '/home/oracle/dicom';

GRANT READ ON DIRECTORY mips_imgs TO mips;創(chuàng)建一個(gè)新表MIPS.PATIENT_IMAGES使用SecureFile LOB存儲(chǔ)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';

-- 創(chuàng)建索引和約束

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源文件轉(zhuǎn)移到ORDDicom對象

現(xiàn)在我已經(jīng)為DICOM信息創(chuàng)建好了適當(dāng)?shù)馁Y料庫,我將要使用SQL*Loader直接從DICOM源文件中提取并格式化病人元數(shù)據(jù),對于我的源數(shù)據(jù),我將使用若干個(gè)簡單的DICOM文件,這些DICOM文件都是從http://www.barre.nom.fr/medical/下載得到的,病人的姓名和其它信息完全是虛構(gòu)的,只是為了說明這些概念,清單5顯示了SQL*Loader用于初始化、格式化和從這些源文件中載入DICOM數(shù)據(jù)到ORDDicom和ORDImage數(shù)據(jù)類型列的參數(shù)文件,以及調(diào)用SQL*Loader執(zhí)行這個(gè)初始化數(shù)據(jù)載入的結(jié)果。

清單5 使用SQL*Loader載入DICOM原始文件到Oracle 11g數(shù)據(jù)庫中

-- sql*Loader參數(shù)文件: LoadDICOMFromFile.sqlparms

-- 目的: 這個(gè)參數(shù)文件將直接從DICOM文件載入DICOM數(shù)據(jù)到MIPS.PATIENT_IMAGES 表的DICOM_IMAGE 列,它也控制了ANONYMOUS列(它容納匿名的DICOM數(shù)據(jù))和THUMBPRINT列(它容納DICOM圖像本身的指紋圖像)的初始化。

;;;;LOAD DATA INFILE *

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數(shù)據(jù)一起載入。

-- 2.) 屬性srcType被設(shè)置為'local'。

-- 3.) 屬性updateTime被初始化到當(dāng)前日期。

-- 4.) LOB屬性擴(kuò)展使用空的LOB進(jìn)行初始化。

;;;;,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和擴(kuò)展被初始化。

-- 2.) srcType屬性被初始化為'local'。

-- 3.) localData LOB將容納DICOM數(shù)據(jù)的匿名內(nèi)容。

-- 4.) srcType屬性被初始化為'local'。

-- 5.) LOB擴(kuò)展是一個(gè)由ORDDICOM使用的內(nèi)部字段。

;;;;,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屬性擴(kuò)展被一個(gè)空的LOB初始化。

-- 2.) LOB屬性source.localData被一個(gè)空的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、生成指紋圖像和匿名的元數(shù)據(jù)

為了完成ANONYMOUS和THUMBPRINT列的填充,我將使用一些技巧:

(1)首先,我將通過調(diào)用setModel 方法載入ORDDicom對象模型,這個(gè)對象模型必須在調(diào)用其它方法之前載入。

(2)然后使用processCopy方法生成一張150x200的JPEG圖像,將其存儲(chǔ)到THUMBPRINT列中。

(3)最后,我使用makeAnonymous方法創(chuàng)建一個(gè)匿名版本的DICOM_IMAGE列數(shù)據(jù),并將其存儲(chǔ)到ANONYMOUS列中。

清單6 顯示了如何在最初被載入MIPS.PATIENT_IMAGES表中的所有行上執(zhí)行這些方法。

清單6 從前面載入的ORDDicom對象創(chuàng)建和存儲(chǔ)匿名的病人信息和指紋圖像:

1)將DICOM模型載入到內(nèi)存中。

2)將原始的DICOM文件元數(shù)據(jù)轉(zhuǎn)換成對應(yīng)的元素。

3)基于原始的DICOM影像以JPEG格式創(chuàng)建一個(gè)縮略圖。

4)生成一個(gè)匿名的DICOM文件版本。

5)將新的信息保存到它們對應(yīng)的SecureFile LOB中。

;;;SET SERVEROUTPUT ON DECLARE

dcm_row ORDSYS.ORDDICOM;

BEGIN-- 載入DICOM數(shù)據(jù)模型

ord_dicom.setDatamodel;

-- 在醫(yī)學(xué)圖像表中遍歷所有行

;;;;FOR dcm_row IN ( SELECT

patient_id

,dicom_image

,anonymous

,thumbprint

FROM mips.patient_images

FOR UPDATE

)

LOOP

BEGIN

-------通過setProperties存儲(chǔ)過程初始化DICOM SecureFile LOB列屬性

-----

dcm_row.dicom_image.setProperties();

-----

-- 在原始DICOM影像的基礎(chǔ)上構(gòu)建一個(gè)縮略圖圖像

-----

dcm_row.dicom_image.processCopy('fileFormat=JPEG fixedScale=150,200', dcm_row.thumbprint);

-----

-- 通過makeAnonymous()函數(shù)生成DICOM對象的匿名版本

-----

dcm_row.dicom_image.makeAnonymous(genUID(dcm_row.patient_id), dcm_row.anonymous);

-----

-- 將新產(chǎn)生的信息保存到它們對應(yīng)的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列的內(nèi)容

最后,我已經(jīng)準(zhǔn)備好研究這些已經(jīng)載入到DICOM列的DICOM信息,幸運(yùn)的是,ORDDicom數(shù)據(jù)類型使得這些工作變得相當(dāng)簡單,因?yàn)樗峁┝硕喾N方法來直接查詢病人的元數(shù)據(jù)屬性,清單7顯示了一個(gè)簡單的查詢,它直接從DICOM_IMAGE和THUMBPRINT列查詢多個(gè)屬性。

清單7 查看已經(jīng)載入到ORDDICOM和ORDIMAGE對象中的元數(shù)據(jù)

顯示選擇的內(nèi)容:

1)普通數(shù)據(jù)類型

2)ORDDICOM數(shù)據(jù)類型

3)ORDIMAGE數(shù)據(jù)類型

;;;;SET LINESIZE 80 SET 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

Print

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校驗(yàn)存儲(chǔ)在ORDDicom或ORDImage數(shù)據(jù)類型列中的圖像需要一點(diǎn)技巧,因?yàn)樾枰粋€(gè)接口才能查看這些圖像,因?yàn)檫@些圖像都采用基于工業(yè)標(biāo)準(zhǔn)的格式存儲(chǔ),如JPEG,TIF,PNG等,所以有大量的免費(fèi)圖像查看程序可以拿來使用。

小結(jié)

oracle 11g新的SecureFile特性大大擴(kuò)展在Oracle數(shù)據(jù)庫中存儲(chǔ)大對象的能力,并提高了安全性和有效性,SecureFILE LOB的壓縮和重復(fù)數(shù)據(jù)刪除功能在空間利用上更是讓人驚訝,SecureFILE LOB的透明數(shù)據(jù)加密特性讓存儲(chǔ)在Oracle 11g數(shù)據(jù)庫中的敏感信息和機(jī)密信息安全性更有保障,這些特性讓Oracle 11g數(shù)據(jù)庫成為美國新的聯(lián)邦政府在啟動(dòng)存儲(chǔ)醫(yī)院、病人和醫(yī)療元數(shù)據(jù)方面的主要候選數(shù)據(jù)庫。

標(biāo)簽: Oracle 數(shù)據(jù)庫
主站蜘蛛池模板: 欧美一区二区视频在线观看 | 欧美精品网站 | 成人精品综合免费视频 | 亚洲图片偷拍区 | 成人国产免费 | a级毛片视频免费观看 | 欧美特级特黄a大片免费 | 国产精品美女一区二区 | 国内精品久久久久影院网站 | 亚洲特一级毛片 | 亚洲欧美手机在线观看 | 国内真实愉拍系列情侣自拍 | 国产一进一出视频网站 | 欧美一级看片a免费观看 | 欧美整片在线观看 | 日本亚州视频在线八a | 国产高清一区二区三区视频 | 黄色三级在线播放 | 自偷自偷自亚洲永久 | 99久久精品免费看国产一区二区三区 | 中文字幕日韩在线 | 国产亚洲高清视频 | 国产男女爽爽爽免费视频 | 久草视频资源 | 欧美亚洲在线视频 | 亚洲一区成人 | 特级毛片全部免费播放a一级 | 性欧美欧美巨大69 | 在线成人精品国产区免费 | 精品日本久久久久久久久久 | 99视频在线免费看 | 精品一区二区三区视频 | 国产成人久久精品区一区二区 | 91av综合| 久热国产在线视频 | 亚洲欧美7777 | 久9青青cao精品视频在线 | 国产又色又爽黄的网站免费 | 国内免费自拍视频 | 91精品国产免费 | 久久www免费人成精品 |