Mysql指定用户从指定/任意IP访问

本文详细解析了MySQL中1130访问拒绝错误,通过检查默认用户、修改root用户host为%并授权,解决服务器上MySQL数据库的远程连接问题。

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

前言:

服务器上的mysql的数据库端口一定是可以被访问的,如果服务器上有防火墙,需要允许该端口被访问,mysql的默认端口通常是3306。
如果不能被访问,会报如下错误:
在这里插入图片描述

正文:

一、拒绝访问(错误代码:1130)

1130-Host'192.168.5.100' is not allowed to connent to this MySQL server.

二、解决方案

2.1 查看Mysql 8.0 默认用户情况

mysql> select host,user from user;  --查询用户及其对应的访问授权地址
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
4 rows in set (0.00 sec)

2.2 修改指定用户的host

mysql> update user set host='%' where user='root';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

特别注意: % 是sql语言中的通配符,这里就表示任意ip的root用户都可以访问

2.3 完成指定用户的访问授权

<think>我们正在讨论如何设置MySQL 5.7用户权限,使其只能访问指定的表。根据引用内容,我们知道MySQL 5.7的权限管理是通过几个表来实现的:user, db, tables_priv, columns_priv, procs_priv。我们的目标是限制用户只能访问特定的表,因此我们需要在表级别上授予权限。 步骤: 1. 创建用户(如果用户不存在)。 2. 授予用户对特定数据库的特定表的访问权限。 3. 刷新权限。 注意:在MySQL 5.7中,密码字段是authentication_string(引用[3])。 具体操作: 假设我们有一个数据库名为`mydb`,我们想让用户`myuser`只能访问表`mytable1`和`mytable2`。 第一步:创建用户 ```sql CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword'; ``` 第二步:授予权限 我们使用`GRANT`语句来授予对特定表的权限。例如,我们授予`SELECT`和`INSERT`权限(根据实际需要调整): ```sql GRANT SELECT, INSERT ON mydb.mytable1 TO 'myuser'@'localhost'; GRANT SELECT, INSERT ON mydb.mytable2 TO 'myuser'@'localhost'; ``` 注意:如果要授予所有权限,可以使用`ALL PRIVILEGES`,但这里我们只希望用户访问指定表,所以只授予必要的权限。 第三步:刷新权限 ```sql FLUSH PRIVILEGES; ``` 这样,用户`myuser`就只能访问`mytable1`和`mytable2`,并且只能执行被授予的操作(如上面的SELECT和INSERT)。 验证:我们可以使用以下命令查看该用户的权限: ```sql SHOW GRANTS FOR 'myuser'@'localhost'; ``` 另外,根据引用[2]和引用[4],我们应该遵循最小权限原则,即只授予必要的权限。这里我们只授予了特定表的特定权限,符合最小权限原则。 注意:如果用户需要访问多个表,需要为每个表单独授权,或者使用通配符(但通配符可能会授予多个表,所以不精确)。因此,我们建议明确指定每个表。 如果用户已经存在,我们可以跳过创建用户的步骤,直接授权。同时,如果需要撤销权限,可以使用`REVOKE`命令。 引用[1]和[3]提醒我们,MySQL 5.7的用户表结构有所变化,密码字段是`authentication_string`,在创建用户时使用`IDENTIFIED BY`设置密码即可。 总结:通过上述步骤,我们可以实现用户只能访问指定表。 相关问题: 1. 如何撤销MySQL用户的某个表的权限? 2. 如何查看MySQL用户的权限? 3. 如何修改MySQL用户的密码? 4. 如何删除MySQL用户?</think>### MySQL 5.7 配置用户权限:限制访问指定表 在 MySQL 5.7 中,通过精细的权限控制可实现用户访问特定表的需求。以下是具体操作步骤: #### 1. **创建新用户** ```sql CREATE USER 'limited_user'@'localhost' IDENTIFIED BY 'your_password'; ``` > 📌 使用强密码替换 `your_password`,`localhost` 可替换为允许访问IP 或 `%`(任意主机)[^3]。 #### 2. **授予特定表权限** ```sql GRANT SELECT, INSERT, UPDATE ON your_database.specific_table TO 'limited_user'@'localhost'; ``` - **权限说明**: - `SELECT`:允许查询数据 - `INSERT`:允许插入数据 - `UPDATE`:允许更新数据 - 按需添加/删除操作权限(如 `DELETE`) - **关键参数**: - `your_database`:目标数据库名 - `specific_table`:允许访问的表名 - 多表授权需重复执行此命令[^1][^2] #### 3. **刷新权限生效** ```sql FLUSH PRIVILEGES; ``` #### 4. **验证权限** ```sql SHOW GRANTS FOR 'limited_user'@'localhost'; ``` 输出应仅包含指定表的权限,例如: ```sql GRANT USAGE ON *.* TO 'limited_user'@'localhost' GRANT SELECT, INSERT, UPDATE ON `your_database`.`specific_table` TO 'limited_user'@'localhost' ``` #### ⚠️ 注意事项 1. **最小权限原则** 避免授予 `ALL PRIVILEGES` 或数据库级权限(如 `GRANT ... ON your_database.*`),精确到表级[^4]。 2. **权限表变更** MySQL 5.7 使用 `authentication_string` 字段存储密码,而非旧版的 `password` 字段[^3]。 3. **权限层级控制** 通过 `tables_priv` 表管理表级权限(需直接操作权限表时)[^1]。 --- ### 示例场景 **需求**:用户 `report_user` 仅能查询 `sales_db` 数据库的 `orders` 表 ```sql CREATE USER 'report_user'@'%' IDENTIFIED BY 'SecurePass123!'; GRANT SELECT ON sales_db.orders TO 'report_user'@'%'; FLUSH PRIVILEGES; ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值