乐闻世界logo
搜索文章和话题

MariaDB 如何进行安全配置?有哪些安全最佳实践?

2月21日 15:51

MariaDB 的安全配置是保护数据库安全的重要环节,以下是主要的安全配置措施:

1. 用户权限管理

sql
-- 创建用户并设置密码 CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'strong_password'; -- 授予最小必要权限 GRANT SELECT, INSERT, UPDATE ON database_name.* TO 'app_user'@'localhost'; -- 撤销权限 REVOKE DELETE ON database_name.* FROM 'app_user'@'localhost'; -- 删除用户 DROP USER 'app_user'@'localhost'; -- 查看用户权限 SHOW GRANTS FOR 'app_user'@'localhost'; -- 刷新权限 FLUSH PRIVILEGES;

2. 配置文件安全

ini
# my.cnf 安全配置 # 禁止远程 root 登录 skip-networking # 或 bind-address = 127.0.0.1 # 禁用本地文件加载 local-infile = 0 # 限制最大连接数 max_connections = 100 # 启用 SSL require-secure-transport = ON ssl-ca = /path/to/ca-cert.pem ssl-cert = /path/to/server-cert.pem ssl-key = /path/to/server-key.pem # 设置默认认证插件 default-authentication-plugin = mysql_native_password

3. 密码策略

sql
-- 安装密码验证插件 INSTALL PLUGIN simple_password_check SONAME 'simple_password_check.so'; -- 配置密码策略 SET GLOBAL simple_password_check_minimal_length = 12; SET GLOBAL simple_password_check_minimal_digit_count = 2; SET GLOBAL simple_password_check_minimal_special_char_count = 1; SET GLOBAL simple_password_check_minimal_uppercase_char_count = 1; -- 强制密码过期 ALTER USER 'app_user'@'localhost' PASSWORD EXPIRE; ALTER USER 'app_user'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;

4. 网络安全

bash
# 配置防火墙 # 只允许特定 IP 访问 iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -j ACCEPT iptables -A INPUT -p tcp --dport 3306 -j DROP # 使用 SSH 隧道 ssh -L 3306:localhost:3306 user@remote_server

5. 数据加密

sql
-- 启用 InnoDB 表加密 -- my.cnf 配置 innodb_encrypt_tables = ON innodb_encrypt_log = ON innodb_encryption_threads = 4 innodb_encryption_rotate_key_age = 1 -- 创建加密表 CREATE TABLE sensitive_data ( id INT PRIMARY KEY, data VARCHAR(255), ENCRYPTION='Y' ) ENGINE=InnoDB ENCRYPTED=YES; -- 使用加密函数 SELECT AES_ENCRYPT('sensitive_data', 'encryption_key'); SELECT AES_DECRYPT(encrypted_data, 'encryption_key');

6. 审计日志

sql
-- 启用审计日志 -- my.cnf 配置 plugin_load_add = server_audit server_audit_events = CONNECT,QUERY,TABLE server_audit_logging = ON server_audit_file_path = /var/log/mariadb/audit.log server_audit_file_rotate_size = 100M server_audit_file_rotations = 9 -- 查看审计日志 SELECT * FROM information_schema.server_audit;

7. 定期安全检查

sql
-- 查看所有用户 SELECT user, host FROM mysql.user; -- 查看空密码用户 SELECT user, host FROM mysql.user WHERE authentication_string = ''; -- 查看具有所有权限的用户 SELECT user, host FROM mysql.user WHERE Grant_priv = 'Y'; -- 查看匿名用户 SELECT user, host FROM mysql.user WHERE user = '';

8. 备份安全

bash
# 加密备份文件 mysqldump -u root -p database_name | gzip | openssl enc -aes-256-cbc -salt -out backup.sql.gz.enc # 解密备份文件 openssl enc -d -aes-256-cbc -in backup.sql.gz.enc | gunzip | mysql -u root -p database_name

9. 安全最佳实践

  1. 最小权限原则:只授予必要的权限
  2. 定期更新:及时安装安全补丁
  3. 强密码策略:使用复杂密码并定期更换
  4. 网络隔离:限制数据库的网络访问
  5. 加密传输:使用 SSL/TLS 加密连接
  6. 审计监控:启用审计日志并定期审查
  7. 备份保护:加密备份文件并安全存储
  8. 定期检查:定期进行安全审计和漏洞扫描

通过以上安全配置措施,可以显著提升 MariaDB 的安全性,保护数据免受未授权访问和攻击。

标签:MariaDB