21、MySQL8版本数据库账户及授权

1、登录账户管理

(1)查看用户信息

用户信息存放在 mysql 数据库下的 user 表( MySQL 服务下存在一个系统自带的 mysql 数据库)。

use mysql ;
show tables;

在这里插入图片描述

(2)查看一下 user 表结构

desc user;
或者
describe user;

在这里插入图片描述
在这里插入图片描述

(3)查看密码信息

密码信息: 经过加密后的密码信息

select user,host,authentication_string from user;

在这里插入图片描述

2、新建登录账户

注意: MySQL8版本中新增了一个 system_user 帐户类型,由于 root 用户没有 SYSTEM_USER 权限,然后对其他账户进行操作时,有可能会出现如下错误。
在这里插入图片描述
给root账户添加 system_user 权限即可:

grant system_user on *.* to 'root';

新建登录账户:
语法: CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
参数说明:
username: 创建的用户名
localhost: 指定该用户在哪个主机上可以登陆,如果是本地用户可用 localhost ,如果想让该用户可以从任意远程主机登陆,可以使用通配符 %
password: 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器。

# 新建test账户,密码为test.允许登录的主机localhost
CREATE USER 'test'@'localhost' IDENTIFIED BY 'test';

在这里插入图片描述

3、登录用户用户名的更改

语法: RENAME USER '旧的用户名'@'旧的主机地址' TO '新的用户名'@'新的主机地址';

RENAME USER 'yangwenhao'@'%' TO 'mayan'@'%';

在这里插入图片描述

4、删除登录账户

语法:

drop user '用户名'@'登录主机地址';

5、查看当前登录账户

语法:

select user();

在这里插入图片描述

6、修改账户密码

(1)普通账户修改自身

MySQL8版本相对于旧版本有些不同之处。普通账户修改自身登录密码的时候用到 REPLACE 关键字,进行旧密码验证。
语法:

ALTER USER USER() IDENTIFIED BY '新密码' REPLACE '旧密码';

在这里插入图片描述

(2)root账户修改自身及其他账户

语法:

ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码';

在这里插入图片描述
从上面的图片可以看出, root 修改其他账户密码的时候不需要 REPLACE 关键字校验旧密码。REPLACE 关键字只适用于普通账户修改自身密码 的时候。

拓展:
MySQL 8.0中是可以指定密码的加密方式(默认:caching_sha2_password)。
旧版本的加密方式: mysql_native_password
新版本的加密方式: caching_sha2_password

ALTER USER 'mayan'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

在这里插入图片描述

7、root账户密码忘记

(1)关闭mysql服务

systemctl stop mysqld.service

(2)启动mysql服务

mysqld  --user=root  --skip-grant-tables

(3)查看mysql服务状态

systemctl status mysqld

(4)登录MySQL数据库

mysql -hlocalhost -P3306 -uroot  -p

(5)登录以后查看mysql.user表

SELECT host, user, plugin, authentication_string  FROM user;

(6)删除root用户

delete from mysql.user where user=’root’;
flush privileges;
commit;

(7)新建root用户

create user root;

(8)给root用户设置密码

alter user 'root'@'%' identified by '新密码';

(9)给root用户赋权

grant all on *.* to 'root'@'%';

(10)更新root用户的给其他用户赋权的权限

此时,给其他用户进行赋权操作,会报错,显示root用户没有授权权限。 mysql.user 表里面的 Grant_priv 字段的值为 N ,接下来要把这个字段的值更新为 Y

update mysql.user set Grant_priv='Y' where user='root';

8、账户授权

语法:

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];

GRANT privileges ON databasename.tablename TO 'username'@'localhost'

GRANT ALL ON *.*TO 'test'@'host';

参数说明:
privileges: 用户的操作权限,如 SELECTINSERTUPDATECREATE 等,如果要授予所有的权限则使用 ALL
databasename: 数据库名,如果 * 代表所有数据库。
tablename: 表名,如果 * 代表所有数据表。
localhost: 指定该用户在哪个主机上可以登陆,如果是本地用户可用 localhost ,如果想让该用户可以从任意远程主机登陆,可以使用通配符 %
拓展:
常见的用户权限

权限 权限说明 权限级别
CREATE 创建数据库、表或索引的权限 数据库、表或索引
DROP 删除数据库或表的权限 数据库或表
GRANT OPTION 赋予权限选项 数据库或表
REFERENCES 引用权限 数据库或表
ALTER 更改表的权限 数据表
DELETE 删除表数据的权限 数据表
INDEX 操作索引的权限 数据表
INSERT 添加表数据的权限 数据表
SELECT 查询表数据的权限 数据表
UPDATE 更新表数据的权限 数据表
CREATE VIEW 创建视图的权限 视图
SHOW VIEW 查看视图的权限 视图
ALTER ROUTINE 更改存储过程的权限 存储过程
CREATE ROUTINE 创建存储过程的权限 存储过程
EXECUTE 执行存储过程权限 存储过程
FILE 服务器主机文件的访问权限 文件管理
CREATE TEMPORARY TABLES 创建临时表的权限 服务器管理
LOCK TABLES 锁表的权限 服务器管理
CREATE USER 创建用户的权限 服务器管理
RELOAD 执行 flush privileges, refresh, reload 等刷新命令的权限 服务器管理
PROCESS 查看进程的权限 服务器管理
REPLICATION CLIENT 查看主从服务器状态的权限 服务器管理
REPLICATION SLAVE 主从复制的权限 服务器管理
SHOW DATABASES 查看数据库的权限 服务器管理
SHUTDOWN 关闭数据库的权限 服务器管理
SUPER 超级权限 服务器管理
ALL [PRIVILEGES] 所有权限
USAGE 没有任何权限

9、查看账户权限

(1)查看当前登录账户

SHOW GRANTS;

在这里插入图片描述

(2)查看其他账户

语法:

SHOW GRANTS FOR 'username'@'登录主机';

10、撤销权限

语法:

 revoke 权限列表/ALL on 库名.表名 from '用户名'@'来源地址';

例子:

 revoke ALL on *.* from 'mayan'@'%';

11、远程登录MySQL

语法:

 mysql -u 用户名 -p[密码] -h 目标IP/主机名 -P 端口号

例子:

mysql -h192.168.85.131 -P3306 -umayan -p

12、刷新权限信息

FLUSH PRIVILEGES;

刷新权限信息,使其立即生效。

猜你喜欢

转载自blog.csdn.net/weixin_61470350/article/details/129723938
今日推荐