第九篇:SQL语法-DCL-数据控制语言

DCL英文全称是Data ControlLanquage(数据控制语言),用来管理数据库用户,控制数据库的访问权限

DCL主要包含两方面的操作,

  • 用户管理(控制哪些用户能访问数据库
  • 权限控制(控制用户能访问哪些数据库

一,管理用户

(一)查询用户

这个操作用来查看数据库中含有哪些用户,以及用户具有的权限

有两种方式查询用户:

1.在图形化管理工具中找到【mysql 】数据库下的【user】表,该表记录的就是用户信息

2.使用两条命令进行查询,本质也是对【mysql 】数据库下的【user】表进行查询

sql 复制代码
use mysql;
select * from user;

可以看到默认情况下数据库中存在下图中的四个用户,其中的root用户我们不陌生

在user表中,前两个字段分别是【Host 】和【User】,在MySQL中,对一个用户的创建、删除需要靠这两个字段的数据来准确定位一个用户

User 】即用户名,而【Host 】的含义是主机,表示该用户只能在哪个主机上访问MySQL服务器,例如localhost表示只能从主机上访问

(二)创建用户

使用如下命令可以创建一个用户,其中【"用户名" 】用来给用户定义名称,【"主机名" 】用来规定该用户必须在哪个主机上才能访问MySQL服务器,【"密码"】是该用户连接MySQL服务器时需要输入的密钥,例如root数据库的默认密码就是root

两个特殊主机:

  • localhost:本机
  • %:百分号是主机名的通配符,代表所有主机均可访问
sql 复制代码
create user "用户名"@"主机名" identified by "密码";

创建用户命令测试------

新用户默认是没有权限访问其它数据库的,需要本篇的【二,权限控制】相关操作给予用户相关权限,下图是cmd命令行窗口下对root用户和新用户的数据库访问权限测试证明了这一点

(三)修改用户密码

使用如下命令可以修改命名的密码

(注:<尖括号>内的内容是可选项,身份插件是一种用于身份验证和授权的插件,它允许MySQL服务器使用不同的方式验证用户身份。这些插件可以根据特定的需求和安全策略来配置,包括基于密码、SSL证书、操作系统凭据等的验证方式,如果使用命令时不填写此参数,则因MySQL版本而异会选择不同的身份插件,不是重点,这里做个简单了解,感兴趣者自行查阅)

sql 复制代码
alter user "用户名"@"主机名" identified <with 身份插件> by "新密码";

常用身份插件:

  • mysql_native_password
  • sha256_password
  • caching_sha2_password

详细解释见本篇->

MySQL身份验证插件(mysql_native_password、sha256_password、caching_sha2_password)-CSDN博客

修改用户密码命令测试------

(四)删除用户

使用如下命令删除用户

sql 复制代码
drop user "用户名"@"主机名";

删除用户命令测试------

(五)测试命令提供

sql 复制代码
CREATE USER "新用户"@"localhost" IDENTIFIED BY "1234"; #创建新用户
SELECT * FROM USER; #查询用户,注意该命令要在mysql数据库下执行
ALTER USER "新用户"@"localhost" IDENTIFIED BY "123456"; #修改密码为123456

DROP USER "新用户"@"localhost"; #删除用户
SELECT * FROM USER; #删除后查询user表验证成功删除

二,权限控制

在本篇的【一.(二)】已经提过,新用户默认是没有权限访问其它数据库的,需要权限控制相关操作给予用户相关权限

常用的DCL权限控制操作有如下三类,

  • 查询权限
  • 授予权限
  • 撤销权限

(附)常用权限表

|------------------------|----------------|
| 权限 | 说明 |
| ALL/ALL PRIVILEGES | 所有权限 |
| SELECT | 查询数据 |
| INSERT | 插入数据 |
| UPDATE | 修改数据 |
| DELETE | 删除数据 |
| ALTER | 修改表 |
| DROP | 删除数据库/表/视图 |
| CREATE | 创建数据库/表 |

(一)查询权限

使用如下命令查询用户权限

sql 复制代码
show grants for "用户名"@"主机名";

查询权限命令测试------

(二)授予权限

使用如下命令授予用户权限,权限列表 在本篇【二.(附)】已经给出

sql 复制代码
grant 权限列表 on 数据库名.表名 to "用户名"@"主机名";

授予权限命令测试------

在授予"测试用户"权限之前,先使用cmd窗口查看一下该用户能访问的数据库,除了默认的【information_schema】就没其它的了

现在使用命令授予该用户一些权限去操作【test 】数据库下的【emp】表

此时在回到cmd窗口,查看一下该用户能访问的数据库,发现test数据库被添加进来了

(三)撤销权限

使用如下命令撤销用户权限,权限列表 在本篇【二.(附)】已经给出

sql 复制代码
revoke 权限列表 on 数据库名.表名 from "用户名"@"主机名";

撤销权限命令测试------


三,测试

本篇内容相对简单,且已经在命令介绍过程中给出相关测试验证,故不再做多余测试,读者自行多多验证、熟练命令即可

相关推荐
Σίσυφος19004 小时前
PCL法向量估计 之 方向约束法向量(Orientation Guided Normal)
数据库
老毛肚4 小时前
手写mybatis
java·数据库·mybatis
海山数据库4 小时前
移动云大云海山数据库(He3DB)postgresql_anonymizer插件原理介绍与安装
数据库·he3db·大云海山数据库·移动云数据库
l1t4 小时前
DeepSeek总结的PostgreSQL的GPT推理SQL移植到DuckDB的性能优化方法
sql·gpt·postgresql
云飞云共享云桌面4 小时前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
2501_927993534 小时前
SQL Server 2022安装详细教程(图文详解,非常详细)
数据库·sqlserver
星火s漫天4 小时前
第一篇: 使用Docker部署flask项目(Flask + DB 容器化)
数据库·docker·flask
xcLeigh4 小时前
Python 项目实战:用 Flask 实现 MySQL 数据库增删改查 API
数据库·python·mysql·flask·教程·python3
威迪斯特4 小时前
Flask:轻量级Web框架的技术本质与工程实践
前端·数据库·后端·python·flask·开发框架·核心架构
xu_yule4 小时前
Redis存储(15)Redis的应用_分布式锁_Lua脚本/Redlock算法
数据库·redis·分布式