mysql8 安全机制(修改密码、 Role功能、用户管理)

本文详细介绍了MySQL8的安全机制,包括如何恢复密码,重点讲解了Role功能,如创建、删除、激活角色,以及角色权限的查看与撤销。此外,还涵盖了用户管理,包括创建、删除用户,修改用户密码和客户端设置。Role功能使得权限管理更加便捷,用户管理则确保了数据库系统的安全性。
摘要由CSDN通过智能技术生成

一、MySQL8密码恢复

  1. 重置密码的第一步就是跳过MySQL的密码认证过程
vim /etc/my.cnf
# 在[mysqld]后面任意一行添加“skip-grant-tables”
skip-grant-tables
  1. 重启MySQL, 重启之后输入mysql即可直接进入mysql。
systemctl restart mysqld
mysql
  1. 置空root密码
#选择数据库mysql
mysql> use mysql;
#将密码置空
mysql> update user set authentication_string = ''"  where user = 'root';
  1. 退出mysql,去掉 /etc/my.cnf 中的skip-grant-tables

  2. 重启mysql服务

systemctl restart mysqld
  1. 登录mysql密码已为空,直接登录

  2. 修改密码

# mysql8.0 修改密码策略和长度
# mysql> set global validate_password.policy=0;
# Query OK, 0 rows affected (0.01 sec)
# mysql> set global validate_password.length=1;
# Query OK, 0 rows affected (0.00 sec)
#修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
#或者
alter user 'root'@'localhost' identified by '123456';

#刷新
mysql> flush privileges;

二、mysql8.0 特性

(一) Role功能

role可以看做一个权限的集合,这个集合有一个统一的名字role名。可以给多个账户统一的某个role的权限权限的修改直接通过修改role来实现,不需要每个账户一个一个的grant权限,方便运维和管理。role可以创建、删除、修改并作用到他管理的账户上。

MySQL角色是特权的命名集合。像用户帐户一样,角色可以拥有授予和撤销的特权。

可以为用户帐户授予角色,该角色将与每个角色相关联的特权授予该帐户。这样就可以将特权集分配给帐户,并为授予个人特权提供了一种方便的替代方法,既可以概念化所需的特权分配,又可以实现它们。

即:创建角色,给角色分配权限,给账户(用户)授予角色 ;那么某个用户将拥有某个角色所定义的权限

MySQL提供的角色管理功能:

  • CREATE ROLE并 DROP ROLE创建和删除角色。

  • GRANT并 REVOKE分配特权以撤消用户帐户和角色的特权。

  • SHOW GRANTS 显示用户帐户和角色的特权和角色分配。

  • SET DEFAULT ROLE 指定默认情况下哪些帐户角色处于活动状态。

  • SET ROLE 更改当前会话中的活动角色。

  • 该CURRENT_ROLE()功能显示当前会话中的活动角色。

  • 该mandatory_roles和 activate_all_roles_on_login 系统变量允许定义强制性角色和授予的角色的自动激活,当用户登录到服务器。

1. 创建角色并授予权限

考虑这种情况:

  • 应用程序使用名为的数据库 app_db。

  • 与该应用程序相关联,可以为创建和维护该应用程序的开发人员以及与该应用程序进行交互的用户提供帐户。

  • 开发人员需要对数据库的完全访问权限。一些用户只需要读访问权限,而其他用户则需要读/写访问权限。

  • 为避免为可能的许多用户帐户分别授予特权,请创建角色作为所需特权集的名称。通过授予适当的角色,可以轻松地将所需的特权授予用户帐户。

CREATE ROLE 语句用于创建一个或多个角色,这些角色被称为特权集合;创建角色时,该角色将被锁定,没有密码并被分配默认身份验证插件。

CREATE ROLE 要么对所有命名角色都成功,要么回滚,并且在发生任何错误时不起作用。默认情况下,如果您尝试创建一个已经存在的角色,则会发生错误。如果提供了该IF NOT EXISTS 子句,则该语句将为每个已经存在的命名角色生成警告,而不是错误。

用法:

CREATE ROLE [IF NOT EXISTS] role [, role ] ...
# 例
CREATE ROLE 'user_name', 'user_name'@'host_name';

角色的名称与MySQL的账户名称非常相似,由用户名+主机名称构成;角色名称的主机名部分(如果省略)默认为 ‘%’

创建角色时,该角色将被锁定,没有密码并被分配默认身份验证插件。锁定后,角色不能用于向服务器进行身份验证。如果解锁,则可以使用角色进行身份验证。这是因为角色和用户都是授权标识符,它们有很多共同点,而很少区分它们。

根据以上的要求,需创建三个角色,如下:

CREATE ROLE 'app_developer', 'app_read', 'app_write';

要为角色​​分配特权,需使用GRANT 语句向用户分配特权

该GRANT语句使系统管理员可以授予特权和角色,这些特权和角色可以授予用户帐户和角色。这些语法限制适用于:

  • GRANT不能在同一条语句中混合授予特权和角色。给定的 GRANT语句必须授予特权或角色。

  • 该ON子句区分该语句是授予特权还是角色:

  • 使用ON,该语句授予特权。

  • 不使用ON,该语句将授予角色。

  • 可以为帐户分配特权和角色,但是必须使用单独的 GRANT语句,每个语句的语法都适合于要授予的语句。

用法:

GRANT 权限1[,权限2...] ON '指定的库/表' TO '角色名';
GRANT 角色名1[,角色名2...] TO '用户1'[,用户2...];
GRANT 权限1[,权限2.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值