5分钟,轻松搞定Oracle数据库等保测评

2024年 1月 29日 97.4k 0

没错,就是标题党,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指定的文件夹中。

                                            审计文件目录

                                            $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,对性能会有影响,也会对日常备份、恢复、导出、导入等操作有影响,启用前需要充分评估影响范围。

                                                                                                                                                                      ###chenjuchao 20240127###

                                                                                                                                                                      参考链接:

                                                                                                                                                                        https://docs.oracle.com/cd/E11882_01/network.112/e40393/asotrans.htm#ASOAG9516
                                                                                                                                                                        https://blog.csdn.net/qq_50885384/article/details/134147845
                                                                                                                                                                        https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_6010.htm#SQLRF01310
                                                                                                                                                                        https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_8003.htm#SQLRF01503
                                                                                                                                                                        https://docs.oracle.com/cd/E11882_01/network.112/e40393/asoconfg.htm#ASOAG9599
                                                                                                                                                                        https://www.cnblogs.com/omsql/p/10845235.html

                                                                                                                                                                        相关文章

                                                                                                                                                                        Oracle如何使用授予和撤销权限的语法和示例
                                                                                                                                                                        Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
                                                                                                                                                                        下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
                                                                                                                                                                        社区版oceanbase安装
                                                                                                                                                                        Oracle 导出CSV工具-sqluldr2
                                                                                                                                                                        ETL数据集成丨快速将MySQL数据迁移至Doris数据库

                                                                                                                                                                        发布评论