Trust安卓版下载

Trust安卓版下载 使用透明数据库加密
Trust安卓版下载 使用透明数据库加密
发布日期:2025-04-28 19:29    点击次数:129
使用透明数据库加密 目的

本模块介绍了如何使用透明数据库加密对磁盘上存储的数据进行加密。

所需时间

30 分钟

主题

本模块将讨论以下主题:

概述 情景 准备用于加密的数据库 创建一个包含加密列的表 更改加密数据 添加并应用 VPD 策略 测试策略 使用 LogMiner 查看重做日志 在无加密列的情况下重新创建表 再次查看重做日志 清理 总结 查看屏幕截图

将光标置于此图标上以加载和查看本教程的所有屏幕截图。(警告:此操作会同时加载所有屏幕截图,网速较慢时,响应时间可能会比较长。)

注意:您还可以在下面的步骤中将光标放在每个单独的图标上,仅加载和查看与该步骤相关的屏幕截图。

概述

Oracle 数据库 10g 第 2 版透明数据库加密功能简化了信用卡号码以及社会安全保险号等机密个人信息的加密。 使用透明数据加密功能,不必将加密例程嵌套到现有应用程序中,显著降低了加密的成本和复杂性。 只需使用几个简单的命令即可对机密应用程序数据进行加密。

自加密机密信息

大多数加密解决方案都需要在应用程序代码中对调用加密函数。 这样做开销很高,因为它通常需要深入了解应用程序并要能够编写和维护软件。 通常,大多数企业没有时间或相关的专业知识来修改现有应用程序,调用加密例程。 Oracle 透明数据加密通过将加密功能深层次地嵌套到 Oracle 数据库,解决了加密问题。

通过 SQL 执行的应用程序逻辑不需要进行更改,仍能正常运行。 换言之,应用程序可以使用同一语法将数据插入到应用程序表中,并且 Oracle 数据库在将信息写入磁盘之前将自动对数据进行加密。 随后的选择操作将透明地解密数据,因此应用程序将继续正常地运行。 这一点很重要,因为当前的应用程序通常期望未加密的应用程序数据。 显示加密数据至少会使应用程序用户迷惑不解,甚至还会破坏现有的应用程序。

设置加密密钥

Oracle 透明数据加密提供了实施加密所必需的关键管理基础架构。 加密的工作原理是将明文数据以及秘密(称作密钥)传递到加密程序中。 加密程序使用提供的密钥对明文数据进行加密,然后返回加密数据。 以往,创建和维护密钥的任务由应用程序完成。 Oracle 透明数据加密通过为整个数据库自动生成一个万能密钥解决了此问题。 在启动 Oracle 数据库时,管理员必须使用不同于系统口令或 DBA 口令的口令打开一个 Oracle Wallet 对象。 然后,管理员对数据库万能密钥进行初始化。 万能密钥是自动生成的。

性能

由于索引数据未被加密,因此加密通常会影响现有的应用程序索引。 Oracle 透明数据加密对与给定应用程序表关联的索引值进行加密。 这意味着应用程序中的相等搜索对性能的影响很小,甚至没有任何影响。 例如,假设应用程序 PERSON ID 存在一个索引,并且此应用程序执行以下语句:

SQL> Select rating from credit where person id = '23590';

Oracle 数据库将使用现有的应用程序索引,尽管 PERSON ID 信息已经在数据库中加密。

情景

在本教程中,您将创建一个包含加密列的表。 您将为加密列创建一个索引,并授予访问某个用户的列的权限。 该用户随后将更改数据。 然后,您将创建一个包含对加密数据进行相应访问控制的函数,随后通过 VPD 策略应用该函数。

透明数据加密在数据写入磁盘之前对其进行加密,并在读取该数据时将其解密。 这对所有使用 SQL 层的应用程序都是透明的。 因此,无法轻松地验证数据是否真正被加密。 由于 Oracle LogMiner 对写入磁盘的数据进行记录,因此您可以访问该信息。

准备用于加密的数据库

在本部分内容中,您将更新 sqlnet.ora、创建一个加密钱夹 (ewallet.p12)、打开此钱夹并为 TDE 创建万能密钥。执行以下操作:

1.

您需要更新 sqlnet.ora 文件以包含一个 ENCRYPTED_WALLET_LOCATION 条目。打开一个终端窗口,然后输入以下命令:

cd $ORACLE_HOME/network/admin
gedit sqlnet.ora 

将以下条目添加到文件末尾:

ENCRYPTION_WALLET_LOCATION= 
  (SOURCE=(METHOD=FILE)(METHOD_DATA=
(DIRECTORY=/u01/app/oracle/product/10.2.0/db_1/)))
        

保存您的更改并关闭文件。

注意: 可以为加密钱夹选择任何目录,但路径不应指向在数据库安装过程中创建的标准模糊钱夹 (cwallet.sso)。

2.

接下来,您需要打开钱夹并创建万能加密密钥。从终端窗口中,输入以下命令:

cd /home/oracle/wkdir
sqlplus /nolog
@tde00_dbsetup

connect / as sysdba
alter system set key identified by "welcome1";

上面的 alter 命令执行以下任务:

如果指定的目录中不存在加密钱夹,则将创建加密钱夹 (ewallet.p12)、打开此钱夹并创建/重新创建 TDE 的万能密钥。 如果指定目录中存在加密钱夹,则将打开此钱夹并创建/重新创建 TDE 的万能密钥。

注意: 只有拥有“alter system”权限的用户才能创建万能密钥或打开钱夹。

万能密钥只能创建一次,除非您想要使用新的加密密钥重新加密数据!!!

在后面的部分中,您不希望使用上面提供的命令;您需要打开钱夹(它在您关闭数据库时已经关闭),但您不希望创建一个新的万能密钥。 于是,TrustWallet钱包安卓下载使用以下命令:

alter system set wallet open identified by "welcome1"; 

由于每个表都有各自的加密密钥, Trust安卓版下载因此万能加密密钥是必需的。 这些列密钥存储在数据库中。 由于钱夹只能存储有限数目的密钥,并且可伸缩性不高,因此使用万能密钥加密列密钥。 这样,您便可以拥有所需数量的列密钥,并且钱夹中只存储少量的万能密钥(包括过期密钥,当您某一天从旧的备份磁带解密数据时可能需要它)。 默认情况下,以上命令使用 192 位的高级加密标准 (AES192) 生成一个密钥。 也可以使用 3DES,或使用较小或较大的 AES 加密位数。

返回主题列表

https://www.bitpiebtq.com 创建一个包含加密列的表

在本教程中,您将创建一些用户,并创建一个包含加密列的表来存储信用卡信息。 您将向该表中插入一些数据,为加密列创建索引并授予数据的访问权限。执行以下操作:

1.

首先需要创建一些用户。从 SQLPlus 会话中,执行以下脚本:

@tde01_crusers

connect system/oracleprompt  Create users: JKING, LSMITH and LDORANgrant connect to JKING identified by welcome1;grant connect, DBA to LSMITH identified by welcome1;grant connect to LDORAN identified by welcome1;

注意: 您已经授予了 LSMITH DBA 角色,以演示 TDE 对相等性搜索索引的支持。 因此,dbms_xplan 的输出应包含 INDEX RANGE SCAN。

2.

接下来,您将创建一个表,其中包含一个用于存储加密(默认为 AES192)信用卡信息的列。 由于 credit_card_number 将有一个索引,因此未指定 SALT,当对加密值进行 salt 处理时将不会生成索引。从 SQLPlus 会话中,执行以下脚本:

@tde02_crtabl

connect oe/oecreate table cust_payment_info   (first_name varchar2(11),   last_name varchar2(10),   order_number number(5),   credit_card_number varchar2(16) ENCRYPT NO SALT,  active_card varchar2(3));

3.

现在,可以向刚刚创建的表中添加一些数据。从 SQLPlus 会话中,执行以下脚本:

@tde03_poptabl

