1 安全架构

达梦数据库安全管理_sql

兼容加密算法:DES AES RC4 MD5 SHA1

pwd_policy

达梦数据库安全管理_sql_02

没有包含在 dm.ini 文件中,但用户可通过调用系统过程和函数进行参

数值的设置和修改

SP_SET_PARA_VALUE()

SP_SET_SYSTEM_PARA_VALUE()

2 审计分析

达梦的审计有三种:

系统审计

系统的启动与关闭,此级别的审计记录在任何情况下都会强制产生,

无法也无需由用户进行设置。

语句审计

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

TABLE 将审计 CREATE TABLE、ALTER TABLE 和 DROP TABLE 等语句。

对象审计

审计作用在特殊对象上的语句。如 PERSON 表上的 INSERT,

delete,update 语句。

在 DM 系统中,启用审计功能需要两步:

1、打开审计开关(默认审计开关是关闭),并重启数据库服务。

2、对审计对象设置审计条件,否则不记录审计。

审计开关

DM7:SP_SET_PARA_VALUES(1,‘ENABLE_AUDIT’,1)

DM8:SP_SET_ENABLE_AUDIT(PARAM INT);

过程执行完成后,立即生效,param 有三种取值

0 :关闭审计

1:打开普通审计

2:打开普通审计和实时审计,缺省值为 0.

达梦数据库安全管理_sql_03

达梦数据库安全管理_sql_04

关闭审计:sp_set_enable_audit(0);

1、语句级别的审计 :粗粒度

SP_audit_stmt(type,username,whenever)

Sp_audit_stmt(‘UPDATE TABLE’,’TEST’,’ALL’)

TYPE:审计对象(表,视图,存储过程)

Username:用户,null 表示不限制

Whenever:审计时机

 ALL: 不管成功或是失败都审计

 SUCCESSFUL:操作成功的时候审计

 FAIL:操作失败的时候审计

达梦数据库安全管理_表空间_05

达梦数据库安全管理_数据库_06

达梦数据库安全管理_数据库_07

对象审计:细粒度

开对象审计:

sp_audit_object(type, username, schema_name, object_name, column_name, whenever)

SQL>sp_audit_object('INSERT','DMTEST','DMTEST','SALES','SALE_DATE','ALL');

SQL> sp_audit_object('UPDATE','TEST','TEST','EMP','SALARY','ALL');

SQL> SP_AUDIT_OBJECT('DELETE','TEST','TEST','EMP','SALARY','ALL');

达梦数据库安全管理_sql_08

SQL> delete emp where employee_id='1001';

SQL> update emp set salary=20000 where employee_id='1002';

SQL> insert into emp(employee_id,employee_name,salary) values('1111','3333',10000);

SQL> commit;

达梦数据库安全管理_数据库_09

SQL> select username, operation, sql_text from v$auditrecords;

达梦数据库安全管理_表空间_10

关闭系统审计

sp_set_enable_audit(0);

关闭语句级审计

sp_noaudit_stmt(type,username,whenever)

sp_noaudit_stmt(‘TABLE’,’TEST’,’ALL’);

关闭对象级审计

sp_noaudit_object(‘INSERT’,’TEST’,’TEST’,’EMP’,’SALARY’,’ALL);

sp_noaudit_stmt(‘DELETE TABLE’ ,’TEST’,’ALL’);

UPDATE TABLE

SP_AUDIT_OBJECT(‘UPDATE’,’TEST’,’TEST’,’EMP’,’SUCCESSFUL’);

关于审计设置的一些说明:

只要审计功能被启用,系统级的审计记录就会产生。

在进行数据库审计的时候,审计员之间没有区别,可以审计所有数据

库对象,也可以取消其他审计员的审计设置。

语句级审计不针对特定的对象,只针对用户

对象级审计针对指定的用户与指定的对象进行审计。

在设置审计时,审计选项不区分包含关系,审计时机不区分包含关系,

都可以设置。

如果用户执行的一条语句与设置的若干审计项都匹配,只会在审计文

件中生成一条审计记录。

DM 提供图形化的审计工具 /dm8/tool/analyzer. 和命令行工具

/dm8/bin/dmaudtool

达梦数据库安全管理_sql_11

3 数据库安全基线

3.1 账号和密码的安全

达梦数据库安全管理_数据库_12

达梦数据库安全管理_数据库_13

达梦数据库安全管理_数据库_14

alter user test account lock;

alter user test account unlock;

3.2 数据库版本升级

数据库升级(单库)的方法,详见文档。

达梦数据库安全管理_表空间_15

达梦数据库安全管理_数据库_16

达梦数据库安全管理_表空间_17

