根本解决ERROR 1410 (42000): You are not allowed to create a user with GRANT

本文解析了MySQL中用户授权的常见问题及解决方法,强调了授权时用户名与主机名一致性的重要性,并通过实例展示了如何正确进行授权。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习mysql授权,遇到问题:

mysql> grant select on test.* to user6;
ERROR 1410 (42000): You are not allowed to create a user with GRANT

查到网上解决办法,很多是update user set host='%' ,,

也能体验到授权成功的感觉,感谢他们的分享.

mysql> update user set host='%' where user='user6';    更改主机
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> flush privileges;    //刷新
Query OK, 0 rows affected (0.00 sec)

mysql> grant select on test.* to user6;  //授权成功
Query OK, 0 rows affected (0.00 sec)

但初学者感觉没有讲透问题的产生根源,难道其它主机就不行么?--怎么可能不行!

实质问题是,授权语法不严谨导致.所授权的用户及其所在主机名,要与实际存在的用户及其主机名一致.

也就是说,如果已建用户是:user22@localhost,你要授权给user22@%,那肯定不行.必须一样才行.

举例说明:

mysql> create user user11 identified by '123';   //新建用户时没有指定主机,则默认为%
Query OK, 0 rows affected (0.00 sec)

mysql> grant select on test.* to user11;    //授权时没有指定主机,也是默认为%,所以可以
Query OK, 0 rows affected (0.00 sec)

建用户时用的啥,授权时要指定啥:
mysql> create user user12@localhost identified by '123';  //建用户时指定用户名及主机
Query OK, 0 rows affected (0.00 sec)

mysql> grant select on test.* to user12@localhost;    //授权时也要指明用户名和主机
Query OK, 0 rows affected (0.00 sec)

ok 


另可参看https://www.jianshu.com/p/98a6d42e28c8

欢迎留言,共同探讨/进步.

 

### 解决 MySQL ERROR 1410 (42000) 创建用户时权限不足的问题 #### 错误原因分析 在 MySQL 中遇到 `ERROR 1410 (42000): You are not allowed to create a user with GRANT` 的原因是当前执行此操作的账户缺乏足够的权限来创建新用户并授予其权限[^1]。 #### 验证现有权限 为了确认是否有权创建用户和分配权限,可以先查看当前用户的权限列表: ```sql SHOW GRANTS FOR CURRENT_USER; ``` 如果结果显示缺少必要的全局管理权限,则需要联系具有更高权限的管理员来进行下一步的操作。 #### 使用具备适当权限的账号登录 确保使用拥有足够权限(如 `CREATE USER`, `GRANT OPTION`)的超级用户或管理员身份连接到 MySQL 数据库服务器。通常情况下,默认安装后的 root 用户会自动获得这些特权。 #### 修改默认认证插件配置 对于 MySQL 8.0 版本及以上,默认的身份验证方式变更为 `caching_sha2_password` ,这可能导致某些客户端工具无法正常工作。可以通过修改 my.cnf 文件中的 `[mysqld]` 段落下的参数调整回旧版的安全算法: ```ini default_authentication_plugin=mysql_native_password ``` 重启服务使更改生效之后再尝试重新建立连接[^5]。 #### 正确命令格式示例 以下是正确创建用户并赋予特定数据库访问权限的例子: ```sql -- 创建新用户并指定密码 CREATE USER 'newuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; -- 授权该用户对某个具体数据库的所有操作权利 GRANT ALL PRIVILEGES ON databasename.* TO 'newuser'@'localhost'; ``` 注意,在这里并没有在一个单独的 SQL 语句里同时完成创建用户与授权的动作;而是分成了两个独立步骤处理。这样做不仅能够避免触发上述提到的那个错误提示,而且也更符合安全最佳实践的要求——即最小化每次变更所带来的影响范围[^2]。 #### 确认主机名一致性 另外需要注意的是,创建用户时所定义的主机地址应当与实际应用环境中用来发起请求的那一端相匹配。如果不一致的话可能会引起其他类型的权限验证失败问题。例如,如果是在本地测试环境内运行程序,则应该把 `'%'` 替换成 `'localhost'` 或者具体的 IP 地址[^4]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值