1.安全标准
CC 标准-国际标准:
Common criteria
达梦为 EL4
TCSEC 美国国防部的数据库安全标准:
达梦安全版可以达到 B1 标记安全保护
国家标准–GB/T 20273-2006:
达梦安全四级
2.用户安全
2.1 口令策略
用户口令最长为 48 字节,创建用户语句中的 PASSWORD Y POLICY 子句用来指定该用户的口令策略,系统支持的口令策略有:
0 无策略
1 禁止与用户名相同
2 口令长度不小于 9
4 至少包含一个大写字母(A-Z)
8 至少包含一个数字(0-9)
16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
复制
口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和 4,则设置口令策略为 2+4=6 即可。
除了在创建用户语句中指定该用户的口令策略,隐含参数 PWD_POLICY(不在dm.ini中) 可以指定系统的默认口令策略,其参数值的设置规则与 PASSWORD POLICY 子句一致,缺省值为2。若在创建用户时没有使用 PASSWORD POLICY 子句指定用户的口令策略,则使用系统的默认口令策略。
查询系统默认口令策略:
--PWD_POLICY是隐含参数,只能通过函数或者sql语句修改
SQL> select name,type,value,sys_value,file_value from v$parameter where name='PWD_POLICY';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- ---------- ---- ----- --------- ----------
1 PWD_POLICY SYS 0 0 0
复制
查询用户当前的口令策略:
SQL> select username,account_status,password_versions from dba_users;
行号 USERNAME ACCOUNT_STATUS PASSWORD_VERSIONS
---------- ---------- -------------- -----------------
1 SYSAUDITOR OPEN 0
2 SYSSSO OPEN 0
3 SYSDBA OPEN 0
4 SYS OPEN 0
--修改用户口令策略
alter user sysdba password_policy 31;
SQL> select username,account_status,password_versions from dba_users where username='SYSDBA';
行号 USERNAME ACCOUNT_STATUS PASSWORD_VERSIONS
---------- -------- -------------- -----------------
1 SYSDBA OPEN 31
复制
修改系统默认口令策略:
- 方法1:通过alter system
select name,type,value from v$parameter where name='PWD_POLICY';
alter system set 'pwd_policy'=6 both;
复制
- 方法2:通过console工具
console为脱机工具,对参数值的修改是通过修改dm.ini文件中的参数值来进行,无论参数是静态还是动态,都需要重启DM数据库才能使新设置的参数值生效。
[dmdba@dmserver tool]$ pwd /home/dmdba/dmdbms/tool [dmdba@dmserver tool]$ ./console
复制
- 方法3:使用系统过程
使用系统过程 SP_SET_PARA_VALUE 来配置 PWD_POLICY 参数值。
SQL> SP_SET_PARA_VALUE(1, 'PWD_POLICY',2);
DMSQL 过程已成功完成
已用时间: 2.139(毫秒). 执行号:56607.
SQL> select name,value from v$parameter where name='PWD_POLICY';
行号 NAME VALUE
---------- ---------- -----
1 PWD_POLICY 2
已用时间: 34.398(毫秒). 执行号:56608.
复制
2.2 资源限制
可以通过管理工具 manager---> 用户---> 修改
来设置密码和资源的安全
可以单独创建资源限制 Profile。
create PROFILE pro1 limit PASSWORD_LIFE_TIME 180;
复制
2.3 权限控制
查看数据库中的用户
Select username from dba_users;
USERNAME
SYSSSO :安全员(安全策略,安全版商密可信版)--->可以用来做强制访问策略
SYSDBA :管理员
SYS : 内置管理账户
SYSAUDITOR
Sysdbo : 操作员(安全版才会有)
复制
2.4 操作系统认证
基 于 OS 的身份验证需首先将操作系统用户加入到操作系统的 dmdba|dmsso|dmauditor 用户组,分别对应数据库的SYSDBA|SYSSSO|SYSAUDITOR 用户。也可以将操作系统用户加入到操作系统的 dmusers 用户组来进行基于 OS 的身份验证,对应数据库的同名用户,即此时数据库中需要存在一个与操作系统用户同名的用户。
- sysdba身份登录
1.设置参数并重启数据库
--ENABLE_LOCAL_OSAUTH为隐含参数,参数修改写入system.dbf,不在dm.ini文件中
select name,type,value from v$parameter where name='ENABLE_LOCAL_OSAUTH';
--设置为1,支持操作系统认证
alter system set ENABLE_LOCAL_OSAUTH=1 spfile;
--重启数据库
[dmdba@localhost ~]$ DmServiceDMSERVER stop
[dmdba@localhost ~]$ DmServiceDMSERVER start
复制
2.创建dmdba组,把dmdba添加到dmdba组
groupadd dmdba usermod -G dmdba dmdba id dmdba
复制
3.使用操作系统认证登录
disql / as sysdba
复制
- 普通用户身份登录
以普通用户身份登录,需要在数据库中创建同名用户,操作系统中创建该用户,并且将用户加入到 dmusers 用户组(重点)。
[root@localhost ~]# useradd dmtest
[root@localhost ~]# usermod -G dmusers dmtest
[root@localhost ~]# su - dmtest
[dmtest@localhost ~]$ cd /dm8/bin
#登录用户为dmtest
[dmtest@localhost bin]$ ./disql / as users
[root@localhost ~]# su - hr
[hr@localhost ~]$ cd /dm8/bin
#登录用户为hr
[hr@localhost bin]$ ./disql / as users
复制
3.审计
执行审计需要的权限:
- 只有数据库审计员才能进行审计操作,数据库管理员和安全员不能参与审计活动
- 达梦预定义系统审计管理员:sysauditor
3.1 审计分类
数据库审计包含:系统级、语句级、对象级。
系统审计: 系统的启动与关闭,此级别的审计记录在任何情况下都会强制产生,无法也无需由用户进行设置。(启动关闭数据库)信息记录到 /dm8/data/DAMENG/AUDIT_DMSERVER*.log,相当于 oracle 中的 alert trace 文件,包含报错信息。
语句审计: 审计具体的语句,补丁某个对象,如create table,alter table。使用 SP_AUDIT_STMT 进行语句审计的设置。
对象审计: 审计对对象的操作,如person表上的insert语句。使用 SP_AUDIT_OBJECT 进行对象审计,可以是针对某个对象(表、过程、视图等)也可以精确到某张表的某列。
3.2 审计管理
3.2.1 审计开关
审计开关:
审计开关由SP_SET_ENABLE_AUDIT(param int)控制, 过程执行完后会立即生效, param 有三种取值:
0:关闭审计,缺省值为0 1:打开普通审计 2:打开普通审计和实时审计
复制
查询是否开启审计:
--0表示关闭审计,1 表示打开审计,2 表示普通+实时审计
select para_name,para_value,para_type from v$dm_ini where para_name='ENABLE_AUDIT';
复制
打开审计: 审计打开后,才能配置审计,否则会报” [-5301]:审计开关关闭或当前环境不支持“ 错误
--需要sysauditor用户登录操作
SP_SET_ENABLE_AUDIT(1)
复制
关闭审计:
--需要sysauditor用户登录操作
SP_SET_ENABLE_AUDIT(0)
复制
3.2.2 审计相关过程
SQL> select name,id from v$ifun where name like 'SP_AUDIT%';
行号 NAME ID
---------- --------------------- -----------
1 SP_AUDIT_SQLSEQ_ADD 1345
2 SP_AUDIT_SQLSEQ_END 1346
3 SP_AUDIT_SQLSEQ_DEL 1347
4 SP_AUDIT_SQLSEQ_START 1344
5 SP_AUDIT_STMT 596
6 SP_AUDIT_SET_ENC 1207
7 SP_AUDIT_OBJECT 1340
8 SP_AUDIT_OBJECT 598
8 rows got
已用时间: 12.065(毫秒). 执行号:500.
--Whenenver 表示审计时机,有三个取值:ALL\SUCCESSFUL\FAIL
SQL> select * from v$ifun_arg t where id=596;
行号 ID NAME SEQ DATA_TYPE LEN PREC IO_TYPE COMMENT$
---------- ----------- -------- ----------- ---------------- ----------- ----------- ------- --------
1 596 RVAL -1 UNKNOWN DATATYPE 0 0 RETURN NULL
2 596 TYPE 0 VARCHAR2 30 0 IN NULL
3 596 LUNAME 1 VARCHAR2 128 0 IN NULL
4 596 WHENEVER 2 VARCHAR2 20 0 IN NULL
已用时间: 10.096(毫秒). 执行号:501.
复制
3.2.3 审计相关参数
SQL> select name,value,description from v$parameter where name like '%AUDIT%';
行号 NAME VALUE DESCRIPTION
---------- -------------------- ----- -----------------------------------------------------------------------------------------------
1 ENABLE_AUDIT 1 Flag For Allowing Audit, 0: no audit 1: normal audit 2:normal audit and realtime audit
2 AUDIT_FILE_FULL_MODE 1 operation mode when audit file is full, 1: delete old file; 2: no longer to write audit records
3 AUDIT_SPACE_LIMIT 8192 audit space limit in Megabytes
4 AUDIT_MAX_FILE_SIZE 100 maximum audit file size in Megabytes
5 AUDIT_IP_STYLE 0 IP style in audit record, 0: IP, 1: IP(hostname), default 0
已用时间: 12.167(毫秒). 执行号:502.
SQL> select name,value,description from v$parameter where name like 'AUD_PATH%';
行号 NAME VALUE DESCRIPTION
---------- -------- ----- --------------
1 AUD_PATH NULL audit log path
SQL> select name,value,description from v$parameter where name like 'SYSTEM_PATH';
行号 NAME VALUE DESCRIPTION
---------- ----------- ---------------- -----------
1 SYSTEM_PATH /dm8/data/DAMENG system path
已用时间: 2.874(毫秒). 执行号:503.
复制
审计日志文件目录,默认使用的是 SYSTEM_PATH(dm.ini 中),也可以 dm.ini 在增加AUD_PATH 参数指定审计日志文件的存放目录。
3.2.4 审计相关函数
SQL> select name,id from v$ifun where name like 'SF_GET_AUDIT%';
行号 NAME ID
---------- -------------------------- -----------
1 SF_GET_AUDIT_TYPENAME 2249
2 SF_GET_AUDIT_LEVELNAME 2250
3 SF_GET_AUDIT_OPERATION 594
4 SF_GET_AUDIT_OPERATIONNAME 2251
5 SF_GET_AUDIT_WHENEVERNAME 2252
6 SF_GET_AUDIT_TYPE 593
6 rows got
已用时间: 1.952(毫秒). 执行号:505.
复制
3.2 语句级审计
语句级审计的动作是全局的,不对应具体的数据库对象,粗粒度审计。
3.2.1 设置语法
语法: stmt为statements 语句的简写
sp_audit_stmt(type,username,whenever)
复制
语法说明:
TYPE: 审计对象(表,视图,存储过程),有很多类型,具体参考官方手册。
Username: 用户,null 表示不限制
Whenever: 审计时机
ALL: 不管成功或是失败都审计
SUCCESSFUL: 操作成功的时候审计
FAIL: 操作失败的时候审计
复制
3.2.1 使用用例
针对表的 DDL 操作审计:
--stmt为statements 语句的简写
sp_audit_stmt('TABLE','NULL','ALL');
复制
针对表的插入操作审计:
sp_audit_stmt('INSERT TABLE','NULL','SUCCESSFUL');
复制
删除审计:
sp_noaudit_stmt('TABLE','NULL','ALL')
复制
审计查询:
--查询所有配置的审计类型
SQL> select * from sysaudit;
行号 LEVEL UID TVPID COLID TYPE WHENEVER
---------- ----------- ----------- ----------- ----------- ----------- -----------
1 1 -1 -1 -1 15 3
--通过type获取typename
SQL> select SF_GET_AUDIT_TYPENAME(15);
行号 SF_GET_AUDIT_TYPENAME(15)
---------- -------------------------
1 TABLE
--查询审计日志
select * from sysauditor.v$auditrecords;
复制
3.3 对象级审计
对象级审计发生在具体的对象上,需要指定模式名以及对象名,细粒度审计。
3.3.1 设置语法
语法:
sp_audit_object(type,username,schname,tvname,colname,whenever)
复制
语法说明:
TYPE: 对象级审计选项
USERNAME:用户名
SCHNAME: 模式名,为空时设置null
TVNAME: 表、视图、存储过程名不能为空
COLNAME:列名
WHENEVER: 审计时机,可选的取值为:
ALL: 不管成功或是失败都审计
SUCCESSFUL: 操作成功的时候审计
FAIL: 操作失败的时候审计
复制
sp_audit_object过程参数定义:
SQL> select * from v$ifun_arg t where id in(598,1340);
行号 ID NAME SEQ DATA_TYPE LEN PREC IO_TYPE COMMENT$
---------- ----------- -------- ----------- ---------------- ----------- ----------- ------- --------
1 1340 RVAL -1 UNKNOWN DATATYPE 0 0 RETURN NULL
2 1340 TYPE 0 VARCHAR2 30 0 IN NULL
3 1340 USERNAME 1 VARCHAR2 128 0 IN NULL
4 1340 SCHNAME 2 VARCHAR2 128 0 IN NULL
5 1340 TVNAME 3 VARCHAR2 128 0 IN NULL
6 1340 COLNAME 4 VARCHAR2 128 0 IN NULL
7 1340 WHENEVER 5 VARCHAR2 20 0 IN NULL
8 598 RVAL -1 UNKNOWN DATATYPE 0 0 RETURN NULL
9 598 TYPE 0 VARCHAR2 30 0 IN NULL
10 598 USERNAME 1 VARCHAR2 128 0 IN NULL
11 598 SCHNAME 2 VARCHAR2 128 0 IN NULL
12 598 TVNAME 3 VARCHAR2 128 0 IN NULL
13 598 WHENEVER 4 VARCHAR2 20 0 IN NULL
13 rows got
已用时间: 1.892(毫秒). 执行号:517.
复制
3.3.2 使用示例
创建对象级审计:
sp_audit_object('INSERT','DMTEST','DMTEST','T_PARTRANGETAB','SUCCESSFUL');
sp_audit_object('UPDATE','DMTEST','DMTEST','T_PARTRANGETAB','SUCCESSFUL');
sp_audit_object('DELETE','DMTEST','DMTEST','T_PARTRANGETAB','SUCCESSFUL');
--审计dmtest用户对dmtest.T_PARTRANGETAB的操作
sp_audit_object('ALL','DMTEST','DMTEST','T_PARTRANGETAB','SUCCESSFUL');
--审计所有用户对dmtest.T_PARTRANGETAB的操作
sp_audit_object('ALL','NULL','DMTEST','T_PARTRANGETAB','SUCCESSFUL');
复制
删除审计:
sp_noaudit_object('DELETE','DMTEST','DMTEST','T_PARTRANGETAB','SUCCESSFUL');
sp_noaudit_object('ALL','DMTEST','DMTEST','T_PARTRANGETAB','SUCCESSFUL');
复制
审计查询:
select * from sysaudit;
select * from sysauditor.v$auditrecords;
复制
3.4 审计查询
1.sysaudit表存放审计设置信息
--查询所有审计配置信息
select * from sysaudit;
--查询某个表上的审计配置,1290为表的id
SELECT SF_GET_AUDIT_LEVELNAME(level) level,
SF_GET_AUDIT_TYPENAME(type) type,
SF_GET_AUDIT_WHENEVERNAME("WHENEVER") whenever1,
sf_get_tablename_by_id(decode(tvpid,-1,null,tvpid)) tablename,
SF_GET_USERNAME_BY_ID(UID) uname, TVPID tvname
FROM sysaudit t;
select sf_get_tablename_by_id(1290);
复制
2.审计日志存放在操作系统文件中(AUDIT_开头.log 文件,默认在SYSTEM_PATH下),可以通过 v$auditrecords 查询
select * from SYSAUDITOR."V$AUDITRECORDS";
复制
3.5 审计日志解析
3.5.1 dmaudtool工具
帮助信息:
[dmdba@localhost ~]$ dmaudtool help dmaudtool V8 version: 03134283904-20220630-163817-20005 格式: ./dmaudtool KEYWORD=value 例程: ./dmaudtool USERID=sysauditor/sysauditor@192.168.0.33:4356 AFIL_PATH=/opt/dm7data/dameng/aud OUT_PATH=/opt/dm7data/dameng/out/aud_out.txt 例程: ./dmaudtool USERID=sysauditor/sysauditor@192.168.0.33:4356 AFIL_PATH=/opt/dm7data/dameng/aud UPDATE_KEY=NULL 必选参数: USERID、AFIL_PATH、(OUT_PATH or UPDATE_KEY) 关键字 说明 -------------------------------------------------------------------------------- USERID 用户名/口令 格式:<username>/<password>[@<connect_identifier>][<option>],必选 <connect_identifier> : [<svc_name> | host[:port] | <unixsocket_file>] <option> : #{<exetend_option>=<value>[,<extend_option>=<value>]...} --此行外层{}是为了封装参数之用,书写时需要保留 AFIL_PATH 审计文件所在的路径,必选 OUT_PATH 输出文件的生成路径,与OUT_SIZE配合使用,若超过指定文件大小,则会生成同名加序号后缀的文件,必选(如果使用分析审计日志功能)。 UPDATE_KEY 更换密钥,必选(如果使用更新审计日志密钥功能) OUT_SIZE 输出文件的指定大小,单位为兆(M),默认为0,表示不限制文件大小,最小500,最大65534。 DCR_INI DCR_INI路径,用于连接ASM使用。当审计文件存在与ASM上使用,若没有,则忽略。 USERNAME 对应审计记录中记录的用户名,若指定,则说明收集满足该用户名的审计记录。若未指定,则不考虑 SCHNAME 对应审计记录中记录的模式名,若指定,则说明收集满足该模式名的审计记录。若未指定,则不考虑 OBJNAME 对应审计记录中记录的对象名,若指定,则说明收集满足该对象名的审计记录。若未指定,则不考虑 TIME_FROM 对应审计记录中操作时间,若指定,则收集指定时间之后的审计记录。若未指定,则不考虑 TIME_TO 对应审计记录中操作时间,若指定,则收集指定时间之前的审计记录。若未指定,则不考虑 R_SEP 输出文件中行分隔符,默认回车符 C_SEP 输出文件中列分隔符,默认|号符 HELP 打印帮助信息 Analyse the audit files successfully.
复制
使用:
dmaudtool userid=sysauditor/NewcapeC.300248 AFIL_PATH=/dm8/data/DAMENG OUT_PATH=/dm8/data/DAMENG/audit.txt
复制
3.5.2 DM审计分析工具
审计文件打开乱码,需通过图形化 sysauditor 连接审计分析工具 analyzer 来查看审计结果,点击审计日志查看器–>添加目录—>选择$DM_HOME/data/DAMENG/—>只选择审计日志文件,点击确定进行查看。
[dmdba@localhost ~]$ cd /dm8/tool/ [dmdba@localhost tool]$ ll analyzer -rwxr-xr-x 1 dmdba dinstall 908 3?? 20 14:29 analyzer
复制