轻松搞定Oracle数据库等保测评,从零基础到精通,收藏这篇就够了!

以下文章来自于ace大佬陈举超

详细介绍了5分钟快速解决等保安全加固(◐‿◑)

没错,就是标题党,5分钟?50分钟也搞不定,原理加实验内容较多,不要总想着速成,太容易得到的知识也不会去珍惜。

本次内容主要讲解如下五部分:

1.密码策略``2.审计``3.权限``4.连接超时``5.加密

一:密码策略

查询语句:

set line 300``col profile for a10``col resource_name for a25``col limit for a20``select * from dba_profiles where profile='DEFAULT' and resource_type='PASSWORD';

示例如下:

说明:

**1.**最大错误登录次数

(用户密码连续输入错误10次,用户自动锁定)

FAILED_LOGIN_ATTEMPTS LIMIT 10

**2.**密码过期时间

(用户密码,180内没有修改,用户自动锁定)

PASSWORD_LIFE_TIME 180

**3.**口令重用时间间隔

单位 天(表示口令不能重用之前多少天之内使用的密码)

PASSWORD_REUSE_TIME UNLIMITED

**4.**口令被重用之前密码改变的次数

(在达到PASSWORD_REUSE_TIME指定时间后,要再次使用同一口令的次数)

PASSWORD_REUSE_MAX UNLIMITED

**5.**口令复杂度审计函数

PASSWORD_VERIFY_FUNCTION NULL

**6.**登录超过有效次数锁定时间

单位天

PASSWORD_LOCK_TIME 1

**7.**口令延续使用时间

用户口令使用时间超过生命周期(PASSWORD_LIFE_TIME)后,可以延续使用的天数,并且延续期间,登录会有相应口令即将过期的提示,单位天。

PASSWORD_GRACE_TIME 7

**8.**PROFILE管理

创建profile

create_profile****::=

resource_parameters::=

password_parameters ::=

创建新的PROFILE

限制如下:

1.FAILED_LOGIN_ATTEMPTS 5,密码连续输入错误5次,用户自动锁定;``2.PASSWORD_LIFE_TIME 60,密码过期时间60天;``3.PASSWORD_REUSE_TIME 60,口令重用时间间隔60天;``4.PASSWORD_REUSE_MAX 5,口令被重用之前密码改变的次数;``5.PASSWORD_VERIFY_FUNCTION 口令复杂度审计函数verify_function,要求密码必须包含至少一个数字,一个字符和一个标点符号,长度至少为4;;``6.PASSWORD_LOCK_TIME 1/24,登录超过有效次数锁定时间,1小时;``7.PASSWORD_GRACE_TIME 10,用户口令使用时间超过生命周期(PASSWORD_LIFE_TIME)后,可以延续使用的天数,1小时;

创建:

CREATE PROFILE CJC_PROFILE LIMIT``FAILED_LOGIN_ATTEMPTS 5``PASSWORD_LIFE_TIME 60``PASSWORD_REUSE_TIME 60``PASSWORD_REUSE_MAX 5``PASSWORD_VERIFY_FUNCTION verify_function``PASSWORD_LOCK_TIME 1/24``PASSWORD_GRACE_TIME 10;

其中,配置PASSWORD_VERIFY_FUNCTION前需要执行utlpwdmg.sql,否则报错如下:

ORA-07443: function VERIFY_FUNCTION not found

执行:

SQL> @?/rdbms/admin/utlpwdmg.sql

创建用户,指定新建的profile。

create_user****::=

创建:

CREATE USER CJC``IDENTIFIED BY "C2a!"``DEFAULT TABLESPACE CJC``TEMPORARY TABLESPACE temp``PROFILE CJC_PROFILE;

查看用户PROFILE

SQL> select USERNAME,DEFAULT_TABLESPACE,PROFILE from dba_users where username='CJC';``USERNAME           DEFAULT_TABLESPACE        PROFILE``------------------------------ ------------------------------ -----------------------------------``CJC             CJC            CJC_PROFILE

测试,连续输错5次密码用户被锁定

SQL> conn cjc/a``ERROR:``ORA-01017: invalid username/password; logon denied``SQL> conn cjc/a``ERROR:``ORA-01017: invalid username/password; logon denied``SQL> conn cjc/a``ERROR:``ORA-01017: invalid username/password; logon denied``SQL> conn cjc/a``ERROR:``ORA-01017: invalid username/password; logon denied``SQL> conn cjc/a``ERROR:``ORA-01017: invalid username/password; logon denied``SQL> conn cjc/a``ERROR:``ORA-28000: the account is locked

