mysql数据库创建新用户,并只给其必要的权限

要创建新用户并替换掉 root,请按照以下步骤操作:

1. 进入 MySQL 容器

首先,你需要通过终端进入正在运行的 MySQL 容器,使用 root 账号执行管理命令:

bash 复制代码
# 进入容器内部
docker exec -it mysql-aipbl mysql -uroot -pSztu@123456

2. 执行 SQL 创建业务用户

进入 MySQL 命令行后,依次输入以下命令(建议将 web_userNewPass@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),请确保权限列表中包含 CREATEALTER
相关推荐
GBASE10 小时前
G术时刻 |GBase 8s数据库事务并发控制之封锁技术介绍(下)
数据库
xiezhr20 小时前
逛GitHub发现了一款免费的带AI功能的数据库管理工具
数据库·ai编程·dba
唐青枫2 天前
MySQL JSON 实战详解:从存储、查询、更新到 JSON_TABLE 与索引
sql·mysql
吃糖的小孩2 天前
给 QQ AI 机器人设计“可控记忆”:会话摘要、手动长期记忆与角色卡边界
数据库
小满8782 天前
5.Mysql事务隔离级别与锁机制
mysql
笃行3503 天前
金仓数据库数据安全双防线:静态存储加密与传输加密实战
数据库
笃行3503 天前
金仓数据库物理备份实战:sys_rman 全流程演练与误覆盖抢救
数据库
笃行3503 天前
金仓数据库逻辑备份实战:从全库导出到 Schema 替换的完整闭环
数据库
元Y亨H3 天前
技术笔记:MySQL 字符集排序规则与大小写敏感性问题解决方案
mysql