MySQL数据库之——用户权限设置,文内附带MySQL密码忘记如何解决

Posted 丁CCCCC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据库之——用户权限设置,文内附带MySQL密码忘记如何解决相关的知识,希望对你有一定的参考价值。

一、用户管理

1.1 新建用户

命令

CREATE USER ’ 用户名 ’ @ ’ 来源地址 ’ [IDENTIFIED BY [PASSWORD] ’ 密码 ’ ] ;

解释

  • 用户名:指定将要创建的用户名
  • 来源地址:新创建的用户可以在哪些主机上登录,可以使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录,使用通配符 %
  • 密码
    • 使用明文密码直接输入即可,插入到数据库时自动加密
    • 加密密码需要先试用 SELECT PASSWORD( ’ 密码 ’ ); 获取密文,再在语句中添加 PASSWORD ’ 密文 ’
    • 若不适用密码,则忽略 “IDENTIFIEN BY ”部分,但是不建议这样操作

测试

  • 创建用户user01 ,密码使用明文
create user 'user01'@'localhost' identified by '123456';
  • 创建用户user02,密码使用加密
create user 'user02'@'localhost' identified by password '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
  • 获取加密的密码
select password('123456');
+-------------------------------------------+
| password('123456')                        |
+-------------------------------------------+
| *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------------------------------------+

在这里插入图片描述

6.2 查看用户信息

创建的用户保存在 mysql 数据库的 user 表里

#进入mysql数据库
use mysql;

#查看用户信息
select user,authentication_string,host from user;

在这里插入图片描述

6.3 重命名用户

将user02 改名 user03

rename user 'user02'@'localhost' to 'user03'@'localhost';

在这里插入图片描述

6.4 删除用户

删除 user01 用户

drop user 'user01'@'localhost';

在这里插入图片描述

6.5 修改当前登录用户密码

set password = password('cc123');

6.6 修改其他用户密码

mysql> set password for 'user03'@'localhost' = password('cc123');

6.7 忘记root密码的解决方法

第一步:修改指定配置文件,不适用密码登录MySQL

  • vim /etc/my.cnf
[mysqld]
skip-grant-tables			# 添加该行
  • systemctl restart mysqld.service

在这里插入图片描述

第二步:使用 update 修改密码,刷新数据库

#修改密码
update mysql.user set authentication_string = password('123456') where user ='root';

#刷新数据库
flush privileges;

quit

设置完后,需要把配置文件内的新增内容删除,并重启服务
在这里插入图片描述

二、数据库用户授权

2.1 授权

  • GRANT语句
    • 专门用来设置数据库用户的访问权限
    • 当指定的用户名不存在时,GRANT语句将会创建新的用户
    • 当指定的用户存在时,GRANT语句用于修改用户信息

命令

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
  • 权限列表
    • 用于列出授权使用的各种数据库操作,以逗号分隔
    • 如 “ select , insert , update ”。使用 all 表示所有权限,可授权执行任何操作
  • 数据库名.表名
    • 用于指定授权操作的数据库和表的名称
    • 可以使用通配符 * ,如 dcc.* 表示授权对象为dcc数据库的所有表
  • 用户名@来源地址
    • 指定用户名称和允许访问的客户机地址,即谁能连接,从哪连接
    • 来源地址可以是域名、IP地址 还可以使用通配符 % 表示某个区域或网段内的所有地址
    • 如 %.cc.com、192.168.253.% 等
  • IDENTIFIEN BY
    • 设置用户连接数据库所要用的密码字符串
    • 若省略,则用户的密码为空

测试

  • 设置 user03 用户允许在本地查询 dcc 数据库中的所有数据记录,不能查询其他的
grant select on dcc.* to 'user03'@'localhost' identified by '123456';
flush privileges;			# 设置完需要刷新

use dcc;
show tables;
+---------------+
| Tables_in_dcc |
+---------------+
| ccc01         |
| ccc02         |
| ccc03         |
| dd01          |
| dd02          |
+---------------+

在这里插入图片描述

use mysql;				# 无法查询其他
ERROR 1044 (42000): Access denied for user 'user03'@'localhost' to database 'mysql'
  • 允许用户 user01 在所有终端远程连接 MySQL,并拥有所有权限
grant all [privileges] on *.* to 'user01'@'%' identified by '123456';
flush privileges;				# 刷新数据库

在这里插入图片描述

2.2 查看权限

SHOW GRANTS FOR 用户名@来源地址;

show grants for 'user01'@'%';

在这里插入图片描述

2.3 撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址;

revoke all on *.* from 'user01'@'%';

show grants for 'user01'@'%';
+------------------------------------+
| Grants for user01@%                |
+------------------------------------+
| GRANT USAGE ON *.* TO 'user01'@'%' |
+------------------------------------+
1 row in set (0.00 sec)

USAGE 权限表示只能用于数据库登录,不能执行操作,此权限无法回收,所以 revoke 不能删除用户

以上是关于MySQL数据库之——用户权限设置,文内附带MySQL密码忘记如何解决的主要内容,如果未能解决你的问题,请参考以下文章

Mysql用户设置密码和权限

MySQL权限和用户管理

mysql数据库权限

从其他容器访问 mysql 容器

MySQL之创建用户和授权

MariaDB 用户与权限管理(12)