达梦数据库安全管理_sql_18

数据库升级(单库)的方法,详见文档。

3.3 数据库的监控

1、使用 DEM 来监控

2、使用./monitor 监控管理工具来监控。

达梦数据库安全管理_表空间_19

达梦数据库安全管理_数据库_20

3.4 会话监控

---查询活动会话数

select count(*) from v$sessions where state='ACTIVE';

--已执行超过 2s 的活动 sql(监控执行时间长的 sql 语句)

select * from (

select sess_id,sql_text,datediff(ss,last_send_time,sysdate)

y_exetime,sf_get_session_sql(sess_id) fullsql, clnt_ip

from v$sessions where state='ACTIVE' )

where y_exetime >=2

---已经执行但未提交的 sql 语句。

V$TRX

显示所有活动事务的信息。通过该视图可以查看所有系统中所有的事务以及相关信息, 如

锁信息等。

达梦数据库安全管理_数据库_21

达梦数据库安全管理_sql_22

---有事务未提交的表

达梦数据库安全管理_表空间_23

3.5 死锁监控

锁分为 TID 锁:事务锁 对象锁:通过统一的对象 ID 进行封锁,

共享锁 S 读

排他锁 X 写

意向锁 IX IS

查询是否有事务阻塞。

达梦数据库安全管理_表空间_24

结合 v$sessions ,v$lock, v$trx, v$trxwait 来定位锁等待问题,查询阻 塞事务及被阻塞事务的 SESS_ID

达梦数据库安全管理_表空间_25

3.6sql 语句监控

v$sql_history

达梦数据库安全管理_sql_26

达梦数据库安全管理_表空间_27

3.7 表空间监控

DBA_DATA_FILE, V$DATAFILE, DBA_SEGMENTS 监控表空间的大小及表空间的使用率为多少(%)

达梦数据库安全管理_sql_28

表空间,真实使用情况

SELECT a.tablespace_name "表空间名称",

total / (1024 * 1024) "表空间大小(M)",

free / (1024 * 1024) "表空间剩余大小(M)",

(total - free) / (1024 * 1024 ) "表空间使用大小(M)",

total / (1024 * 1024 * 1024) "表空间大小(G)",

free / (1024 * 1024 * 1024) "表空间剩余大小(G)",

(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)",

round((total - free) / total, 4) * 100 "使用率 %"

FROM (SELECT tablespace_name, SUM(bytes) free

FROM dba_free_space

GROUP BY tablespace_name) a,

(SELECT tablespace_name, SUM(bytes) total

FROM dba_data_files

GROUP BY tablespace_name) b

WHERE a.tablespace_name = b.tablespace_name;

适用于表空间设置上限并且自动扩展打开的情况。

SELECT ZZ.TABLESPACE_NAME,

ROUND(ZZ.used_size_M/NN.TOTAL_SIZE_M*100,2)

FROM (select TABLESPACE_NAME,sum(bytes/1024)/1024 used_size_m

from dba_segments

where TABLESPACE_NAME not in ('SYSTEM','MAIN','TEMP','ROLL')

GROUP BY TABLESPACE_NAME) ZZ ,

(SELECT b.name,A.C TOTAL_SIZE_M FROM

(SELECT GROUP_ID,SUM(MAX_SIZE) C FROM V$DATAFILE

GROUP BY GROUP_ID) A,V$TABLESPACE B WHERE A.group_id=b.id AND

NAME NOT IN ('SYSTEM','MAIN','TEMP','ROLL')) NN

WHERE ZZ.TABLESPACE_NAME=NN.NAME

3.8 资源监控

sp_check_idle_mem()

对可用内存空间进行检测,并在低于阈值的情况下,打印报警记录到

日志,同进报内存不足的异常(对应 ini 参数 IDLE_MEM_THRESHOLD)

CALL SP_CHECK_IDLE_MEM();

SP_CHECK_IDLE_DISK(PATH VARCHAR(256))

对指定位置的磁盘空间进行检查,并在低于阈值的情况下打印报警记

录到日志,同时报磁盘空间不足,IDLE_DISK_THRESHOLD

查看 DM 服务器对用户命令的平均响应时间

在 DM.INI 中 enable_monitor 取值不小于 2 的前提下执行

select sys.sf_get_cmd_reponse_time();

查看事务的平均响应时间

在 DM.INI 中 enable_monitor 取值不小于 0 的前提下执行

select sys.sf_get_trx_reponse_time();

table_used_space

定 义 : int * table_used_space(schnanme varchar(256), schnanme varchar(256));

schnanme:模式名,必须大写

schnanme:表名: 必须大写

返回值:表所占用的页数

达梦数据库安全管理_sql_29