1 安全架构
兼容加密算法:DES AES RC4 MD5 SHA1
pwd_policy
没有包含在 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.
关闭审计: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:操作失败的时候审计
对象审计:细粒度
开对象审计:
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> 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;
SQL> select username, operation, sql_text from v$auditrecords;
关闭系统审计
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
3 数据库安全基线
3.1 账号和密码的安全
alter user test account lock;
alter user test account unlock;
3.2 数据库版本升级
数据库升级(单库)的方法,详见文档。
数据库升级(单库)的方法,详见文档。
3.3 数据库的监控
1、使用 DEM 来监控
2、使用./monitor 监控管理工具来监控。
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
显示所有活动事务的信息。通过该视图可以查看所有系统中所有的事务以及相关信息, 如
锁信息等。
---有事务未提交的表
3.5 死锁监控
锁分为 TID 锁:事务锁 对象锁:通过统一的对象 ID 进行封锁,
共享锁 S 读
排他锁 X 写
意向锁 IX IS
查询是否有事务阻塞。
结合 v$sessions ,v$lock, v$trx, v$trxwait 来定位锁等待问题,查询阻 塞事务及被阻塞事务的 SESS_ID
3.6sql 语句监控
v$sql_history
3.7 表空间监控
DBA_DATA_FILE, V$DATAFILE, DBA_SEGMENTS 监控表空间的大小及表空间的使用率为多少(%)
表空间,真实使用情况
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:表名: 必须大写
返回值:表所占用的页数