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
相关推荐
devmoon11 小时前
在 Polkadot Runtime 中添加多个 Pallet 实例实战指南
java·开发语言·数据库·web3·区块链·波卡
认真的薛薛11 小时前
数据库-sql语句
数据库·sql·oracle
爱学英语的程序员11 小时前
面试官:你了解过哪些数据库?
java·数据库·spring boot·sql·mysql·mybatis
·云扬·12 小时前
MySQL Redo Log落盘机制深度解析
数据库·mysql
用户9828630256812 小时前
pg内核实现细节
数据库
码界筑梦坊13 小时前
330-基于Python的社交媒体舆情监控系统
python·mysql·信息可视化·数据分析·django·毕业设计·echarts
飞升不如收破烂~13 小时前
Redis 分布式锁+接口幂等性使用+当下流行的限流方案「落地实操」+用户连续点击两下按钮的解决方案自用总结
数据库·redis·分布式
workflower13 小时前
业务需求-假设场景
java·数据库·测试用例·集成测试·需求分析·模块测试·软件需求
亓才孓13 小时前
[JDBC]基于三层架构和MVC架构的JDBCTools
数据库
IT邦德13 小时前
RPM包快速安装Oracle26ai
数据库·oracle