核心配置步骤
登录数据库服务器
# MySQL/MariaDB mysql -u root -p # PostgreSQL sudo -u postgres psql # MongoDB mongo --username admin --password --authenticationDatabase admin
创建专用数据库用户(避免使用 root)
-- MySQL
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPassword123!';
-- PostgreSQL
CREATE USER app_user WITH PASSWORD 'StrongPassword123!';
-- MongoDB
use admin
db.createUser({user: "app_user", pwd: "StrongPassword123!", roles: []})
创建数据库并授权
-- MySQL
CREATE DATABASE app_db;
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'%';
-- PostgreSQL
CREATE DATABASE app_db;
GRANT CONNECT ON DATABASE app_db TO app_user;
c app_db
GRANT USAGE ON SCHEMA public TO app_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;
-- MongoDB
use app_db
db.grantRolesToUser("app_user", [{role: "readWrite", db: "app_db"}])
刷新权限
-- MySQL FLUSH PRIVILEGES; -- PostgreSQL (无需刷新) -- MongoDB (立即生效)
验证权限
-- MySQL
SHOW GRANTS FOR 'app_user'@'%';
-- PostgreSQL
du app_user
-- MongoDB
db.getUser("app_user")
关键安全实践
-
最小权限原则

- 只授予必要权限(如
SELECT/INSERT),避免ALL PRIVILEGES。 - 示例:拒绝删表权限
-- MySQL REVOKE DROP ON app_db.* FROM 'app_user'@'%';
- 只授予必要权限(如
-
访问来源限制
- 绑定用户 IP(替换 为具体 IP):
-- MySQL CREATE USER 'app_user'@'192.168.1.100' IDENTIFIED BY 'password';
- 绑定用户 IP(替换 为具体 IP):
-
加密连接

- 强制使用 SSL/TLS(MySQL):
ALTER USER 'app_user'@'%' REQUIRE SSL;
- 强制使用 SSL/TLS(MySQL):
-
定期审计
- 检查异常登录:
# MySQL SELECT * FROM mysql.general_log WHERE command_type = 'Connect';
- 检查异常登录:
防火墙配置
仅允许特定 IP 访问数据库端口:

# MySQL (3306) sudo ufw allow from 192.168.1.100 to any port 3306 # PostgreSQL (5432) sudo ufw allow from 192.168.1.100 to any port 5432 # MongoDB (27017) sudo ufw allow from 192.168.1.100 to any port 27017
不同场景权限示例
| 场景 | MySQL 权限命令 | PostgreSQL 权限命令 |
|---|---|---|
| 只读用户 | GRANT SELECT ON db.* TO 'user'@'%'; |
GRANT SELECT ON ALL TABLES TO user; |
| 读写用户 | GRANT SELECT, INSERT, UPDATE, DELETE ... |
GRANT SELECT, INSERT, UPDATE, DELETE... |
| 禁止删除数据 | REVOKE DELETE ON db.* FROM 'user'@'%'; |
REVOKE DELETE ON ALL TABLES FROM user; |
故障排查
- 连接被拒绝
- 检查防火墙、数据库绑定 IP(
bind-address是否设为0.0.0)。
- 检查防火墙、数据库绑定 IP(
- 权限不生效
- 确保执行
FLUSH PRIVILEGES;(MySQL)。
- 确保执行
- 用户无法访问表
- PostgreSQL 需额外授权 Schema:
GRANT USAGE ON SCHEMA public TO user;
- PostgreSQL 需额外授权 Schema:
重要提示:生产环境操作前务必备份数据!使用强密码并定期轮换。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/289466.html

