a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 181|回复: 0

[综合] Oracle10g:SQL和PL/SQL支持灵活加密

[复制链接]
发表于 2012-8-4 13:54:49 | 显示全部楼层 |阅读模式
对于加密,许多用户深感矛盾:他们既感兴趣,又因意识密钥管理的复杂性而感到慎重,如果处理不当,则会导致设置的效率低下。加密和解密值还会带来相关的性能开销,这使得大部分应用程序架构师不太乐于接受该过程。结果是,很多系统设计根本没有加密,只是构筑了强大的外围防护,如强大的口令和适当的授权方案。     但是,请想象一下如果整个服务器被盗了,甚至只是磁盘被盗,这些磁盘可以装配在具有相同操作系统的服务器上,然后其中的数据将被销毁殆尽。或者有一个的 DBA 品行不端,在日常业务活动中恶意突破了外围防护,然后将您所有重要的客户信息洗劫一空。在这两种情况下,如果所涉及的商业机构是在加利福尼亚州(可能不久之后在美国的其他州),它们在法律上有责任将安全漏洞的情况通知给所有受到影响的客户。中华考试网(www.Examw。com)
' b, r$ H* l1 J, a; w; r    在上述罕见(但确是事实)的情况中,认证方案没有实际意义。这就是为什么对于那些将安全作为头等大事的机构而言,透明数据加密 (TDE) 是一个如此有用的特性;它支持加密,同时将密钥管理的复杂性交给数据库引擎来处理。同时,它允许 DBA 在不必实际看到数据的情况下管理数据库表。
3 E  V' j: Y" x  z: B9 z    在 Oracle 数据库 10g 第 2 版中使用 TDE 时,可以随时地对表中的一列或多列进行加密;只需将列定义为加密形式即可,不用编写代码。请记住,加密需要使用密钥和算法对输入值进行加密。TDE 为特定的表生成单独的密钥。这种方法方便了密钥管理却也更易被他们窃取,所以数据库提供了另一种密钥 — 万能密钥 — ,它可以在数据库级别上设置。表密钥是利用万能密钥进行加密的,要获得表密钥就需要这个万能密钥。因此,对列进行解密时需要万能密钥和表密钥。. i2 ~' r8 @2 J9 S2 }) x5 v
    万能密钥存储在数据库外一个称为“钱夹”的地方 — 默认位置在 $ORACLE_BASE/admin/$ORACLE_SID/wallet。在概念上,它类似于下图。8 D6 E+ I2 ?" E& |; X  c1 Q( E: X

. ]4 X( U2 M$ G: C5 S* o  在配置 TDE 之后 — 或者更明确地说是配置了钱夹和万能密钥之后 — 您可以使用它来保护数据值。要为表的一列加密,需要使用以下 SQL:2 D& N: z" P3 X# T# s5 n
以下是代码片段:
2 g8 Q0 h2 X' q7 u# O  H5 j' B
0 p* s9 `* G* T: r2 z0 i3 ycreate table accounts # s' U) ]) t; l8 h, D- f, W1 s/ j# a
  (
$ A& j* C: y; o1 t7 u  acc_no number not null,
. ~" N: O/ A5 y  first_name varchar2(30) not null, 5 i: ]7 k* L0 `, g
  last_name varchar2(30) not null, 1 k9 O, S" G! K0 L: F' l4 P0 @
  SSN varchar2(9) ENCRYPT USING 'AES128',
+ ^# N/ e/ I% G/ P8 M, G  acc_type varchar2(1) not null, : M: l6 l& [* J- }7 t- ?; c: v( U
  folio_id number ENCRYPT USING 'AES128', 0 u) W# H$ x' r: G9 M' ]8 U. U
  sub_acc_type varchar2(30), + O: S3 @% r( W0 t* o. E. g
  acc_open_dt date not null,
' O) o4 n! `6 i8 G  D  q  acc_mod_dt date, 7 d+ b9 f' K) ^6 E4 @1 m
  acc_mgr_id number
