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
相关推荐
zhangyifang_00911 小时前
ClickHouse查询报错:Code: 62. DB::Exception: Max query size exceeded:
数据库·clickhouse
2301_7887560611 小时前
Python在2024年的主要趋势与发展方向
jvm·数据库·python
uoKent12 小时前
MySQL示例数据库
数据库·mysql
麦聪聊数据12 小时前
利用SQL2API模式重构微服务中的数据查询层
数据库·sql·低代码·微服务·架构
x70x8012 小时前
# Docker 搭建 MySQL 8 主从复制(踩坑实录 + 完整验证)
mysql·docker·容器
占疏12 小时前
数据库-BRIN 索引
数据库·mysql
u01092727112 小时前
Python虚拟环境(venv)完全指南:隔离项目依赖
jvm·数据库·python
m0_6860416112 小时前
Python类型提示(Type Hints)详解
jvm·数据库·python
晚风_END12 小时前
postgresql数据库|pgbouncer连接池压测和直连postgresql数据库压测对比
数据库·postgresql·oracle·性能优化·宽度优先
三水不滴12 小时前
Redis 持久化机制
数据库·经验分享·redis·笔记·缓存·性能优化