MySQL-DCL数据控制语言简要介绍
- 一、简介
- 二、用户操作
- 1、创建用户
- 2、修改用户密码
- 3、删除用户
- 三、权限控制
- 1、权限说明
- 2、显示用户权限
- 3、授予权限
- 4、撤销权限
一、简介
在MySQL中,DCL代表数据控制语言(Data Control Language)。DCL用于管理数据库用户和控制数据的访问权限。一些常见的DCL命令包括:
- GRANT:授予访问权限,允许用户执行特定的操作,如查询、更新、插入和删除数据。
- REVOKE:撤销访问权限,从用户处删除已经授予的权限。
- COMMIT:提交事务处理,保存更改并结束当前事务。
- ROLLBACK:事务处理回退,撤销事务中的所有更改并返回到事务开始的状态。
- SAVEPOINT:设置保存点,用于在事务中设置一个保存点,以便在出现问题时可以返回到这个保存点。
- LOCK:对数据库的特定部分进行锁定,防止其他用户在此期间更改数据。
这些命令可以帮助您控制谁可以访问您的数据库以及他们可以访问哪些数据。
二、用户操作
1、创建用户
创建用户的语法如下所示
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
本地主机主机名为localhost
,但如果希望任意主机都能访问mysql
时,把上面的主机名写为%
即可,如下所示。
CREATE USER '用户名'@'%' ;
我创建一个名为test的用户后,在navicat中查看用户如下所示:
可以看到创建用户后,test用户的所有权限列为N。也就是说新建用户后,该用户不具有权限,需要授权后使用。
2、修改用户密码
修改用户密码的语法格式如下所示:
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
tips:
- 在MySQL中,mysql_native_password是一个密码插件,用于验证用户的身份。它允许用户使用简单的密码登录MySQL服务器,而无需使用更安全的加密算法。
- mysql_native_password插件使用一种称为“明文存储”的方法来存储密码。这意味着密码是以明文形式存储在数据库中的,而不是加密后的形式。这使得密码容易受到攻击和破解,因此不再推荐使用mysql_native_password插件。
- 在MySQL 8.0及更高版本中,mysql_native_password插件已被弃用,并被更安全的
caching_sha2_password
插件取代。如果您的MySQL服务器仍在使用mysql_native_password插件,建议您升级到caching_sha2_password
插件,以提高安全性。
示例
alter user 'test'@'localhost' identified with mysql_native_password by '123'
alter user 'test'@'localhost' identified with caching_sha2_password by '123'
3、删除用户
语法如下所示
DROP USER '用户名'@'主机名';
三、权限控制
在MySQL中常用的权限有以下几种:
1、权限说明
- ALL,ALL PRIVILEGES 所有权限
- SELECT 查询数据
- INSERT 插入数据
- UPDATE 修改数据
- DELETE 删除数据
- ALTER 修改表
- DROP 删除数据库/表/视图
- CREATE 创建数据库/表
tips:
多个权限之间,使用逗号分隔,授权时,数据库名和表名可以使用*
进行通配,代表所有,如下所示:
mysql.* 表示mysql库的任意表
#把数据库的所有库的所有权限都给test,并且是任意主机都可以操作
grant all privileges on *.* to 'test'@'%';
2、显示用户权限
显示用户权限语法如下
show grants for 'test'@'localhost'
3、授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
GRANT ALL ON db.students TO 'test'@'localhost'; #给用户test授予db数据库中的students数据表全部权限
SHOW GRANTS FOR 'test'@'localhost'; #查询用户权限
4、撤销权限
撤销权限语法格式如下:
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
示例代码如下:
REVOKE ALL ON db.students FROM 'test'@'localhost'; #用户test撤销db数据库中的students数据表全部权限
SHOW GRANTS FOR 'test'@'localhost'; #查询用户权限