😘作者简介:正在努力的99年公司职员。
👊宣言:人生就是B(birth)和D(death)之间的C(choise),做好每一个选择。
🙏创作不易,动动小手给个点赞加关注吧,有什么意见评论区告诉我,一起学习。
目录
前言
DCL语句
权限级别
MySQL用户管理
创建用户
删除用户
修改密码
忘记root密码,怎么找回
免登陆操作数据库
MySQL用户授权
语法格式
赋予用户权限测试
创建用户
给sure1用户授权
测试权限
查看自己权限
查询别人权限
收回权限
用客户机测试sure1权限
前言
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表。
创建好之后可以通过查看user表的内容来查找到我们刚刚创建的用户。
select user from user;
因为user表中记录了很多内容,只看user列的信息看到刚刚创建的用户sure1在这里可以查到。
删除用户
语法:drop user 用户名@客户机ip;
删除刚刚创建的sure1用户。
drop user sure1@localhost;
删除之后,通过查询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登录成功了。
登录MySQL修改密码
语法:alter user 'root'@'localhost' identified by '新密码';
这是centos9/MySQL8.0的语法。
修改完以后需要执行一条命令。
flush privileges;
命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里。MySQL用户数据和权限有修改后,希望在”不重启MySQL服务”的情况下直接生效,那么就需要执行这个命令。通常是在修改ROOT帐号的设置后,怕重启后无法再登录进来,那么直接flush之后就可以看权限设置是否生效。而不必冒太大风险。
这里我又将密码改成了Sure.520
通过修改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
如果重启失败,去检查配置文件,配置文件有错误命令,会导致重启失败。
2、 配置完重启服务之后进行免密登录。
2.1通过修改user表的root密码列来修改root的密码。
语法:update mysql.user set authentication_string='' where user='root';
这里要将密码清空。
注意:这里使用alter去修改密码会报错,因为现在是免密登录,是不需要授权密码的,所以系统会报错。
3、退出mysql进入配置文件将刚刚增加的免密登录的配置注释,重启服务。
\q是退出MySQL。
#skip-grant-tables
重启服务systemctl restart mysqld
4、修改密码,通过新密码登录 MySQL
[root@localhost ~]# mysqladmin -uroot -p' ' password 'Sure.666'
在Enter password:直接按回车即可。因为密码刚刚清空了。
这样我们就找回了我们饿root密码。
免登陆操作数据库
免登陆操作数据库内的内容,不需要登录到MySQL界面来操作数据库,在通过脚本来操作数据库的时候需要用到该操作。
语法:mysql -u用户名 -p'密码' -P MySQL服务端口 -h需要登录的服务器主机 -e 'SQL语句'
出现几个新的选项-P -h -e
-P:MySQL的服务端口,默认是3306
-h:MySQL服务器的主机,在后面用MySQL客户端的时候需要写,默认是localhost
-e:后面加空格接'sql语句'
需求:免登陆查看所有的库
不登录数据库也可以看到所有库,当然也可以进行其他操作。
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就要是多少。
为了验证这个账号的登录权限,在本机测试登录
提示登录失败,提示访问被拒绝。再在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。否则将报错。
可以看到登录进来了,并且能够查到两个库,发现其他的库看不到,因为还没有给授权,接下来将对sure1用户进行授权。
给sure1用户授权
切换到192.168.79.138mysql服务器这台主机用root账号登录mysql。
给sure1赋予对game库的player表的查询权限。
grant select on game.player to 'sure1'@'192.168.79.139';
测试权限
去192.168.79.139主机登录sure1账号测试权限
可以看到game库。
也可以查询player表的内容。
发现两台主机查看到的game内的表数量不一样。
测试向player内插入数据
提示操作被拒绝。
查看自己权限
语法:show grants;
这就是sure1的权限,只有对game库中的player表查询权限。
查询别人权限
语法:SHOW GRANTS FOR 用户@'主机地址'
其他主机没有无法查看root的权限。
用MySQL服务器查看root权限
show grants for root@localhost\G;
\G是自动换行的意思。
收回权限
语法:REVOKE 权限列表 ON 数据库名 FROM 用户名@‘客户端主机’
需求:收回sure1的所有权限
revoke all privileges on game.player from sure1@'192.168.79.139';
用客户机测试sure1权限
用192.168.79.139主机测试权限收回情况。
发现已经看不到game库了。回到了刚刚创建完用户的状态。
查看自己的权限。
已经没有对数据库操作的权限。
阅读十遍不如操作一遍,一起操作学习吧!!!