修改PROFILE

SQL> alter profile CJC_PROFILE limit FAILED_LOGIN_ATTEMPTS 2;

测试:

SQL> alter user cjc account unlock;``SQL> conn cjc/a``ERROR:``ORA-01017: invalid username/password; logon denied``Warning: You are no longer connected to ORACLE.``SQL> conn cjc/a``ERROR:``ORA-01017: invalid username/password; logon denied``SQL> conn cjc/a``ERROR:``ORA-28000: the account is locked

默认密码

查询使用默认密码的用户

SET PAGESIZE 100;``SELECT * FROM DBA_USERS_WITH_DEFPWD;

示例如下:

密码认证方式

SELECT NAME,VALUE,DESCRIPTION FROM V$PARAMETER2 WHERE NAME in ('remote_os_authent','os_authent_prefix');

限制操作系统认证方式

vi sqlnet.ora 

新增:

SQLNET.AUTHENTICATION_SERVICES=(NONE)

测试

sqlplus / as sysdba

报错:ORA-01017: invalid username/password: logon denied

限制访问来源
cd $ORACLE_HOME/network/admin``vi sqlnet.ora

#开启IP限制功能``tcp.validnode_checking=yes``#允许访问数据库IP地址列表``tcp.invited_nodes=(IP1,IP2,IP3)

重启监听

lsnrctl stop``lsnrctl start``lsnrctl reload

登录测试

sqlplus username/pass@IP1:port/dbname

不在白名单的IP无法登录数据库

报错:

ORA-12547: TNS:lost contact

查看监听日志 listener.log

二:审计

强制审计

强制性审计包括以下操作:

1.数据库启动。

将生成一条审计记录,其中列出了启动实例的操作系统用户、用户终端标识符以及日期和时间戳。

此数据存储在操作系统审计跟踪中,因为数据库审计跟踪在成功完成启动后才可用。

2.SYSDBA和SYSOPER登录。

Oracle数据库记录所有SYSDBA和SYSOPER连接。

3.数据库关闭。

将生成一个审计记录,其中列出了关闭实例的操作系统用户、用户终端标识符以及日期和时间戳。

也就是说,即使AUDIT_SYS_OPERATIONS参数设置为FALSE,也会将管理员权限连接、启动、关闭数据库操作记录到audit_file_dest指定的文件夹中。

审计文件目录

O R A C L E _ B A S E / a d m i n / ORACLE\_BASE/admin/ ORACLE_BASE/admin/ORACLE_SID/adump

数据库关闭的审计日志

启动的审计记录

标准审计

检查审计参数,确认已开启审计

SHOW PARAMETER AUDIT_TRAIL;

AUDIT_TRAIL参数说明**:**

1.DB``将审计记录到数据库审计跟踪表(SYS.AUD$),但强制和SYS审计记录除外,这些记录始终写入操作系统审计跟踪文件。DB是AUDIT_TRAIL参数的默认设置。``2.DB,EXTENDED``行为与AUDIT_TRAIL=DB相同,但也填充SYS.AUD$表的SQL绑定和SQL文本CLOB类型列(如果可用)。``DB,EXTEND使您能够捕获在已审计的操作中使用的SQL语句。``您可以捕获导致审计的SQL语句和任何关联的绑定变量。``但是,请注意,您只能从以下列数据类型捕获数据:CHAR、NCHAR、VARCHAR、VAR CHAR2、NVARCHAR2、NUMBER、FLOAT、BINARY_FLOAT、BINARY_DOUBLE、LONG、ROWID、DATE、TIMESTAMP和TIMESTAMP WITH TIMEZONE。``还要注意,DB,EXTEND可以捕获敏感数据,如信用卡信息。``3.OS``将所有审计记录定向到操作系统文件。``4.XML``以XML格式写入操作系统审计记录文件。``记录中XML模式给定的AuditRecord节点的所有元素除了Sql_Text和Sql_Bind到操作系统XML审计文件之外。``5.XML, EXTENDED``行为与AUDIT_TRAIL=XML相同,但也在操作系统XML审计文件中包含SQL文本和SQL绑定信息。``6.NONE``禁用标准审计。

