文章目录
一、MySQL8密码恢复
- 重置密码的第一步就是跳过MySQL的密码认证过程
vim /etc/my.cnf
# 在[mysqld]后面任意一行添加“skip-grant-tables”
skip-grant-tables
- 重启MySQL, 重启之后输入mysql即可直接进入mysql。
systemctl restart mysqld
mysql
- 置空root密码
#选择数据库mysql
mysql> use mysql;
#将密码置空
mysql> update user set authentication_string = ''" where user = 'root';
-
退出mysql,去掉 /etc/my.cnf 中的skip-grant-tables
-
重启mysql服务
systemctl restart mysqld
-
登录mysql密码已为空,直接登录
-
修改密码
# 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.