+ u3 N& E! p( D* G: N& ~& h  )
+ r1 H, x& Y" X- |2 K) [0 X" G* \1 x6 \
9 f% ?( ]# u8 P# ~  |
    在这里,您在列 SSN 和 FOLIO_ID 上使用了 TDE,它们现在以加密方式存储在表本身。但是,当用户从表中选择时,她看到以明文表示的数据,因为在检索过程中已经完成了解密。如果磁盘被盗,则包含在表段中的信息仍然保持加密状态。盗窃者需要表密钥才能看到加密的值,但是要获得表密钥,他需要万能密钥,而万能密钥存储在外部,因此无法获得。
! L5 b+ K( W1 {  注意列 SSN 和 FOLIO_ID 后面的子句,这些子句指定 ENCRYPT 使用 128 位高级加密标准。! s! g1 n2 \* T# X6 B0 o
  数据库拥有预先配置的钱夹。要设置钱夹口令,可使用命令:6 L8 E: t- ]( ~$ p5 X
以下是代码片段:# U6 j2 }$ O" \& O% O
2 `7 `+ i' x0 f7 ^
alter system set encryption key authenticated BY "topSecret";& k/ H+ s/ Y# t3 x

2 V- r/ @3 t  ]. G        如果还未创建钱夹,该命令将先创建钱夹,然后将口令设置为“topSecret”(区分大小写)。然后您就可以开始在表的创建和更改期间将加密用于列定义。4 U4 @) a; I1 b$ I8 e
  为外部表加密
  N/ K' V5 U3 |4 o; J. z8 ~! ^" Y/ t7 N& W  在以上示例中,我使用散列表为列加密。您还可以在外部表上使用 TDE。例如,如果您希望生成一个包含 ACCOUNTS 的数据的转储文件,以便发送到不同的地点,则可以使用简单的 ENCRYPT 子句。
$ ^0 T- Q& L7 c, }8 b/ d1 |0 u" l3 Wcreate table account_ext 2 k. _3 c1 @0 u5 y& T7 }6 _
  organization external
; d/ ^1 _2 ?$ T: }/ E: x# F. C! G  (
6 j" W7 a- f) ~6 O! y, P  type oracle_datapump
: C/ C; P  O! X: t. l1 c- l$ F( w  default directory dump_dir " n  g2 F; J4 c9 X, ~
  location ('accounts_1_ext.dmp', : f- H7 ~9 o0 Y4 n1 T
  'accounts_2_ext.dmp',
- P5 @  v: I+ S2 t7 Q  'accounts_3_ext.dmp',
" _7 f- r/ D) p6 ]  'accounts_4_ext.dmp')
' b! V8 f, g% c5 o# x6 I* G7 _  )
( r' x3 W2 {2 ]9 X0 k5 c  parallel 4 % e9 t$ t2 O+ y, f0 l7 q
  as / b( ~2 D: e! o( x/ P
  select
; J4 z/ v1 Y$ q3 j; E. D/ S  ACC_NO, % r5 L" ^% \8 z( o  {$ x
  FIRST_NAME, 7 `' n, D: L1 K* P3 K& m" l
  LAST_NAME, # k: R9 |2 L* ^& d
  SSN ENCRYPT IDENTIFIED BY "topSecret",
* _# h4 S. s( W/ G4 `+ D  ACC_TYPE, . B. w4 a$ x; m% J( t
  FOLIO_ID ENCRYPT IDENTIFIED BY "topSecret",
+ s5 h/ Z% c- D' O0 A2 u/ N/ p4 K  SUB_ACC_TYPE, 8 _' z& y" F: g! c6 }; K
  ACC_OPEN_DT, ' E9 P7 c$ f1 I0 r  C3 l
  ACC_MOD_DT 8 U+ Y# E5 x( x( E8 t
  from accounts;
- m) K4 p. j; i, V0 s! c9 K( r6 J# l0 t
        在文件 accounts_*_ext.dmp 中,SSN 和 FOLIO_ID 的值不会是明文,而是加密形式。如果您希望使用这些文件作为外部表,则必须提供 topSecret 作为口令以读取这些文件。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-14 12:21 , Processed in 0.292519 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表