1.语句审计

Statement

审计影响特定类型数据库对象的特定SQL语句或语句组。

例如,AUDIT TABLE审计CREATE TABLE、TRUNCATE TABLE、COMMENT ON TABLE和DELETE[FROM]TABLE语句。

示例如下:

审计****CJC用户,DELETE,UPDATE操作

AUDIT DELETE TABLE,UPDATE TABLE BY CJC BY ACCESS;

查询语句审计配置信息

SET LINE 300``SET PAGESIZE 100``SELECT USER_NAME,AUDIT_OPTION,SUCCESS,FAILURE FROM DBA_STMT_AUDIT_OPTS;

生成测试数据

CONN CJC/***``CREATE TABLE T0124(ID INT);``INSERT INTO T0124 VALUES(1);``COMMIT;``UPDATE T0124 SET ID=100 WHERE ID=1;``DELETE FROM T0124 WHERE ID=0;``COMMIT;

查看审计记录

SET LINE 300``COL USERNAME FOR A15;``COL OBJ_NAME FOR A15;``COL AUDIT_OPTION FOR A15;``COL TERMINAL FOR A15``SELECT USERNAME,TO_CHAR(TIMESTAMP,'YYYYMMDD HH24:MI:SS') TIMESTAMP,OBJ_NAME,ACTION_NAME FROM DBA_AUDIT_TRAIL;

删除审计策略

#NOAUDIT ALL STATEMENTS; 不生效``#NOAUDIT ALL STATEMENTS BY CJC BY ACCESS; 不生效``NOAUDIT DELETE TABLE,UPDATE TABLE BY CJC;

检查

SET LINE 300``SET PAGESIZE 100``SELECT USER_NAME,AUDIT_OPTION,SUCCESS,FAILURE FROM DBA_STMT_AUDIT_OPTS;

查看是否有新增审计记录

SET LINE 300``SET PAGESIZE 100``SELECT USER_NAME,AUDIT_OPTION,SUCCESS,FAILURE FROM DBA_STMT_AUDIT_OPTS;

注意:如果是在当前session执行操作,还会记录审计,需要退出重新连接。

2.权限审计

Privilege

审计由指定系统权限授权的SQL语句。

例如,AUDIT CREATE ANY TRIGGER审计使用CREATE ANY TRIPGER系统权限发出的语句。

SELECT USER_NAME,FAILURE FROM DBA_STMT_AUDIT_OPTS WHERE AUDIT_OPTION='CREATE SESSION';

未开启 FAILURE = BY ACCESS 表示对连接失败的进行审计,BY ACCESS表示每条记录一次 而不是 BY SESSION没有会话记录一次

示例如下:

审计授予DELETE ANY TABLE权限的操作

AUDIT DELETE ANY TABLE BY ACCESS;

查询语句审计配置信息

SET LINE 300``SET PAGESIZE 100``SELECT USER_NAME,PRIVILEGE,SUCCESS,FAILURE FROM DBA_PRIV_AUDIT_OPTS;

生成测试数据

GRANT DELETE ANY TABLE TO CJC;``GRANT DELETE ANY TABLE TO CHEN;``GRANT SELECT ON CJC.T0124 TO TESTUSER;

查看审计数据

SET LINE 300``COL USERNAME FOR A15;``COL OBJ_NAME FOR A15;``COL AUDIT_OPTION FOR A15;``COL TERMINAL FOR A15``SELECT USERNAME,TO_CHAR(TIMESTAMP,'YYYYMMDD HH24:MI:SS') TIMESTAMP,OBJ_NAME,ACTION_NAME FROM DBA_AUDIT_TRAIL;

3.对象审计

Object

审计特定对象上的特定语句,例如HR.EMPLOYEES表上的ALTER TABLE。

AUDIT SELECT,INSERT,DELETE ON CJC.T0124 BY ACCESS WHENEVER SUCCESSFUL;

SET LINE 300``SET PAGESIZE 100``COL OWNER FOR A15``COL OBJECT_NAME FOR A15``COL OBJECT_TYPE FOR A15``SELECT OWNER,OBJECT_NAME,OBJECT_TYPE,SEL,DEL,INS,FBK FROM DBA_OBJ_AUDIT_OPTS;``CONN CJC/******``SELECT * FROM CJC.T0124;

查看审计数据

SET LINE 300``COL USERNAME FOR A15;``COL OBJ_NAME FOR A15;``COL AUDIT_OPTION FOR A15;``COL TERMINAL FOR A15``SELECT USERNAME,TO_CHAR(TIMESTAMP,'YYYYMMDD HH24:MI:SS') TIMESTAMP,OBJ_NAME,ACTION_NAME FROM DBA_AUDIT_TRAIL;

4.网络审计

Network

审计网络协议中的意外错误或网络层中的内部错误。

审计语句执行:成功、失败或两者都有

可审计网络错误条件

Table 9-4 Auditable Network Error Conditions``TNS-02507``Encryption algorithm not installed``TNS-12648``Encryption or data integrity algorithm list empty``TNS-12649``Unknown encryption or data integrity algorithm``TNS-12650``No common encryption or data integrity algorithm

添加审计

AUDIT NETWORK BY ACCESS;

查看审计数据

SET LINE 300``COL USERNAME FOR A15;``COL OBJ_NAME FOR A15;``COL AUDIT_OPTION FOR A15;``COL TERMINAL FOR A15``SELECT USERNAME,TO_CHAR(TIMESTAMP,'YYYYMMDD HH24:MI:SS') TIMESTAMP,OBJ_NAME,ACTION_NAME FROM DBA_AUDIT_TRAIL;

三:权限

查询具有SYSDBA权限的用户

SELECT * FROM V$PWFILE_USERS;

示例如下:

测试:

GRANT SYSDBA TO CJC;``SELECT * FROM V$PWFILE_USERS;

用户角色

查询具有DBA角色的用户

检查数据库内是否有自定义的权限过大的角色

SELECT GRANTEE,GRANTED_ROLE,ADMIN_OPTION,DEFAULT_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE='DBA';

示例:

查询角色对应的权限
SELECT ROLE,PRIVILEGE FROM ROLE_SYS_PRIVS WHERE ROLE IN ('CONNECT','RESOURCE') ORDER BY ROLE;

查询系统权限
SELECT GRANTEE,PRIVILEGE FROM DBA_SYS_PRIVS WHERE GRANTEE IN ('CJC') ORDER BY 1;

查询对象权限
SELECT GRANTEE,PRIVILEGE FROM DBA_TAB_PRIVS WHERE GRANTEE IN ('CJC') ORDER BY 1;``GRANT SELECT ON SYS.T1 TO CJC;``SELECT GRANTEE,PRIVILEGE FROM DBA_TAB_PRIVS WHERE GRANTEE IN ('CJC') ORDER BY 1;

查询表权限查询

测试:

GRANT DELETE ON CJC.T0124 TO SYSTEM;``SELECT UNIQUE GRANTEE, TABLE_NAME FROM DBA_TAB_PRIVS``WHERE``(PRIVILEGE='INSERT' OR``PRIVILEGE='UPDATE' OR``PRIVILEGE='ALTER' OR``PRIVILEGE='DELETE' OR``PRIVILEGE='EXECUTE') AND OWNER='CJC';

四:连接超时

CONNECT_TIME

指定会话的总运行时间限制,以分钟为单位。

IDLE_TIME

指定会话期间允许的连续非活动时间段,以分钟为单位。长时间运行的查询和其他操作不受此限制。

查看资源限制

SQL> select * from dba_profiles where resource_name in ('IDLE_TIME','CONNECT_TIME');

SQL> show parameter resource_limit``NAME             TYPE   VALUE``------------------------------------ ----------- ------------------------------``resource_limit           boolean   FALSE

启动资源限制

ALTER SYSTEM SET RESOURCE_LIMIT=TRUE;

IDLE_TIME

SQL> alter profile CJC_PROFILE limit IDLE_TIME 1;``SQL> conn cjc/"C2a!"``Connected.``SQL> show user``USER is "CJC"

—等1分钟以后

SQL> select distinct sid from v$mystat;``select distinct sid from v$mystat``*``ERROR at line 1:``ORA-02396: exceeded maximum idle time, please connect again

如果有长时间未提交的事物,会被自动回退。

CONNECT_TIME

运行1分钟后,报错:

SQL>``begin``dbms_lock.sleep(65);``dbms_output.put_line('cjc');``end;``/``ERROR at line 1:``ORA-02399: exceeded maximum connect time, you are being logged off``ORA-06512: at "SYS.DBMS_LOCK", line 205``ORA-06512: at line 2

会话自动关闭

set line 300``col event for a35``select sid,SERIAL#,status,LAST_CALL_ET,event from v$session where sid=1;

未提交的事物会自动回退

SQL> insert into t1 values(2);``1 row created.

----1分钟以后提交

SQL> commit;``commit``*``ERROR at line 1:``ORA-02399: exceeded maximum connect time, you are being logged off

五:加密

传输加密

查看加密组件

[oracle@cjc-db-01 admin]$ adapters``Installed Oracle Net transport protocols are:``IPC``BEQ``TCP/IP``SSL``RAW``SDP/IB``Installed Oracle Net naming methods are:``Local Naming (tnsnames.ora)``Oracle Directory Naming``Oracle Host Naming``Oracle Names Server Naming``Installed Oracle Advanced Security options are:``RC4 40-bit encryption``RC4 56-bit encryption``RC4 128-bit encryption``RC4 256-bit encryption``DES40 40-bit encryption``DES 56-bit encryption``3DES 112-bit encryption``3DES 168-bit encryption``AES 128-bit encryption``AES 192-bit encryption``AES 256-bit encryption``MD5 crypto-checksumming``SHA-1 crypto-checksumming``Kerberos v5 authentication``RADIUS authentication

语法如下:

服务端:

SQLNET.ENCRYPTION_SERVER = [accepted | rejected | requested | required]``SQLNET.ENCRYPTION_TYPES_SERVER = (valid_encryption_algorithm [,valid_encryption_algorithm])

客户端:

SQLNET.ENCRYPTION_CLIENT = [accepted | rejected | requested | required]``SQLNET.ENCRYPTION_TYPES_CLIENT = (valid_encryption_algorithm [,valid_encryption_algorithm])

示例如下:

临时打开trace sqlnet,用于查看传输加密信息:

vi $ORACLE_HOME/network/admin/sqlnet.ora``#Trace file setup``trace_level_server=16``trace_level_client=16``trace_directory_server=/home/oracle/trace``trace_directory_client=/home/oracle/trace``trace_file_client=cli``trace_file_server=srv``trace_unique_client=true``diag_adr_enabled = off

重新reload

lsnrctl reload

连接数据库

[oracle@cjc-db-01 ~]$ sqlplus 'cjc/"C2a!"@192.168.1.5:1521/cjc'

查询

SQL> select * from t1;`  `ID NAME``---------- ----------`   `1 aaacjcaaa

查看跟踪文件

[oracle@cjc-db-01 ~]$ cd /home/oracle/trace/``[oracle@cjc-db-01 trace]$ ls -lrth``total 640K``-rw-r----- 1 oracle oinstall 159K Jan 27 13:59 srv_19599.trc``-rw-r----- 1 oracle oinstall 197K Jan 27 13:59 cli_19597.trc

SQL语句是明文的,默认没有加密

[oracle@cjc-db-01 trace]$ vi cli_19597.trc``.....``(4158699328) [27-JAN-2024 14:08:16:596] nsbasic_bsd: packet dump``(4158699328) [27-JAN-2024 14:08:16:596] nsbasic_bsd: 01 12 00 00 06 00 00 00 |........|``(4158699328) [27-JAN-2024 14:08:16:596] nsbasic_bsd: 00 00 03 5E 15 61 80 00 |...^.a..|``(4158699328) [27-JAN-2024 14:08:16:596] nsbasic_bsd: 00 00 00 00 00 FE FF FF |........|``(4158699328) [27-JAN-2024 14:08:16:596] nsbasic_bsd: 00 00 00 00 00 00 00 00 |........|``(4158699328) [27-JAN-2024 14:08:16:596] nsbasic_bsd: 00 00 00 00 00 10 73 65 |......se|``(4158699328) [27-JAN-2024 14:08:16:596] nsbasic_bsd: 6C 65 63 74 20 2A 20 66 |lect.*.f|``(4158699328) [27-JAN-2024 14:08:16:596] nsbasic_bsd: 72 6F 6D 20 74 31 01 00 |rom.t1..|``(4158699328) [27-JAN-2024 14:08:16:596] nsbasic_bsd: 00 00 00 00 00 00 00 00 |........|``......``(4158699328) [27-JAN-2024 14:08:16:596] nsbasic_bsd: 00 00 |..      |``(4158699328) [27-JAN-2024 14:08:16:596] nsbasic_bsd: exit (0)``(4158699328) [27-JAN-2024 14:08:16:596] nsbasic_brc: entry: oln/tot=0``......

启用传输加密

对服务端进行设置

vi $ORACLE_HOME/network/admin/sqlnet.ora``SQLNET.ENCRYPTION_SERVER = REQUESTED``SQLNET.ENCRYPTION_TYPES_SERVER= (RC4_256)

重新reload

lsnrctl reload

删除跟踪日志

[oracle@cjc-db-01 trace]$ rm -rf *.trc

连接数据库

[oracle@cjc-db-01 ~]$ sqlplus 'cjc/"C2a!"@192.168.1.5:1521/cjc'

查询

SQL> select * from t1;`  `ID NAME``---------- ----------`   `1 aaacjcaaa

查看跟踪日志

[oracle@cjc-db-01 trace]$ ls -lrth``total 644K``-rw-r----- 1 oracle oinstall 3.0K Jan 27 14:05 srv_20034.trc``-rw-r----- 1 oracle oinstall 187K Jan 27 14:05 srv_20039.trc``-rw-r----- 1 oracle oinstall 262K Jan 27 14:05 cli_20037.trc

查看:

SQL语句已被加密

[oracle@cjc-db-01 trace]$ vi cli_20037.trc``......``(4158699328) [27-JAN-2024 14:05:20:555] nspsend: packet dump``(4158699328) [27-JAN-2024 14:05:20:555] nspsend: 00 53 00 00 06 00 00 00 |.S......|``(4158699328) [27-JAN-2024 14:05:20:555] nspsend: 00 00 8F 2D 1B 3F 9C 78 |...-.?.x|``(4158699328) [27-JAN-2024 14:05:20:555] nspsend: 8C 85 B9 DD 2E 33 14 42 |.....3.B|``(4158699328) [27-JAN-2024 14:05:20:555] nspsend: 2F 0C 3D 78 BA 7F F6 22 |/.=x..."|``(4158699328) [27-JAN-2024 14:05:20:555] nspsend: 08 94 97 F4 21 DE 1B C3 |....!...|``(4158699328) [27-JAN-2024 14:05:20:555] nspsend: D2 2B EF 21 F8 43 DA B3 |.+.!.C..|``(4158699328) [27-JAN-2024 14:05:20:555] nspsend: 52 08 EC F0 0D F2 63 84 |R.....c.|``(4158699328) [27-JAN-2024 14:05:20:555] nspsend: 90 15 39 70 D5 6C D8 19 |..9p.l..|``(4158699328) [27-JAN-2024 14:05:20:555] nspsend: A2 F3 A1 BB A7 66 69 50 |.....fiP|``(4158699328) [27-JAN-2024 14:05:20:555] nspsend: 27 92 9C 0B 92 74 31 43 |'....t1C|``(4158699328) [27-JAN-2024 14:05:20:555] nspsend: A5 00 00 |...     |``(4158699328) [27-JAN-2024 14:05:20:555] nspsend: 83 bytes to transport``(4158699328) [27-JAN-2024 14:05:20:555] nspsend: normal exit``....

数据加密

Transparent Data Encryption

透明数据加密的类型:

TDE列:加密存储在选定表列中的敏感数据。

TDE表空间:加密存储在表空间中的所有数据。

TDE列

TDE列加密用于保护存储在表列中的机密数据,如信用卡和社会安全号码。

TDE列加密使用两层基于密钥的体系结构来透明地加密和解密敏感表列。

TDE主加密密钥存储在外部安全模块中,该模块可以是Oracle钱包或硬件安全模块(HSM)。

该主加密密钥用于加密表密钥,表密钥又用于加密和解密表列中的数据。

主加密密钥存储在数据库外部的一个外部安全模块中,该模块只能由安全管理员访问。

对于此外部安全模块,Oracle使用Oracle钱包或硬件安全模块(HSM),如本章所述。

以这种方式存储主加密密钥可以防止其未经授权的使用。

使用外部安全模块(wallet/HSM)将普通程序功能与加密操作分离,从而可以在数据库管理员和安全管理员之间划分职责。

由于数据库管理员可能不知道钱包密码,需要安全管理员提供密码,因此增强了安全性。

当表包含加密列时,无论加密列的数量如何,都会使用单个表密钥。

所有表的表密钥都用数据库服务器主加密密钥加密,并存储在数据库中的字典表中。

TDE列加密是在Oracle Database 10g release 2(10.2)中首次引入的。

若要使用此功能,您必须运行Oracle Database 10g release 2(10.2)或更高版本。

测试:

[oracle@cjc-db-01 admin]$ vi sqlnet.ora

###新增

ENCRYPTION_WALLET_LOCATION=`  `(SOURCE=`    `(METHOD=FILE)(METHOD_DATA=`      `(DIRECTORY=/home/oracle/wallets)))

###执行reload

[oracle@cjc-db-01 admin]$ lsnrctl reload

配置 Master Encryption Key

SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "cjc";

查看wallets生成的文件

[oracle@cjc-db-01 wallets]$ ls -lrth``total 4.0K``-rw-r--r-- 1 oracle oinstall 2.8K Jan 27 14:34 ewallet.p12

打开钱包

ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "cjc";``ORA-28354: Encryption wallet, auto login wallet, or HSM is already open

创建表,设置加密列

SQL> conn cjc/"C2a!"``SQL> create table t1(id int,xxx int ENCRYPT);

插入数据

insert into t1 values(100,5);``insert into t1 values(20000,6);``commit;

TDE表空间

TDE表空间加密使您能够加密整个表空间。

在加密的表空间中创建的所有对象都会自动加密。

如果您想保护表中的敏感数据,TDE表空间加密非常有用。

您不需要对每个表列执行细粒度分析来确定需要加密的列。

此外,TDE表空间加密利用大容量加密和缓存来提供增强的性能。

虽然对应用程序的实际性能影响可能各不相同,但性能开销大致估计在5%到8%之间。

如果您的表在多列中包含敏感数据,或者您希望保护整个表而不仅仅是单个列,那么TDE表空间加密是TDE列加密的一个很好的替代方案。

TDE表空间加密对存储在加密表空间中的所有数据及其相应的重做数据进行加密。

这包括内部大型对象(LOB),如BLOB和CLOB。

TDE表空间加密不会加密存储在表空间之外的数据。

例如,BFILE数据不加密,因为它存储在数据库之外。

如果您在加密的表空间中创建了一个具有BFILE列的表,那么该特定列将不会被加密。

但是,Oracle Database 11g Release 1(11.1)支持SecureFile LOB。

加密表空间中的所有数据都以加密格式存储在磁盘上。

对于具有查看或修改数据所需权限的授权用户来说,数据是透明解密的。

数据库用户或应用程序不需要知道特定表中的数据是否在磁盘上加密。

如果磁盘或备份介质上的数据文件被盗,则数据不会泄露。

TDE表空间加密使用两层基于密钥的体系结构来透明地加密(和解密)表空间。

TDE主密钥存储在外部安全模块(Oracle钱包或HSM)中。

该TDE主密钥用于加密TDE表空间加密密钥,该密钥又用于加密和解密表空间中的数据。

下图显示了TDE表空间加密过程的概述。

TDE表空间加密是在Oracle Database 11g release 1(11.1)中引入的。

要使用此功能,您必须运行Oracle Database 11gRelease 1(11.11)或更高版本。

测试:

创建加密表空间:

CREATE TABLESPACE chen``DATAFILE '/oradata/chentbs.dbf'``SIZE 1M``ENCRYPTION USING '3DES168'``DEFAULT STORAGE(ENCRYPT);

查看

SQL> select tablespace_name from dba_tablespaces where ENCRYPTED='YES';``TABLESPACE_NAME``------------------------------``CHEN

注意:

启用TDE,对性能会有影响,也会对日常备份、恢复、导出、导入等操作有影响,启用前需要充分评估影响范围。

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包,需要点击下方链接即可前往获取

读者福利 | 优快云大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)

👉1.成长路线图&学习规划👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
在这里插入图片描述

在这里插入图片描述

👉2.网安入门到进阶视频教程👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程文末领取哈)
在这里插入图片描述

在这里插入图片描述

👉3.SRC&黑客文档👈

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

在这里插入图片描述

黑客资料由于是敏感资源,这里不能直接展示哦!(全套教程文末领取哈)

👉4.护网行动资料👈

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

在这里插入图片描述

👉5.黑客必读书单👈

在这里插入图片描述

👉6.网络安全岗面试题合集👈

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
在这里插入图片描述
所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~

读者福利 | 优快云大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值