自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

運維 數(shù)據(jù)庫運維 Oracle
數(shù)據(jù)庫的安全問題是各位DBA最關(guān)心的問題,本文將為大家講解Oracle 11g透明數(shù)據(jù)加密安全特性問題。Oracle 11g新的安全特性主要是集中在數(shù)據(jù)壓縮和重復(fù)數(shù)據(jù)刪除方面,希望大家看過本文后,能更加理解Oracle的安全特性。

升級大對象(Large Object,即LOB)存儲能力的關(guān)鍵原因是在Oracle 11g中數(shù)據(jù)安全需求越來越高,本文主要是研究如何擴充對LOB和表空間的透明數(shù)據(jù)加密(Transparent Data Encryption,即TDE)特性來提高數(shù)據(jù)的安全性,并解釋這些特性是如何保護復(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é)約存儲LOB對象的空間,當(dāng)然在安全特性方面Oracle 11g不僅只有這兩個,所有這些安全特性也非常符合最近當(dāng)選的美國總統(tǒng)奧巴馬頒布的議事日程,白宮的技術(shù)方向明確指明新的管理計劃:

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

加密LOB:把安全放進SecureFile

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

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

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

清單1中的內(nèi)容顯示了我在SQLNET.ORA網(wǎng)絡(luò)配置文件中添加的內(nèi)容,以便在我指定的目錄中創(chuàng)建默認的TDE PKI密鑰文件ewallet.p12,然后我使用ALTER SYSTEM SET ENCRYPTION KEY命令打開這個“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)前的加密算法,如默認的加密算法AES192改為AES256,TDE PKI密鑰發(fā)生變化的話,REKEY命令也可以用于重新加密現(xiàn)有的SecureFile LOB。Oracle將會在塊級進行加密,確保重新加密執(zhí)行得更有效。

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

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

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

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

SQL> ALTER TABLE trbtkt.secure_tickets

MODIFY (document CLOB ENCRYPT);

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

SQL> ALTER TABLE trbtkt.secure_tickets

MODIFY (scrnimg CLOB ENCRYPT USING 'AES256');

為單個SecureFile LOB rekey加密

SQL> ALTER TABLE trbtkt.secure_tickets

MODIFY (scrnimg CLOB REKEY USING 'AES192');

將加密應(yīng)用給一個分區(qū)段

SQL> ALTER TABLE trbtkt.secure_tickets

MODIFY PARTITION sts_open (LOB(document) (ENCRYPT));

從單個SecureFile LOB中移除加密

SQL> ALTER TABLE trbtkt.secure_tickets

MODIFY (scrnimg CLOB DECRYPT);

加密表空間

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

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

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

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

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

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

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);

#p#

DICOM:存儲病人醫(yī)療影像和元數(shù)據(jù)的工業(yè)標(biāo)準

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

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

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

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

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

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

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

DROP DIRECTORY mips_imgs;

CREATE OR REPLACE DIRECTORY mips_imgs

AS '/home/oracle/dicom';

GRANT READ ON DIRECTORY mips_imgs TO mips;
創(chuàng)建一個新表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';

-- 創(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ù),我將使用若干個簡單的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í)行這個初始化數(shù)據(jù)載入的結(jié)果。

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

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

-- 目的: 這個參數(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屬性擴展使用空的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數(shù)據(jù)的匿名內(nèi)容。

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

-- 5.) LOB擴展是一個由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屬性擴展被一個空的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、生成指紋圖像和匿名的元數(shù)據(jù)

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

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

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

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

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

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

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

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

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

4)生成一個匿名的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存儲過程初始化DICOM SecureFile LOB列屬性

-----

dcm_row.dicom_image.setProperties();

-----

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

-----

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)準備好研究這些已經(jīng)載入到DICOM列的DICOM信息,幸運的是,ORDDicom數(shù)據(jù)類型使得這些工作變得相當(dāng)簡單,因為它提供了多種方法來直接查詢病人的元數(shù)據(jù)屬性,清單7顯示了一個簡單的查詢,它直接從DICOM_IMAGE和THUMBPRINT列查詢多個屬性。

清單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

校驗存儲在ORDDicom或ORDImage數(shù)據(jù)類型列中的圖像需要一點技巧,因為需要一個接口才能查看這些圖像,因為這些圖像都采用基于工業(yè)標(biāo)準的格式存儲,如JPEG,TIF,PNG等,所以有大量的免費圖像查看程序可以拿來使用。

小結(jié)

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

【編輯推薦】

  1. 淺談Oracle數(shù)據(jù)庫多種安全性措施
  2. 詳解Oracle的幾種分頁查詢語句
  3. Oracle DBA職責(zé)及日常工作分析
責(zé)任編輯:彭凡 來源: IT168
相關(guān)推薦

2012-05-07 13:45:45

Oraclen 11g虛擬列數(shù)據(jù)庫

2009-02-15 14:41:19

SQL Perform新特性Oracle

2010-01-13 16:08:09

Oracle 11g 數(shù)據(jù)衛(wèi)士

2009-01-11 08:16:00

自適應(yīng)游標(biāo)共享新特性Oracle 11g

2010-04-30 13:35:28

Oracle 11g

2010-04-16 09:50:26

Oracle 11g

2011-08-22 14:50:20

2010-04-07 17:27:38

Oracle 11g

2009-07-08 00:24:00

數(shù)據(jù)壓縮Oracle 11g

2009-09-15 09:52:25

Oracle 11g分

2010-01-11 10:08:14

Oracle 11g

2009-11-19 17:28:43

Oracle數(shù)據(jù)庫11

2010-04-13 15:56:03

Oracle 11g

2009-11-20 12:55:08

Oracle 11g功

2011-04-15 09:11:21

2009-09-02 15:35:57

Oracle 11g

2010-04-01 15:19:56

Oracle 11g壓

2009-03-12 10:28:32

數(shù)據(jù)庫Oracle11g自我調(diào)整

2010-05-10 14:46:54

Oracle 11g

2022-11-29 17:03:00

數(shù)據(jù)庫Oracle
點贊
收藏

51CTO技術(shù)棧公眾號