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智能问答助手,随时帮你智能搜索、高效阅读、识图理解、和你畅聊感兴趣的话题。
相关推荐
不会写DN9 小时前
PyScript-GitHubRepo:构建高性能GitHub仓库批量下载工具的技术实践SilentSamsara10 小时前
生成器完全指南:`yield` 与惰性求值的工程价值A-刘晨阳16 小时前
AI原生时序数据库选型指南:从数据存储到智能决策的范式跃迁HalvmånEver17 小时前
MySQL的增删改查命令合集合集不剪发的Tony老师18 小时前
dblab:一款基于终端的交互式数据库客户端YJlio18 小时前
7.4.5 Windows 11 企业网络连接与网络重置实战:远程访问、本地策略与故障恢复深耕AI18 小时前
【VS Code避坑指南】点击Python图标提示“没有Python环境”,选择安装uv后这堆输出到底是什么意思?第一程序员18 小时前
Rust生命周期管理实战指南:从困惑到掌握程序员威哥18 小时前
实战!Python爬京东商品评论:从采集到情感分析+词云可视化,新手30分钟跑通风噪18 小时前
centos7 python3.13全套安装(可用于离线复制)