要创建新用户并替换掉 root,请按照以下步骤操作:
1. 进入 MySQL 容器
首先,你需要通过终端进入正在运行的 MySQL 容器,使用 root 账号执行管理命令:
bash
# 进入容器内部
docker exec -it mysql-aipbl mysql -uroot -pSztu@123456
2. 执行 SQL 创建业务用户
进入 MySQL 命令行后,依次输入以下命令(建议将 web_user 和 NewPass@123 替换为你自己的名称和强密码):
sql
-- 1. 创建新用户 (允许从任何主机连接,匹配 Docker 网络环境)
CREATE USER 'web_user'@'%' IDENTIFIED BY 'NewPass@123';
-- 2. 仅授予对 ai_pbl 数据库的常用操作权限(不给 DROP 权限更安全)
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, ALTER ON ai_pbl.* TO 'web_user'@'%';
-- 3. 刷新权限使之生效
FLUSH PRIVILEGES;
-- 4. 退出
EXIT;
3. 修改你的代码配置 (DataSource)
现在,你可以安全地将代码中的 root 替换为新账号。修改后的 DataSource 如下:
修改前:
"root:Sztu@123456@tcp(mysql-aipbl:3306)/ai_pbl?..."
修改后:
"web_user:NewPass@123@tcp(mysql-aipbl:3306)/ai_pbl?charset=utf8mb4&parseTime=True&loc=Asia%2FShanghai"
4. 安全进阶:使用环境变量 (推荐)
为了符合你之前提到的"安全规范",禁止在代码中硬编码账号密码 。最佳实践是在 docker-compose.yml 或 Ubuntu 的环境变量中设置,然后在代码中读取。
在 Docker Compose 中配置:
yaml
services:
app:
image: my-vue-backend
environment:
- DB_DSN=web_user:NewPass@123@tcp(mysql-aipbl:3306)/ai_pbl?charset=utf8mb4&parseTime=True&loc=Asia%2FShanghai
在 Go 代码中读取:
go
dsn := os.Getenv("DB_DSN")
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
常见问题排查
- 连接失败? 确保你的
web_user授权的主机是'%'而不是'localhost',因为在 Docker 环境中,App 容器连接 MySQL 容器被视为远程连接。 - 权限不足? 如果你的程序需要自动迁移表结构(如 GORM 的
AutoMigrate),请确保权限列表中包含CREATE和ALTER。