MySQL数据库语言三、DCL语句

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE

前言


DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE


DCL语句


权限级别

Global level:所有库,所有表的权限。

Database level:某个数据库中的所有表的权限。

Table level:库中的某个表的权限

Column level:表中的某个字段,的权限。


MySQL用户管理

用户管理这次主要从创建用户、删除用户、修改用户密码来介绍,以及介绍怎么不登录数据库来对数据库进行操作。


创建用户

首先登录到MySQL。

mysql  -uroot   -p'root密码';

语法:create  user    用户名@客户端IP   identified  by   '用户登录密码';

create user sure1@localhost   identified by 'Sure.520';        //创建用户sure1.

sure1:创建的用户的用户名。

localhost:这里是创建本机登录的账号所以填了localhost,也可以填本机ip,如果是创建给客户机登录这里需要填的是客户端的IP。

identified  by :这是关键字后面跟空格加密码

创建好的用户会被记录到mysql库中的user表中。可以通过use mysql进入到mysql库,然后通过show tables;可以看到有user表。


81cd776e45614c9faf6f0d747853915f.png


创建好之后可以通过查看user表的内容来查找到我们刚刚创建的用户。

select user from user;

因为user表中记录了很多内容,只看user列的信息看到刚刚创建的用户sure1在这里可以查到。


11bd150d6ee0456e959840165a04960d.png


删除用户

语法:drop   user   用户名@客户机ip;

删除刚刚创建的sure1用户。

drop   user   sure1@localhost;


9aeec2f9f7e8491a9505760f5838477d.png


删除之后,通过查询user表的信息没有sure1,说明删除成功。


修改密码

这里通过修改root密码来进行操作。

修改密码有两种方式:

1、不登录mysql修改密码(在部署MySQL的时候修改默认root密码使用的方法)

2、登录mysql修改密码。还可以通过修改user表来修改密码。


不登录mysql来修改root密码


语法:mysqladmin  -uroot    -p'旧root密码'    password   '新的root密码'

注意:-p后面紧跟旧密码没有空格,password后面需要跟个空格再写新的密码。

我原本的密码是Sure.520,现在修改为Sure.123

输入完命令后如果没有ERROR提示出现就算成功了。

修改完之后再用原来的Sure.520登录就报错了提示密码错误。

使用新密码Sure.123登录成功了。


d3a10ab141dd472dbb05afbc138aed2e.png


登录MySQL修改密码


语法:alter    user   'root'@'localhost'   identified by  '新密码';

这是centos9/MySQL8.0的语法。

修改完以后需要执行一条命令。

flush    privileges;

命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里。MySQL用户数据和权限有修改后,希望在”不重启MySQL服务”的情况下直接生效,那么就需要执行这个命令。通常是在修改ROOT帐号的设置后,怕重启后无法再登录进来,那么直接flush之后就可以看权限设置是否生效。而不必冒太大风险。


af8b0a3059c74660af8f4122e8c39bfb.png

7936d031a2ac433e98e2f764cd04054f.png


这里我又将密码改成了Sure.520


8b1e1c7837d5431fbc275678c7597078.png


 通过修改user表信息来修改密码在下面的找回root密码来实验。


忘记root密码,怎么找回

当忘记root密码的时候我们需要进行密码破解,要对mysql的配置文件进行修改。

找回root密码需要以下操作:

1、修改mysql配置文件,使mysql启动的时候不加载密码文件,实现免密登录,修改完需要重新mysql服务

2、免密登录mysql后,通过对user表的操作来清空root密码

3、退出mysql将配置文件的免密登录的部分注销,重启mysql服务

4、通过mysqladmin  -uroot    -p' '    password   '新的root密码'   修改root密码。

5、使用新密码登录MySQL


1、修改mysql配置文件


vim   /etc/my.cnf

在[mysqld]下加入一下内容

skip-grant-tables

保存退出重启mysql服务。

systemctl  restart  mysqld

