MySQL -e 创建用户权限不生效主因是引号混用导致SQL被shell截断,应统一用双引号包裹-e参数、内部SQL用单引号;5.7+版本GRANT后无需FLUSH PRIVILEGES;密码须通过600权限的~/.my.cnf配置文件安全传入。mysql -e 创建用户时权限不生效?检查 SQL 语句结尾和引号嵌套直接用 mysql -e 执行创建用户的 SQL,最容易出问题的是单引号、双引号混用导致语句被 shell 截断或转义。比如想执行:CREATE USER 'foo'@'%' IDENTIFIED BY 'pass123';,如果写成 mysql -e "CREATE USER 'foo'@'%' IDENTIFIED BY 'pass123';",shell 会把单引号当字面量处理,但中间的 @ 和 ; 可能被误解析。统一用双引号包裹整个 -e 参数,内部 SQL 用单引号(MySQL 标准),但需对内部单引号做转义: mysql -e "CREATE USER 'foo'@'%' IDENTIFIED BY 'pass123';" ?(注意:这里实际不需要转义,因为双引号内单引号不触发 shell 解析 ------ 但前提是没出现变量插值)如果脚本里用了变量(如 USER, PASS),必须用双引号 + 单引号组合,并确保变量内容不含 SQL 注入风险: mysql -e "CREATE USER '{USER}'@'%' IDENTIFIED BY '{PASS}';"更稳妥的做法是把 SQL 写进 here-document 或临时文件,避开引号博弈GRANT 后必须 FLUSH PRIVILEGES 吗?5.7+ 通常不用老教程总说 GRANT 之后要跟 FLUSH PRIVILEGES;,其实从 MySQL 5.7 开始,只要用标准 GRANT(不是直接改 mysql.user 表),权限会自动加载。手动 FLUSH 不但多余,还可能掩盖真正的问题 ------ 比如你 GRANT 的 host 不匹配,或者用户根本没创建成功。验证用户是否真建好了:运行 mysql -Nse "SELECT User,Host FROM mysql.user WHERE User='foo';"验证权限是否已分配:用 SHOW GRANTS FOR 'foo'@'%';(注意 host 必须完全一致)只在你手动 UPDATE/INSERT mysql.* 系统表后才需要 FLUSH PRIVILEGES;shell 脚本里怎么安全传密码?别硬编码,优先用配置文件把密码写死在脚本里或命令行参数中,会出现在 ps aux 或 bash history 里,极不安全。MySQL 支持 ~/.my.cnf 配置文件,且要求权限为 600,这是最常用也最靠谱的方式。 跃问 跃问是由阶跃星辰开发的免费AI智能问答助手,随时帮你智能搜索、高效阅读、识图理解、和你畅聊感兴趣的话题。
相关推荐
天赐范式6 分钟前
天赐范式第181天:让耦合开始失稳——竞争耦合与线性失稳边界Joe_Wang58 分钟前
【从0到1学习JVM · 15】对象在堆里来回倒腾,究竟怎样才会进老年代?深度智能Ai27 分钟前
IndexTTS‑2高清音质接口对接文档happylifetree32 分钟前
Python15:核心语法-数据存储与运算-字符串拼接香瓜子rd43 分钟前
MySQL InnoDB 并发控制核心原理:事务、隔离级别、MVCC 与锁机制Elastic 中国社区官方博客1 小时前
Elasticsearch Serverless 如何通过 hollow shards 将索引节点关闭次数降低 30%huisheng_qaq1 小时前
【Python基础篇-09】深入理解python的闭包与装饰器ycvv1 小时前
手机启动失败后的数据提取评估:系统状态、加密条件与文件验收小宋10212 小时前
SQL + RAG 混合问答实战:结构化指标与文档证据如何统一路由不恋水的雨2 小时前
gbase中union all导致末尾多出空格的坑