Mysql中使某个用户只能访问指定的数据库

本文介绍如何使用Navicat图形界面工具及MySQL命令行创建新用户,并为新用户分配特定数据库的访问权限。

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

1. 使用navicat 

1)首先使用root用户新建连接 

2)新建MySQL用户


3)点击权限,选择添加权限,出现MySQL中已存在的数据库列表,选择你要为该新建用户开放的数据库,此处选择“maibao”数据库,选择一些必要的权限信息(我这里进行了全部权限选择),确定


4)查看新建用户对数据库的操作权限,如下图 

5)很重要的一点,别忘记保存!

6)然后新建连接,输入用户名和密码,打开连接,则新建的那个用户只能看到为他分配的那个数据库


2.命令行实现 
1) 进入mysql的bin目录
[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. mysql -uusername -ppassword  

username为用户名,password为密码,一般创建用户的话,都使用 root用户

2)登录成功后,进入mysql数据库

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. use mysql  
3) 创建新用户
[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. CREATE USER 'test02'@'localhost' IDENTIFIED BY 'test';  
‘test02’为新创建用户的用户名,’test’为用户密码
4) 为新用户赋予权限
[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. GRANT SELECT, INSERT, UPDATE, REFERENCES, DELETE, CREATE, DROP, ALTER, INDEX, CREATE VIEW, SHOW VIEW ON `test`.* TO 'test02'@'localhost';  
ON后面的‘test’为数据库名,TO后面的 ‘test02’表示用户, ‘localhost’表示只能本地访问,如果 想让所有IP都可以访问,可以将localhost换成 ‘*’星号
5) 刷新权限
[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. flush privileges;  
参考链接:http://blog.youkuaiyun.com/u010514052/article/details/51104659
<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; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值