MySQL5.7 添加用户/删除用户/授权/设置密码/更改密码/删除用户/查看授权

本文详细介绍了如何在MySQL5.7中进行用户管理,包括创建用户、授权、设置和更改密码、撤销权限、删除用户以及查看用户授权的步骤和命令。对于每个操作,都给出了具体的SQL命令示例,帮助读者掌握MySQL用户管理和权限控制的基本方法。
一. 创建用户:

命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';

例子: CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';

CREATE USER 'dog2'@'localhost' IDENTIFIED BY '';
  • PS:username - 你将创建的用户名,

  • host - 指定该用户在哪个主机上可以登陆,此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录,如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录;也可以指定某台机器可以远程登录;

  • password - 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器。

二.授权:

命令:

GRANT privileges ON databasename.tablename TO 'username'@'host'
  • PS: privileges - 用户的操作权限,如SELECT , INSERT , UPDATE 等(详细列表见该文最后面).如果要授予所的权限则使用ALL.;databasename - 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示, 如.*.

  • 例子: GRANT SELECT, INSERT ON mq.* TO 'dog'@'localhost';

三.创建用户同时授权

mysql> grant all privileges on mq.* to test@localhost identified by '1234';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

  • PS:必须执行flush privileges;

  • 否则登录时提示:ERROR 1045 (28000): Access denied for user ‘user’@‘localhost’ (using password: YES )

四.设置与更改用户密码

命令:SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');

例子: SET PASSWORD FOR 'dog2'@'localhost' = PASSWORD("dog");

五.撤销用户权限
  命令: `REVOKE privilege ON databasename.tablename FROM 'username'@'host';`
  • 说明: privilege, databasename, tablename - 同授权部分.

  • 例子: REVOKE SELECT ON mq.* FROM 'dog2'@'localhost';

  • PS: 假如你在给用户’dog’@‘localhost’'授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO ‘dog’@‘localhost’, 则在使用REVOKE SELECT ON . FROM ‘dog’@‘localhost’;命令并不能撤销该用户对test数据库中user表的SELECT 操作.相反,如果授权使用的是GRANT SELECT ON . TO ‘dog’@‘localhost’;则REVOKE SELECT ON test.user FROM ‘dog’@‘localhost’;命令也不能撤销该用户对test数据库中user表的Select 权限.

    - 具体信息可以用命令`SHOW GRANTS FOR 'dog'@'localhost';` 查看.
    
六.删除用户
  • 命令:
DROP USER 'username'@'host';
七.查看用户的授权

mysql> show grants for dog@localhost;
±--------------------------------------------+
| Grants for dog@localhost |
±--------------------------------------------+
| GRANT USAGE ON . TO ‘dog’@‘localhost’ |
| GRANT INSERT ON mq.* TO ‘dog’@‘localhost’ |
±--------------------------------------------+
2 rows in set (0.00 sec)

  • PS:GRANT USAGE:mysql usage权限就是空权限,默认create user的权限,只能连库,啥也不能干
<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`,并且只能执行被授予的操作(如上面的SELECTINSERT)。 验证:我们可以使用以下命令查看用户的权限: ```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、付费专栏及课程。

余额充值