如果重启失败,去检查配置文件,配置文件有错误命令,会导致重启失败。


44973eec6de14262876b121b1d006d2e.png


2、 配置完重启服务之后进行免密登录。


18aea1e78c8f47cd9297f940b5cae811.png


2.1通过修改user表的root密码列来修改root的密码。


语法:update   mysql.user  set  authentication_string=''  where  user='root';

这里要将密码清空。

注意:这里使用alter去修改密码会报错,因为现在是免密登录,是不需要授权密码的,所以系统会报错。


f817d51b28db4d7e8ecf0e11158b01b2.png


3、退出mysql进入配置文件将刚刚增加的免密登录的配置注释,重启服务。


\q是退出MySQL。

#skip-grant-tables

重启服务systemctl  restart  mysqld


975648628756459e9c36d9cb3e69273b.png

cd7c7ca76e6e468188c9c98b72cc8ee4.png


4、修改密码,通过新密码登录 MySQL


[root@localhost ~]# mysqladmin -uroot -p' '  password 'Sure.666'

在Enter password:直接按回车即可。因为密码刚刚清空了。


23bbc5375cd646f0b99597a62464720d.png


这样我们就找回了我们饿root密码。


免登陆操作数据库

免登陆操作数据库内的内容,不需要登录到MySQL界面来操作数据库,在通过脚本来操作数据库的时候需要用到该操作。

语法:mysql    -u用户名    -p'密码'   -P  MySQL服务端口   -h需要登录的服务器主机   -e  'SQL语句'

出现几个新的选项-P   -h   -e

-P:MySQL的服务端口,默认是3306

-h:MySQL服务器的主机,在后面用MySQL客户端的时候需要写,默认是localhost

-e:后面加空格接'sql语句'


需求:免登陆查看所有的库

f45752a4247d460c9f8acd50464e7dae.png


不登录数据库也可以看到所有库,当然也可以进行其他操作。


MySQL用户授权

通过创建用户给用户授权,让用户拥有一些权限来操作数据库,在生产环境中,不可能所有人都是用root账号来操作数据库,这个时候就需要来创建一些用户,并赋予一部分权限来完成日常的工作即可。


语法格式

语法: grant      权限列表  on    库名.表名   to    '用户名'@'客户端主机'    [with option参数];

权限列别:

       all:所有权限,增删改查

       select:查询权限

       select、delete:查询和删除权限

       select(列名):某个字段的查询权限                //     Column level

库名.表名:

       *.*:所有库,所有表的权限                    //Global level

       库名.*:某个库的所有表的权限                //Database level

       库名.表名:某个库某个表的权限                 //Table level

客户端主机:

       %:所有主机

       192.168.79.%:指定网段的主机

       192.168.79.139:指定某个具体主机

with  option:

        WITH   GRANT OPTION:授权选项

       如果这里写了,就代表了该用户可以继续给下一个用户授权,一般授权的时候不给这个权限,因为不方便管理。

赋予用户权限测试

需求:给客户机192.168.79.139的sure1授予对game库的player表的查询权限。

步骤:首先需要先创建sure1的用户

          用root用户给sure1授权

          测试权限。


创建用户

创建192.168.79.139客户端sure1用户

create user sure1@192.168.79.139 identified by 'Sure.123';

注意:这里@后面跟的ip是客户端的ip,这里是192.168.79.139,也就是sure1的账号只有192.168.79.139主机可以使用这个账号登录到服务器的mysql,这里ip是多少,接下来授权的客户端ip就要是多少。

为了验证这个账号的登录权限,在本机测试登录


2cc0bce68de942d691c8043cce1b15c3.png


 提示登录失败,提示访问被拒绝。再在192.168.79.139主机上登录测试。


首先需要在客户端上安装MySQL客户端,只需要安装sql客户端即可。

yum -y install mysql-community-client.x86_64

不不知道具体安装包的名字,可以通过yum  list | grep mysql来查看。

安装完成之后测试使用sure1用户登录mysql服务器的数据库。

