创建普通用户前必须先用root登录,因mysql默认仅含root用户;需用create user和grant分步创建并授权,严禁直接操作mysql.user表,且须执行flush privileges生效权限。

创建普通用户前必须先登录 root
MySQL 安装完默认只有 root 用户(且通常无密码或仅本地可连),必须用它登录才能创建其他用户。常见错误是直接用未授权的用户名尝试连接,报错 Access denied for user 'xxx'@'localhost' —— 这说明还没建用户,不是密码错了。
用命令行登录:
mysql -u root -p如果安装时没设 root 密码,可能直接回车;若提示拒绝,检查是否启用了 socket 认证(如 Ubuntu 的
auth_socket 插件),此时需先用 sudo mysql 进去再改。
用 CREATE USER + GRANT 分两步建用户最安全
别用过时的 INSERT INTO mysql.user 直接写表,权限逻辑复杂,容易漏刷新或配错 host。标准做法是:
-
CREATE USER 'devuser'@'localhost' IDENTIFIED BY 'strong_pass123';—— 指定只允许本机连接 -
GRANT SELECT, INSERT ON myapp.* TO 'devuser'@'localhost';—— 只给业务库myapp的读写,不给mysql系统库 -
FLUSH PRIVILEGES;—— 必须执行,否则权限不生效(尤其在修改系统表后)
注意 'devuser'@'localhost' 和 'devuser'@'%' 是两个不同用户,后者允许任意 IP 连接,生产环境慎用。
常见权限误配:ALL PRIVILEGES ≠ 安全
新手常写 GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost';,这等于给了 DROP DATABASE、SHUTDOWN、FILE 等高危权限,一旦应用被注入或配置泄露,整个 MySQL 实例可能被清空或提权。
网亚Net!B2C商城系统,是创想商务拥有独立产权自主开发,基于WEB应用的B/S架构B2C网上商城系统,主要面向企业或个人构建单用户商城提供友好的解决方案,最大化满足客户目前及今后的独立商城应用需求。该系统运行于微软公司的.NET 平台,采用ASP.NET 3.x技术进行分层开发。特色功能如下1、一键式的在线安装操作;2、完善的标签模板技术;3、静态HTML页面生成;4、自主SEO优化推广;5、
更合理的做法是按最小权限原则:
- Web 应用一般只需
SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES - 后台管理工具可能额外需要
SHOW VIEW或EXECUTE(存过) - 绝对避免给
GRANT OPTION,除非你明确要让该用户转授权限
查当前用户权限用:SHOW GRANTS FOR 'devuser'@'localhost';
连接测试与 host 匹配问题
创建完用户后,立刻换账号测试:
mysql -u devuser -p -h 127.0.0.1注意这里用
-h 127.0.0.1 而非 -h localhost —— 前者走 TCP/IP,后者在 Linux 上默认走 socket,而 'user'@'localhost' 和 'user'@'127.0.0.1' 在 MySQL 权限系统里是两个独立条目。
如果报 Host 'xxx' is not allowed to connect,说明用户定义的 host 不匹配当前连接方式。解决方法要么补一个对应 host 的用户(如 CREATE USER 'devuser'@'127.0.0.1'),要么统一用通配符 'devuser'@'%'(仅限可信内网)。
host 匹配优先级很关键:MySQL 会从最具体的 host 开始匹配(如 'user'@'192.168.1.100' > 'user'@'192.168.1.%' > 'user'@'%'),但不会自动 fallback,写错就真连不上。









