当前位置:首页 > 互联网 > 正文

如何配置服务器数据库权限?服务器权限设置最佳实践

核心配置步骤

登录数据库服务器

# 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")


关键安全实践

  1. 最小权限原则

    如何配置服务器数据库权限?服务器权限设置最佳实践 第1张

    • 只授予必要权限(如 SELECT/INSERT),避免 ALL PRIVILEGES。
    • 示例:拒绝删表权限 -- MySQL REVOKE DROP ON app_db.* FROM 'app_user'@'%';
  2. 访问来源限制

    • 绑定用户 IP(替换 为具体 IP): -- MySQL CREATE USER 'app_user'@'192.168.1.100' IDENTIFIED BY 'password';
  3. 加密连接

    如何配置服务器数据库权限?服务器权限设置最佳实践 第2张

    • 强制使用 SSL/TLS(MySQL): ALTER USER 'app_user'@'%' REQUIRE SSL;
  4. 定期审计

    • 检查异常登录: # 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;


故障排查

  1. 连接被拒绝
    • 检查防火墙、数据库绑定 IP(bind-address 是否设为 0.0.0)。
  2. 权限不生效
    • 确保执行 FLUSH PRIVILEGES;(MySQL)。
  3. 用户无法访问表
    • PostgreSQL 需额外授权 Schema: GRANT USAGE ON SCHEMA public TO user;

重要提示:生产环境操作前务必备份数据!使用强密码并定期轮换。

如何配置服务器数据库权限?服务器权限设置最佳实践 第3张

0