a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 149|回复: 2

[其他] Oracle认证:使用Oracle的TDE特性加密(4)

[复制链接]
发表于 2012-8-4 13:41:06 | 显示全部楼层 |阅读模式
2 WHERE credit_card = 3485458104610650;   TRANS_ID CREDIT_CARD
2 s/ J0 Q" D- j. l0 V  ---------- -----------------1 I6 y) q2 t5 x5 t  A
  392 3485458104610650* m0 P8 V/ R% o
  Execution Plan
, h" l' e! C4 m9 F$ H  ----------------------------------------------------------1 Y) r7 D  Q* R
  Plan hash value: 32329967
& _; a0 [, D0 z+ @  l( S2 K9 @  -------------------------------------------------------------------------------------------------
# Y1 p1 v- ]! D: ]4 m& U  | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |3 m& w5 u- z, y0 M$ y9 S3 U& o- ~& i
  -------------------------------------------------------------------------------------------------
/ T4 [* q1 ^: Z. f/ C3 S5 n  | 0 | SELECT STATEMENT | | 1 | 14 | 5 (0)| 00:00:01 |
* y# \5 m8 w# ]' Z+ `  | 1 | TABLE ACCESS BY INDEX ROWID| TRANSACTIONS | 1 | 14 | 5 (0)| 00:00:01 |: S& d1 b2 S0 a: m% G- m/ D. N2 p
  |* 2 | INDEX RANGE SCAN | TRANSACTIONS_NDX1 | 1 | | 3 (0)| 00:00:01 |/ a3 J0 y, w7 N4 |7 v  H4 v' }. x
  -------------------------------------------------------------------------------------------------
4 K2 [0 \: B9 u2 T, y  Predicate Information (identified by operation id):4 E  M/ l/ A, ^' X% r3 T; O
  ---------------------------------------------------
( J( ~. V0 l" T  p7 s' [* d  2 - access("CREDIT_CARD"=3485458104610650)
5 ]9 E5 C6 \9 z  SQL> -- Demonstrate a range predicate targeting the
5 `/ r' U9 p1 Y! W  b1 X  SQL> -- encrypted column( t% l  ~4 v! c5 C- P- c0 w
  SQL> SELECT * FROM app_001.transactions8 q5 T3 T! i+ z5 t; u
  2 WHERE credit_card BETWEEN 3499990000000000 AND 3499999999999999;
- }8 R  Q  y) _) F; @% o% r  TRANS_ID CREDIT_CARD# O; M  L: W/ S. r4 ?4 r! J
  ---------- -----------------
+ z3 D( m$ _5 b  t3 k  4629 3499990987277941
0 |' ?/ r+ x1 \4 \% j$ W$ R) {7 n  18597 3499993250694089
8 [9 F2 x4 f2 K$ c1 s7 w7 o  13364 3499996558049599
. q: R9 T! Q/ u8 J  79326 3499996616476145
: T. v# x; l" z7 Q/ N  P1 A. ^& X8 q  60420 3499997873591732
) h" [3 G/ C# Z4 c. l: `& ?  24392 3499998608513414" M2 x& x' q) |2 ~( q, V2 o
  97433 3499999831086288
+ V2 a2 }% O% ~3 W2 ?: I0 t  72183 3499999977925392
! }$ t6 J, P" [% D9 B  8 rows selected., X$ w: r- c+ z5 P. n# n: j, y

0 D8 S/ c  i# d( l" y  Execution Plan
回复

使用道具 举报

 楼主| 发表于 2012-8-4 13:41:07 | 显示全部楼层

Oracle认证:使用Oracle的TDE特性加密(4)

</p>  ----------------------------------------------------------
9 h5 ]9 b7 z0 }* E  Plan hash value: 32329967
0 d5 t- B0 {: f5 J  -------------------------------------------------------------------------------------------------/ `+ w/ o! t* d" y( _; }3 D
  | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |" {, z, n, E: ?$ t
  -------------------------------------------------------------------------------------------------
6 h: |2 ~% p5 @5 F9 r' b& @. @  | 0 | SELECT STATEMENT | | 3 | 42 | 6 (0)| 00:00:01 |
8 B* Q: T0 f1 u  g% I- c* d. V  | 1 | TABLE ACCESS BY INDEX ROWID| TRANSACTIONS | 3 | 42 | 6 (0)| 00:00:01 |
! o$ o  k% v  }) a9 c  |* 2 | INDEX RANGE SCAN | TRANSACTIONS_NDX1 | 3 | | 3 (0)| 00:00:01 |
  s% ?% O1 |" a( T3 G8 I  -------------------------------------------------------------------------------------------------
1 U9 q; j+ _' [( L  Predicate Information (identified by operation id):  h( [8 Q7 O) V% L6 y9 J
  ---------------------------------------------------; ^& f: V$ h- D2 v+ [  [8 B
  2 - access("CREDIT_CARD">=3499990000000000 AND "CREDIT_CARD" -- Disable tracing and explain plan output
1 m3 P( ^2 ^6 C6 @- z  SQL> SET AUTOTRACE OFF;
+ `: \4 h/ i: d8 E  SQL> -- Encrypt the column (and indexes)
% f2 C( Y9 T1 z/ F6 |5 A4 O/ r  SQL> ALTER TABLE app_001.transactions( L' N* V* u/ y! U' P& H
  2 MODIFY (credit_card ENCRYPT NO SALT);
! v- V0 [. z. l  Table altered.) s- H) q/ e9 d- U4 N/ V
  SQL> -- Ensure schema stats are current
- x/ g, W; ]8 {: S  SQL> EXEC dbms_stats.gather_schema_stats(’app_001’);1 u1 C" X$ f) d3 Z9 J
  PL/SQL procedure successfully completed.
9 d- T7 W+ r( b% Y! C# I  SQL> -- Enable tracing and explain plan output  l( u/ Q- D1 f6 _; |4 H
  SQL> SET AUTOTRACE ON EXPLAIN;1 Q# s# P; k6 `2 D
  SQL> -- Rerun previous queries, compare execution plans
: }+ P# Z1 O9 [1 L) t  SQL> SELECT * FROM app_001.transactions* t/ }* s. i& t% V
  2 WHERE credit_card = 3485458104610650;
# t8 f) S# k; C  TRANS_ID CREDIT_CARD' F2 x: H7 W4 c0 }5 q$ O! J7 X: r
  ---------- -----------------5 v: d# O5 }" B0 @1 l1 y8 {/ W, L
  392 3485458104610650. g6 C$ _* d) V. {/ A7 ~
  Execution Plan
: ]. j3 ~( s( j. ^  ----------------------------------------------------------& A/ {$ o1 l* S3 i" V1 }
  Plan hash value: 32329967  a+ _6 \. {( u. o
  -------------------------------------------------------------------------------------------------
" I0 s' h" N) c, o7 c$ {  | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
! _1 u9 K4 _3 b8 n  -------------------------------------------------------------------------------------------------+ T# Y% S( o6 f' E" \, ]3 @' H2 f- a
  | 0 | SELECT STATEMENT | | 1 | 14 | 5 (0)| 00:00:01 |
' o2 q  G5 G6 }1 l( u. i  | 1 | TABLE ACCESS BY INDEX ROWID| TRANSACTIONS | 1 | 14 | 5 (0)| 00:00:01 |: ?" Q3 O/ u: Y
  |* 2 | INDEX RANGE SCAN | TRANSACTIONS_NDX1 | 1 | | 3 (0)| 00:00:01 |
- T. \$ t& z% y6 ?% ?' {8 M. i( J* `! V
  -------------------------------------------------------------------------------------------------
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 13:41:08 | 显示全部楼层

Oracle认证:使用Oracle的TDE特性加密(4)

</p>  Predicate Information (identified by operation id):
0 J' S4 B- R  ~; g+ i  ---------------------------------------------------
+ @# }$ E' i/ X  `- N- G% {- K8 P  2 - access("CREDIT_CARD"=3485458104610650)3 ?' d2 a$ B! c2 b$ o& y
  SQL> SELECT * FROM app_001.transactions
# J3 S2 }8 }; s, T  D  e& @2 w  2 WHERE credit_card BETWEEN 3499990000000000 AND 3499999999999999;
+ N7 ^) e; p8 x; `4 Q5 w' m. i  TRANS_ID CREDIT_CARD3 y* ~, h$ i  t
  ---------- -----------------/ d1 I7 _% E( h1 T# L3 Y" g
  60420 3499997873591732) S# B; A2 {7 O# s
  4629 34999909872779419 ^# h* }# e7 J- h  O- I2 m! B
  18597 34999932506940895 B8 B: f, \) L9 P- [" U1 l9 @
  13364 3499996558049599
6 m' E* E- ?- p& F% e. }  24392 3499998608513414& z0 g& s2 d/ @" _5 r
  79326 3499996616476145
1 l) `. C5 V6 h3 l6 P, z: B: L- u  72183 34999999779253920 M+ M, t5 E2 D) q! C% T3 ?6 M' c
  97433 3499999831086288
8 C2 Y; Q; M/ D  8 rows selected.
4 N3 ^# R, {# S+ S; G  Execution Plan
  L- P' h# q/ F! @  ----------------------------------------------------------
( X1 v+ B6 X9 G  X; `  Plan hash value: 1321366336
: O( Z" e. Y0 r  ----------------------------------------------------------------------------------
' y( @3 m. q% X, `  U/ c  | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
/ U. `2 D3 b/ E' h! v' D  ----------------------------------------------------------------------------------
/ b6 ~. H3 b  L  | 0 | SELECT STATEMENT | | 1250 | 17500 | 914 (2)| 00:00:11 |  |/ d& ?( L* l/ Q$ \4 f
  |* 1 | TABLE ACCESS FULL| TRANSACTIONS | 1250 | 17500 | 914 (2)| 00:00:11 |/ Y9 o$ N9 K1 n; a/ O
  ----------------------------------------------------------------------------------8 J4 |- Q& u4 h* z
  Predicate Information (identified by operation id):
4 X" D* N6 ^; J: Y  p# ^5 {  ---------------------------------------------------, m9 w# ]5 h- Y5 e  p/ c. e6 Z: [! Y
  1 - filter(INTERNAL_FUNCTION("CREDIT_CARD")>=3499990000000000 AND
0 N) F0 {6 y, ]  ~; `  INTERNAL_FUNCTION("CREDIT_CARD") -- Disable tracing and explain plan output8 z1 R+ h( i. l  h: }0 Z
  SQL> SET AUTOTRACE OFF;) H- b( j0 n, `+ A8 B
  列表 4 细心识别引用加密列数据的 SQL 语句,然后斗劲加密前后这些语句的执行打算,以查找是否存在任何更改。
5 h$ ~7 x& u  R; O0 C  我还想知道加密的开销是否会改变打算成本以及优化轨范的选择,即使在文档建议不要这样做的情形下。为了确保我切当知道进行出产时关头使命应用轨范所发生的情形,我在沙箱情形中进行了一些额外的工作。首先,我从各类自动负载信息库 (AWR) 快照中收集了一个使用频仍的 SQL 语句(CPU、Gets 和 I/O)列表。然后,我斗劲了加密列前后每个 SQL 语句的发芽执行打算。我的研究转向对多个基于相等的前提使用一个谓辞书复杂发芽,其一一个前提是以将要进行加密的列为方针。让我受惊的是,在对列进行加密之后,该发芽的执行打算发生了改变。遗憾的是,我无法在我的测试尝试室中为本文复制这些结不美观,我仍然无法完全确定发芽打算发生改变的原因。但我之所以在此处提到这种情形是想指出,在对出产系统进行更改之前,最好在测试情形中研究出产应用轨范密钥发芽的执行打算。如不美观我假设没有任何使用频仍的发芽会发生改变,那么我们将对出产系统进行更改而且不得不勉强拼集一个解决方案。
; m' D) Y% T1 G0 I: Z% a  此处的教训是,在进行更改之前,您应该始终对这些事项进行测试,无论内在文档和其他来历中阅读了什么内容都是如斯。% t1 ]4 h* x7 v" k
  结论
; f& P2 Y, h9 u8 D* i8 W* T; {2 L3 Z  使用 Oracle 的 TDE 特征加密新表与没有任何数据的表中的列或者现有表中的新列很是简单,原因是不存在任何需要担忧的相关性。相反,加密现有列数据需要细心研究并在您的沙箱情形中进行测试,然后才能在现实出产系统中实施您的打算,因为加密可能会影响良多相关性。9 ]. i: x. c; y2 C2 E% m3 V
  Steve Bobrowski 自 Oracle 数据库版本 5 起头一向使用该软件,曾就职于 Oracle;他仍是 The Database Domain (dbdomain.com) 的创始人以及五本 Oracle 出书社出书的书籍的作者(搜罗《Oracle 数据库 10g 快捷版上机操作》系列)。比来,Steve 担任着际啦型公司(如 Computer Sciences Corporation、BEA Systems 和 Salesforce.com)的 SaaS 参谋和 SaaS 首席手艺官。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 16:52 , Processed in 0.211805 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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