数据库等级保护笔记2.0

oracle

查看版本

oracle
1
2
3
select * from v$version;
select version from v$instance;
select version FROM Product_component_version Where SUBSTR(PRODUCT,1,6)='Oracle';

身份鉴别

密码策略

Oracle默认提供了一个密码策略的sql执行文件utlpwdmg.sql

  • Linux
    $ORACLE_HOME/rdbms/admin/utlpwdmg.sql #默认位置
  • Windows
    windows路径位置可以通过搜索来获得。
    C:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN #默认位置
查看用户状态及profile文件
1
2
3
select username,account_status,profile from dba_users;
# 只查看激活的用户
select username,profile from dba_users where account_status='OPEN';
profile设置
1
2
3
4
#只查看默认profile
select resource_name,limit from dba_profiles where profile='DEFAULT';
select profile,resource_name,limit from dba_profiles where resource_type='PASSWORD';
select profile,resource_name,limit from dba_profiles where resource_type='PASSWORD' and profile='DEFAULT';
resource_name 说明
PASSWORD_VERIFY_FUNCTION 复杂度设置,一般为null。
PASSWORD_LIFE_TIME 口令有效期,默认为180天。
PASSWORD_REUSE_TIME 使用过口令多少天内不可以再次被使用,默认为UNLIMITED。
PASSWORD_REUSE_MAX 口令被修改后原有口令被修改多少次才允许被重新使用,默认为UNLIMITED。
PASSWORD_GRACE_TIME 表示用户口令使用时间超过其生命周期后,可以延续使用的天数,并且可延续时间内登录会有相应口令即将过期的提示,默认为7天。
FAILED_LOGIN_ATTEMPTS 登录失败次数,默认为10次。
PASSWORD_LOCK_TIME 账户锁定时间,默认为1天。
最近密码修改时间
1
select name,ptime from sys.user$ where name='SYS';

登录超时

1
2
# 查看idle_time设置,默认为UNLIMITED。
select resource_name,limit from dba_profiles where profile='DEFAULT' and resource_type='KERNEL';

访问控制

说明
V$PWFILE_USERS 查看哪些用户有sysdba或sysoper系统权限
user_sys_privs 查看当前用户系统权限
dba_sys_privs 查看所有用户系统权限
role_sys_privs 查看角色(只能查看登陆用户拥有的角色)所包含的权限
dba_role_privs 查看所有用户的角色
user_role_privs 查看当前用户的角色
dba_roles 查看所有角色
dba_tab_privs 查看所有用户对象权限
user_tab_privs 查看当前用户对象权限
all_tab_privs 查看当前用户可查看用户的对象权限
查看当前用户的缺省表空间
1
select username,default_tablespace from user_users;

强制访问控制

Oracle Lable Security

安全审计

oracle
1
2
3
4
5
6
show parameter audit;                #查看日志
show parameter audit_sys_operations; #启用对sys用户的审计
show parameter audit_trail; #日志存放位置,若为os,则保存在系统中,windows系统在事件查看器中。
select * from v$logfile; #日志文件路径
select * from v$sql; #查看最近所作的操作
select * from v$sqlarea; #查看最近所作的操作

入侵防范

其他

1
2
3
4
5
show user;                #查看当前用户
select * from user_users; #查看当前用户
select * from dba_users; #查看数据库的所有用户
select * from all_users; #列出当前用户可见的数据库的所有用户
select name from v$tablespace; #查看oracle所有表空间

mysql

查看版本

mysql
1
2
select version();
status;

身份鉴别

密码策略

  • validate_password插件
    适用于mysql5.7.17以后
插件安装
1
2
INSTALL PLUGIN validate_password SONAME 'validate_password.dll'; #windows
UNINSTALL PLUGIN validate_password; #卸载
查看
1
show global variables like '%validate_password%';
参数 说明
validate_password_check_user_name ON 匹配新口令中是否含有用户名,默认启用
validate_password_dictionary_file 密码字典,新口令与字典相同则不可用
validate_password_length 8 口令最小长度
validate_password_mixed_case_count 1 最少大写和小写字符数(同时有大写和小写)
validate_password_number_count 1 最少数字字符数
validate_password_special_char_count 1 最少特殊字符数
validate_password_policy MEDIUM 密码安全策略:0/LOW:只限长度;1/MEDIUM:限制长度、数字、字母、特殊字符;2/STRONG:限制长度、数字、字母、特殊字符、字典

  • 口令有效期
mysql5.7.4以上版本
1
show global variables like 'default_password_lifetime';

在mysql配置文件(my.cnf(linux)my.ini(windows))中设置

1
2
[mysqld]
default_password_lifetime=180
在线设置,重启后失效
1
SET GLOBAL default_password_lifetime = 180;

登录失败

1
show global variables like 'max_connect_errors';

登录超时

1
2
show global variables like 'wait_timeout';
show global variables like 'interactive_timeout';
参数 说明
interactive_timeout 服务器关闭交互式连接前等待活动的秒数,默认值为28800。注意,如果设置该参数,通过交互式登录后,当前会话wait_timeout值也会变成该参数的值,使用show session variables like 'wait_timeout';查看当前会话设置。
wait_timeout 服务器关闭非交互连接之前等待活动的秒数,默认值为28800。

远程管理

见鉴别信息传输保密性

访问控制

mysql
1
2
3
4
5
select currnet_user(); #查看当前用户
select * from mysql.user\G; #查看用户
select user,host from mysql.user;
show grants for 'root'@'localhost'; #查看指定用户的权限
show grants; #查看当前用户的权限
说明
mysql.user 用户权限
mysql.db 数据库权限
mysql.tables_priv 表权限
mysql.columns_priv 列权限

