抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

摘要:本文学习了如何使用DCL语句管理用户权限。

环境

Windows 10 企业版 LTSC 21H2
MySQL 5.7.40

1 简介

1.1 用户

用户指的是操作和使用数据库的人,使用数据库需要用户先通过用户名和密码进行连接,然后才能进行操作,不同的用户可以设置不同的权限。

在MySQL数据库中,所有的用户信息都保存在user表中。

1.2 权限

权限用来控制用户对数据库的操作,可以限制用户只能访问特定的数据,或者只能执行特定的操作。

2 操作

2.1 查看用户

查看user表的结构:

sql
1
2
3
4
5
6
7
8
9
10
11
mysql> desc user;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| ... | ... | ... | ... | | |
+-------+----------+------+-----+---------+-------+
45 rows in set (0.00 sec)

mysql>

在MySQL数据库中,对用户的管理是通过对应的Host和User共同组成的主键来区分的。

其中,User代表用户的用户名,Host代表允许访问的客户端地址(IP地址或者是主机地址),使用*表示所有的客户端都可以访问。

查询user表数据:

sql
1
2
3
4
5
6
7
8
9
10
mysql> select host, user, password from user;
+-----------+------+
| host | user |
+-----------+------+
| localhost | root |
| ... | ... |
+-----------+------+
3 rows in set (0.00 sec)

mysql>

在安装MySQL数据库的时候,如果没有创建匿名用户,那么在user表里只有一个root用户。

在创建新用户或更改密码后需要使用flush privileges;命令刷新权限相关表,否则会出现拒绝访问。也可以重新启动数据库使新设置生效。

2.2 创建用户

语法:

sql
1
create user 用户名@主机地址 identified by 明文密码;

说明:

  • 省略@主机地址表示任何IP地址都可以使用这个用户。
  • 省略identified by 明文密码表示不需要密码就可以登录。

示例:

sql
1
2
3
4
mysql> create user 'test' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql>

2.3 删除用户

语法:

sql
1
drop user 用户名@主机地址;

示例:

sql
1
2
3
4
mysql> drop user 'test';
Query OK, 0 rows affected (0.00 sec)

mysql>

2.4 修改密码

语法:

sql
1
alter user 用户名@主机地址 identified by 明文密码;

示例:

sql
1
2
3
4
mysql> alter user 'test' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql>

2.5 用户授权

语法:

sql
1
grant 权限列表 on 库名.表名 to 用户名@主机地址 indentified by 明文密码 [with grant option] [with admin option]

说明:

  • 使用with grant option授权,在取消时会撤销连带的权限。
  • 使用with admin option授权,在取消时会保留连带的权限。

示例:

sql
1
2
grant all on *.* to 'test' identified by '123456' with grant option;
grant select (id, name) on demo.test to 'test';

2.6 取消授权

语法:

sql
1
revoke 权限列表 on 库名.表名 from 用户名@主机地址

示例:

sql
1
2
3
4
mysql> revoke all on *.* from 'test';
Query OK, 0 rows affected (0.00 sec)

mysql>

评论