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智能问答助手,随时帮你智能搜索、高效阅读、识图理解、和你畅聊感兴趣的话题。
相关推荐
CoderYanger10 小时前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第二弹)wafrdggh12 小时前
2026电商快递批量查询怎么用?固乔助手模板设置评测一个天蝎座 白勺 程序猿13 小时前
KingbaseES数据库归档重做日志文件管理:从配置到运维的实战指南特立独行的猫A14 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢cpolar技术支持14 小时前
「我这边连不上你那个服务」—— 用清单驱动的 TCP 连通性只读看板,cpolar 让远端同事自己取证云和数据.ChenGuang14 小时前
LangGraph 异步 Node 的设计与写法实践金銀銅鐵15 小时前
同一个 Hello World,Kotlin 和 Java 在字节码层面差在哪天诰15 小时前
SA-K-11 检索会消失吗与四个未解问题龙腾AI白云16 小时前
仿真到现实(Sim-to-Real)迁移:跨越仿真与现实鸿沟benchmark_cc16 小时前
用 QuantDash 读取美股行情:AAPL.US 的运行前检查、排错顺序与数据校验清单