insert into cust_payment_info values  ('Jon', 'Oldfield', 10001, '5446959708812985','YES');insert into cust_payment_info values  ('Chris', 'White', 10002, '5122358046082560','YES'); insert into cust_payment_info values  ('Alan', 'Squire', 10003, '5595968943757920','YES');insert into cust_payment_info values  ('Mike', 'Anderson', 10004, '4929889576357400','YES');insert into cust_payment_info values  ('Annie', 'Schmidt', 10005, '4556988708236902','YES');insert into cust_payment_info values  ('Elliott', 'Meyer', 10006, '374366599711820','YES');insert into cust_payment_info values  ('Celine', 'Smith', 10007, '4716898533036','YES');insert into cust_payment_info values  ('Steve', 'Haslam', 10008, '340975900376858','YES');insert into cust_payment_info values  ('Albert', 'Einstein', 10009, '310654305412389','YES');

4.

为提高性能,您将为信用卡号码创建一个索引。从 SQLPlus 会话中,执行以下脚本:

@tde04_cridx

create index cust_payment_info_idx on cust_payment_info (credit_card_number);

5.

需要向用户授予客户付款信息表的访问权限。 在本实例中,LSMITH 是唯一一个可以更新此信息的用户。 其他用户只能查看它。从 SQLPlus 会话中,执行以下脚本:

@tde05_grant_access

grant select on oe.CUST_PAYMENT_INFO to LDORAN;grant select, update on oe.CUST_PAYMENT_INFO to LSMITH;grant select on oe.CUST_PAYMENT_INFO to JKING;

返回主题列表

更改加密数据

在本部分中,您将以 LSMITH 的身份对表进行更改。执行以下操作:

1.

由于您授与了 LSMITH 更新访问权限,因此能够进行更改。从 SQLPlus 会话中,执行以下脚本:

@tde06_make_update

prompt  Connect as Lindsay Smith (Card_V)conn LSMITH/welcome1;update oe.CUST_PAYMENT_INFO set ACTIVE_CARD='NO' 
   where CREDIT_CARD_NUMBER='4556988708236902';

2.

要查看执行计划,请执行以下脚本:

@tde06a_review_xplan

select  from table (dbms_xplan.display_cursor);

3.

表 user_encrypted_columns 将通知您哪个列已经加密以及它的加密算法。从 SQLPlus 会话中,执行以下脚本:

@tde07_select_encrypt_col

connect oe/oecol TABLE_NAME format a18;col COLUMN_NAME format a19;col ENCRYPTION_ALG format a17;select  from user_encrypted_columns;

返回主题列表

添加并应用 VPD 策略

由于加密并不替换相应的访问控制,因此您将使用一个非常简单的 VPD 策略限制行的访问权限。 首先,您将检查登录到数据库的用户是否是员工,然后将按信用卡号码限制 oe.cust_payment_info 的访问权限:

Card_A 从“34”或“37”开始 Janette King Card_V 从“4”开始 Lindsay Smith Card_M 从“5”开始 Louise Doran

如果查看加载到表中的数据,则会看到,授权用户将无法选择与“Albert Einstein”关联的信用卡号码。 只有避开访问控制策略的入侵者或不受这些策略约束的管理用户才可以选择它。 这可以对该表进行高度集中的审计。

执行以下操作:

1.

首先需要创建包含信用卡和员工验证所需逻辑的表。从 SQLPlus 会话中,执行以下脚本:

@tde08_crfunction

connect system/oracle;promptprompt  Create policy function to create the where-clause:create or replace function f_policy_oe_cust_payment_info-- Function must have the following parameters   (schema in varchar2, tab in varchar2)-- Function will return a string that is used as a WHERE clause                      return varchar2as v_manager_id     number:=0; is_employee      number:=0; v_user           varchar2(20); out_string       varchar2(70) default '1=2 ';begin  -- get session user  v_user := lower(sys_context('userenv','session_user'));  -- Is the user an employee?  begin    select manager_id into v_manager_id    from hr.employees    where lower(email) = v_user;    is_employee:=1;  exception   when no_data_found then     is_employee:=2;  end;  -- create where clause when user is authorized to see parts of the table  if     is_employee=1 and lower(v_user)='jking' and v_manager_id=146 then  out_string := out_string 
                    

  • 上一篇:没有了
  • 下一篇:TrustWallet钱包官网下载 专业技术团队