mysql -usure1 -p'Sure.123' -h'192.168.79.138'

注意:这里-h后面要跟服务器的IP。否则将报错。


0d2cd2005e72461e9055bd8f9a237200.png


可以看到登录进来了,并且能够查到两个库,发现其他的库看不到,因为还没有给授权,接下来将对sure1用户进行授权。


给sure1用户授权

切换到192.168.79.138mysql服务器这台主机用root账号登录mysql。

给sure1赋予对game库的player表的查询权限。

grant select on game.player to 'sure1'@'192.168.79.139';

120c8fd6847d4a5480638b5cc653b690.png


测试权限

去192.168.79.139主机登录sure1账号测试权限


7ebaae46e3304d59a2fbeb159a5e227c.png


可以看到game库。


8658aa71593641f6aff7742182553767.png


也可以查询player表的内容。


2dd9d57bce154d3b84bedb4aa4bf3413.png

a4b4c1ca832c4132889924fe68cdf5fe.png


发现两台主机查看到的game内的表数量不一样。


测试向player内插入数据


2be8499ae85c4cd5aab4487110b471a1.png

提示操作被拒绝。


查看自己权限

语法:show  grants;


a381a1de4adf4ca0a77aa4221c9a9606.png


这就是sure1的权限,只有对game库中的player表查询权限。


查询别人权限

语法:SHOW GRANTS FOR   用户@'主机地址'

其他主机没有无法查看root的权限。

用MySQL服务器查看root权限

show   grants  for  root@localhost\G;

\G是自动换行的意思。


1dc820f23da1479fbb247fafdfcd7cf8.png


收回权限

语法:REVOKE   权限列表   ON   数据库名   FROM   用户名@‘客户端主机’

需求:收回sure1的所有权限

revoke   all privileges  on  game.player  from  sure1@'192.168.79.139';

6cede77210b54e8d9bc6585330c18890.png


用客户机测试sure1权限

用192.168.79.139主机测试权限收回情况。


641989ab96d6406a899e41bff7ef8e1f.png


发现已经看不到game库了。回到了刚刚创建完用户的状态。


查看自己的权限。


2ae672e72b004734ac3e02f283b15d88.png


已经没有对数据库操作的权限。


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
SQL 关系型数据库 MySQL
在MySQL中,什么是结构化查询语言 (SQL)
【8月更文挑战第20天】在MySQL中,什么是结构化查询语言 (SQL)
92 1
|
2月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
46 1
|
2月前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
100 4
|
2月前
|
SQL 关系型数据库 MySQL
go语言中安装数据库驱动
【11月更文挑战第1天】
75 5
|
2月前
|
SQL 关系型数据库 MySQL
go语言中数据库操作
【10月更文挑战第22天】
66 4
|
2月前
|
关系型数据库 MySQL 数据库连接
go语言中打开数据库连接
【11月更文挑战第1天】
38 2
|
3月前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
115 11
|
3月前
|
SQL Serverless 数据库
数据库常用DQL语言合集
数据库常用DQL语言合集
|
3月前
|
SQL NoSQL 数据管理
超越查询语言:GQL 如何塑造图形数据库的未来
超越查询语言:GQL 如何塑造图形数据库的未来
41 0
|
5月前
|
SQL 关系型数据库 MySQL
Go语言中使用 sqlx 来操作 MySQL
Go语言因其高效的性能和简洁的语法而受到开发者们的欢迎。在开发过程中,数据库操作不可或缺。虽然Go的标准库提供了`database/sql`包支持数据库操作,但使用起来稍显复杂。为此,`sqlx`应运而生,作为`database/sql`的扩展库,它简化了许多常见的数据库任务。本文介绍如何使用`sqlx`包操作MySQL数据库,包括安装所需的包、连接数据库、创建表、插入/查询/更新/删除数据等操作,并展示了如何利用命名参数来进一步简化代码。通过`sqlx`,开发者可以更加高效且简洁地完成数据库交互任务。
45 1