安全审计

日志类型

MySQL日志类型 说明
普通查询日志(general query log) 当客户端连接数据库、执行语句时产生该日志
二进制日志(binray log) 当数据库内容发生改变时产生该日志,也被用来实现主从复制功能
错误日志(error log) 当数据库启动、运行、停止时产生该日志
中继日志(relay log) 从库上收到主库的数据更新是产生该日志
慢查询日志(slow query log) SQL语句在数据库查询超过指定时间时产生该日志
DDL日志(metadata log) 执行DDL语句操作元数据时产生该日志

日志设置

查看日志设置
1
2
3
4
5
show global variables like '%log%';         #查看所有日志相关配置
show global variables like 'log_output'; #查看日志保存类型,文件or数据库表
show global variables like '%general_log%'; #查看常规查询日志配置
show global variables like '%log_bin%'; #查看二进制日志配置
show global variables like '%log_error%'; #查看错误日志
参数 说明
log_output TABLE/FILE 日志保存位置,数据库表或文件,MySQL5.1.6版及以上
general_log ON/OFF 是否开启mysql常规查询日志,包括登录退出、SQL语句执行
general_log_file \ mysql常规查询日志文件存储路径
log_bin ON/OFF 是否开启二进制日志
log_bin_basename \ 保留二进制日志文件的基本名称和路径
log_bin_index \ 保留二进制日志索引文件的基本名称和路径
log_error \ 错误日志文件路径
slow_query_log ON/OFF 是否开启慢查询日志
slow_query_log_file \ 慢查询日志文件路径
配置
1
2
set global general_log=1; #开启general_log日志
set global log_bin=1; #开启log_bin日志

日志内容

log_output
1
2
3
4
desc mysql.general_log; #查看常规日志字段类型
SELECT * FROM mysql.general_log where event_time like '2020-08-31%';
SELECT *, CONVERT(argument USING utf8) FROM mysql.general_log; #当argument字段显示为16进制时使用,转为文字。
SELECT *, CONVERT(argument USING utf8) FROM mysql.general_log where event_time like '2020-08-31%';
查看二进制日志
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#数据库内查看
show binary logs; #查看日志文件名称等信息
show binlog events; #查看日志文件名称等信息
show binlog events in 'XXX-bin.000002'; #查看日志文件具体内容

#使用mysqlbinlog查看(命令行)
# mysqlbinlog 的执行格式
mysqlbinlog [options] log_file

# 查看bin-log二进制文件(shell方式)
mysqlbinlog -v --base64-output=decode-rows /var/lib/mysql/master.000003

# 查看bin-log二进制文件(带查询条件)
mysqlbinlog -v --base64-output=decode-rows /var/lib/mysql/master.000003 \
--start-datetime="2020-03-01 00:00:00" \
--stop-datetime="2020-03-10 00:00:00" \
--start-position="5000" \
--stop-position="20000"
查看慢查询日志
1
2
desc mysql.slow_log;          #查看慢查询日志字段类型
SELECT * FROM mysql.slow_log; #查看慢查询日志内容

日志备份

log_output值为FILE时备份文件,为TBALE时备份数据库。

其他审计

MySQL企业审核基于审核日志插件和相关组件,官方文档

查看是否安装
1
2
3
4
show global variables like '%audit%';
SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE 'audit%';

入侵防范

组件

查看插件信息
1
show plugins;

地址限制

1
select user,host from mysql.user;

数据完整性

  • SSL保证数据完整性
1
2
show global variables like '%ssl%'; #是否启用SSL
show global variables like "%require_secure_transport%"; #是否只允许SSL连接

数据保密性

鉴别信息传输保密性

1
2
3
4
# 查看默认验证插件
SHOW VARIABLES LIKE 'default_authentication_plugin';
# 查看密码验证插件
select user,plugin from mysql.user;
插件名称 说明
mysql_native_password 使用带盐的SHA1算法加密
caching_sha2_password 使用带盐的SHA256算法加密,mysql8.0以上默认采用caching_sha2_password插件,官方说明
sha256_password 使用带盐的SHA256算法加密
mysql_old_password 不符合要求,被截获可直接登录

加密安全度
caching_sha2_password > sha256_password > mysql_native_password

鉴别信息存储保密性

查看加密插件及加密结果
1
2
3
select user,plugin,password from user;
# mysql5.7以后密码字段为authentication_string
select user,plugin,authentication_string from user;
  • 内容类似如下
user plugin authentication_string/password
root caching_sha2_password $A$005$1%h5f1OdZ0'46}M[uz5Di5wW2WWg8eeLWynsg2h3xnzHwQLmm39bEqLBxB0
root mysql_native_password *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
  • mysql_native_password存储加密说明
    使用SHA1算法,输出41位密文
    官方说明

  • caching_sha2_password存储加密说明

内容 字节数 说明
哈希算法 2字节 目前仅为 $A,表示 SHA256 算法
哈希轮转次数 4字节 目前仅为 $005,表示 5*1000=5000 次
盐(salt) 21字节 用于解决相同密码相同哈希值问题
哈希值 43字节

参考文档:
MySQL 8.0:新的身份验证插件(caching_sha2_password)


其他

1
2
3
4
5
6
7
8
9
select user();            #查看当前用户
select database(); #查看当前数据库
show database; #查看所有数据库
show tables; #显示当前数据库的所有表
select * from mysql.user; #查看所有用户
show plugins; #查看插件信息
INSTALL PLUGIN myplugin SONAME 'somepluglib.so'; #安装插件,windows下为dll文件
SET GLOBAL 插件名 = 值; #设置插件
uninstall plugin name; #卸载插件