MySQL 应用专用账号与最小权限
将应用运行账号与数据库迁移账号分开,整理创建用户、授权与验证方法。
阅读设置
分开运行账号与迁移账号
应用运行时通常只需访问自己的业务数据。建表、改表等数据库迁移操作可以交给独立账号或部署步骤,不必让日常连接一直持有管理员权限。
创建专用账号
以下为 MySQL 示例。先替换数据库、表名、客户端主机与随机密码,再在具备授权能力的管理会话中操作:
CREATE USER 'blog_app'@'APP_HOST' IDENTIFIED BY 'REPLACE_WITH_RANDOM_PASSWORD';
GRANT SELECT, INSERT, UPDATE, DELETE
ON blog_db.posts TO 'blog_app'@'APP_HOST';
SHOW GRANTS FOR 'blog_app'@'APP_HOST';
按业务需要增加表的授权;若应用确实要访问整个专用数据库,可评估 blog_db.* 的范围。APP_HOST 表示数据库看到的客户端来源,不一定等于应用的公网 IP。容器 NAT、连接代理和 MySQL 账号匹配规则需要一起检查。
不要默认使用 '%'、ALL PRIVILEGES 或 WITH GRANT OPTION。CREATE USER 与 GRANT 正常执行后通常无需再调用 FLUSH PRIVILEGES。
在应用中使用
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
使用密码管理器或密码学安全随机数生成器生成密码,通过环境或秘密管理机制注入。不要把真实密码放入示例、Git 历史或终端截图。
验证与维护
从应用实际运行位置登录数据库,确认需要的读写成功,不需要的建库、授权或访问其他数据库操作被拒绝。部署迁移完成后关闭临时高权限入口,并记录账号轮换方式。
删除账号前确认没有活跃应用依赖;本文只说明权限设计,不包含对现有生产库的执行操作。