grant User 使用

本文介绍如何在MySQL中创建用户并授予权限,使用户仅能从特定IP访问指定数据库。同时解决因主机名解析导致的权限问题,并提供删除用户的方法。

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

创建一个新的用户 并授予权限:

该用户可以访问test数据库的所有表。但是只能从指定ip(主机)访问

mysql> grant all on test.* to 'admin'@'172.72.101.42'  identified by '123';
Query OK, 0 rows affected (0.00 sec)

查看指定用户的权限 show grants

mysql> show grants for admin@172.72.101.42;
+------------------------------------------------------------------------------------------------------------+
| Grants for
admin@172.72.101.42                                   |
+------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO
'admin'@'172.72.101.42' IDENTIFIED BY PASSWORD '*23A....A265E05AA257' |
| GRANT ALL PRIVILEGES ON `test`.* TO
'admin'@'172.72.101.42'                                   |
+-----------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

 ===============================

但是在使用 admin 创建 表的时候却抛出如下error。   本机 ip 与 host名 “转换” 了???

解决办法:

C:/WINDOWS/system32/drivers/etc

 下面有一个 hosts 文件:  添加一下主机与ip的映射

172.72.101.42  MS135129

mysql> create table test.user (username varchar(20), password varchar(20));
ERROR 1142 (42000): CREATE command denied to user
'admin'@'MS135129' for table '
user'

===============================

删除 用户:

drop user admin@'172.72.101.42' 

<think>嗯,用户遇到了MySQL权限配置问题,具体是"GRANT command denied to user"错误。从用户提供的信息来看,这个问题通常发生在普通用户尝试执行GRANT操作时没有相应权限。 用户可能正在尝试管理数据库权限,但遇到了阻碍。这类错误在MySQL权限管理中很常见,特别是当非root用户尝试授权时。用户应该是个数据库管理员或开发人员,正在设置用户权限。 从引用内容看,有几个关键点需要注意: 引用[1]提到这是权限不足的典型表现 引用[2]展示了具体错误信息,并暗示需要用root用户操作 引用[3]给出了授权语法的示例 引用[4]则展示了成功的授权操作流程 用户的核心需求应该是解决这个权限错误,同时可能也想了解如何正确配置权限。考虑到用户引用了多个相关案例,说明ta可能已经尝试过一些方法但未成功。 需要重点解释: 为什么会出现这个错误 如何用root账户正确授权 授权后的权限刷新操作 特别要注意提醒用户避免常见错误点,比如忘记刷新权限 另外,用户可能对MySQL的权限层级概念不太清楚,需要解释清楚*.*的含义。从引用[3]看,用户可能还需要了解存储过程和函数的特殊授权方式。 在解决方案中,要强调必须用root账户操作这个关键点,因为这是新手最容易出错的地方。同时要给出完整的授权命令示例,包括必要的刷新步骤。 最后准备的相关问题应该覆盖权限管理的其他常见场景,比如只读权限设置、权限回收等,这些都是用户接下来可能需要的知识。</think>MySQL 出现 `ERROR 1142 (42000): GRANT command denied to user 'username'@'host'` 错误,表示**当前登录的用户缺乏执行 `GRANT` 命令的权限**。只有拥有足够权限的用户(通常是 `root` 或具有 `GRANT OPTION` 权限的用户)才能给其他用户授权。 **根本原因:** * **权限不足:** 当前执行 `GRANT` 命令的用户自身没有被授予 `GRANT OPTION` 权限(或更高级别的权限如 `ALL PRIVILEGES`),无法将其拥有的权限授予其他用户[^1][^2]。 * **尝试授予超出自身权限:** 用户尝试授予其他用户的权限,超出了该用户自身所拥有的权限范围。 **解决方案 (必须使用 `root` 用户或具有 `SUPER`/`GRANT OPTION` 权限的用户操作):** 1. **使用高权限用户登录:** * 停止当前低权限用户的会话。 * 使用 `root` 用户或已知具有足够权限的用户登录 MySQL: ```bash mysql -u root -p # 然后输入 root 密码 ``` 或者 ```bash mysql -u privileged_user -p # 输入该高权限用户的密码 ``` 2. **授予目标用户所需权限 (并包含 GRANT OPTION):** * 假设你想让用户 `'username'@'host'` 拥有对数据库 `your_database` 的所有表 (`*`) 的所有权限 (`ALL PRIVILEGES`),并且允许该用户将自己拥有的权限授予他人 (`WITH GRANT OPTION`): ```sql GRANT ALL PRIVILEGES ON your_database.* TO 'username'@'host' WITH GRANT OPTION; ``` * 如果只想授予特定权限(如 `SELECT`, `INSERT`, `UPDATE`, `DELETE`)和 `GRANT OPTION`: ```sql GRANT SELECT, INSERT, UPDATE, DELETE ON your_database.* TO 'username'@'host' WITH GRANT OPTION; ``` * **关键点:** `WITH GRANT OPTION` 子句允许 `'username'@'host'` 将其拥有的权限授予其他用户。如果省略此子句,该用户将无法执行 `GRANT` 命令[^1][^3]。 3. **立即刷新权限:** * 执行 `GRANT` 语句后,**必须**刷新 MySQL 的权限缓存使其生效: ```sql FLUSH PRIVILEGES; ``` 4. **验证:** * 退出高权限用户会话。 * 使用 `'username'@'host'` 重新登录 MySQL。 * 尝试执行之前报错的 `GRANT` 命令,看是否成功。 **其他注意事项:** * **作用域 (`*.*` vs `db.*` vs `db.table`):** 权限作用域非常重要。`GRANT ... ON *.*` 授予全局权限(所有数据库的所有表),`GRANT ... ON your_database.*` 授予 `your_database` 数据库的所有表权限,`GRANT ... ON your_database.your_table` 授予特定表的权限。确保你授予的权限作用域符合你的管理需求[^3][^4]。 * **用户标识 (`'user'@'host'`):** MySQL 将用户名和连接来源主机 (`host`) 组合起来作为一个完整的用户标识。`'username'@'localhost'` 和 `'username'@'%'`(`%` 表示任意主机)是两个不同的用户。确保你在 `GRANT` 命令中使用的 `'username'@'host'` 与尝试执行操作的用户标识完全匹配[^1][^2][^4]。 * **存储过程/函数权限:** 如果错误涉及对存储过程或函数的 `EXECUTE` 权限(如引用[3]所示),授权语法稍有不同: ```sql GRANT EXECUTE ON PROCEDURE your_database.your_procedure TO 'username'@'host'; -- 或 GRANT EXECUTE ON FUNCTION your_database.your_function TO 'username'@'host'; ``` 同样需要 `FLUSH PRIVILEGES;`。 **总结步骤:** 1. **高权登录:** 用 `root` 或具有 `GRANT OPTION` 的用户登录 MySQL。 2. **正确授权:** 使用 `GRANT ... TO 'user'@'host' WITH GRANT OPTION;` 语句授予目标用户必要的权限**和**授权能力。 3. **刷新权限:** 执行 `FLUSH PRIVILEGES;`。 4. **测试验证:** 用目标用户登录并重试之前的 `GRANT` 操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值