MySQL 的用户管理和权限管理

本文详细介绍了MySQL的用户管理和权限控制,包括DCL语句如GRANT和REVOKE,以及用户创建、删除、修改和权限分配。还讨论了MySQL的权限表结构,如mysql.user、mysql.db等,以及不同级别的授权。此外,提到了如何修改和找回用户密码,以及密码复杂度策略的设置。最后,阐述了MySQL的登录方法和权限查看、授权、回收的操作步骤。
摘要由CSDN通过智能技术生成

MySQL 的用户管理和权限管理

1、DCL(数据库控制语言)

数据库授权、角色控制等操作

GRANT 用户授权,为用户赋予访问权限

REVOKE 取消授权,撤回授权权限

2、MySQL 权限表

1) mysql.user

用户字段:Host、User、Password

权限字段:_Priv结尾的字段

安全字段:ssl x509字段

资源控制字段:max_开头的字段

2) mysql.db

用户字段:Host、User、Password

权限字段:剩下的_Priv结尾的字段

3) mysql.tables_priv,mysql.columns_priv、procs_priv

表、列、存储过程的授权表

4) 授权级别排列

mysql.user #全局授权

mysql.db #数据库级别授权

其他 #表级,列级授权

5) 数据库和表格式

数据库名.* 		//数据库中的所有
数据库名.表名 	//指定数据库中的某张表
数据库名.存储过程 //指定数据库中的存储过程
*.* 			//所有数据库

6) 用户和 IP格式

用户名@IP地址 		//用户只能在改IP下才能访问
用户名@192.168.1.% 	//用户只能在改IP段下才能访问(通配符%表示任意)
用户名@%.test.com	
用户名@% 			//用户可以再任意IP下访问(默认IP地址为%)

3、MySQL 用户管理

1) 创建用户

CREATE USER语句创建

CREATE USER '用户名'@'IP地址' [ IDENTIFIED BY '密码' ]

GRANT语句创建

GRANT SELECT ON *.* TO '用户名'@’IP地址’ IDENTIFIED BY "密码"

创建实例

CREATE USER 'qfedu'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'qfedu'@'192.168.1.101' IDENDIFIED BY '123456';
CREATE USER 'qfedu'@'192.168.1.%' IDENDIFIED BY '123456';
CREATE USER 'qfedu'@'%' IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'user3'@’localhost’ IDENTIFIED BY123456;

2) 删除用户

DROP USER 删除

DROP USER '用户名'@'IP地址';

实例

DROP USER 'user1'@’localhost’;

DELETE 语句删除

DELETE FROM mysql.user WHERE user='用户名' AND host='IP地址'

实例

DELETE FROM mysql.user WHERE user=’user2’ AND host=’localhost’;

3) 修改用户

RENAME USER '旧用户名'@'IP地址' TO '新用户名'@'IP地址' ;

实例

RENAME USER 'old_user'@‘localhost’ TO 'new_user'@'localhost';

4) 修改密码

注意:修改完密码必须刷新权限

FLUSH PRIVILEGES;

root 用户修改自己密码

方法一:
mysqladmin -uroot -p123 password 'new_password' # 123为旧密码
方法二:
alter user 'root'@'localhost' identified by 'new_pssword';
方法三:
SET PASSWORD=password(‘new_password’);

root 修改其他用户密码

方法一:
alter user 'qfedu'@'localhost' identified by 'Qfedu.1234com';
方法三:
GRANT SELECT ON *.* TO 用户名@’ip地址’ IDENTIFIED BY ‘yuan’;

普通用户修改自己密码

SET password=password(‘new_password’);

5) 找回 root 密码

修改 MySQL 配置文件

在[mysqld]下面加上 skip-grant-tables

[root@localhost ~]# vim /etc/my.cnf
[mysqld]
···
#设置免密登录
skip-grant-tables

重启 MySQL

[root@localhost ~]# systemctl restart mysqld

修改密码

终端输入 mysql 直接登录 MySQL数据库

[root@localhost ~]# mysql

切换到 MySQL 系统库 mysql

mysql> use mysql;

设置密码

mysql> update user set authentication_string=password('密码') where user='root';

6) 注释掉免密登录

[root@localhost ~]# vim /etc/my.cnf
[mysqld]
···
#设置免密登录
#skip-grant-tables

7) 重启 MySQL 然后登录

[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# mysql -uroot -p

8) 密码复杂度

安装密码插件

MySQL 默认启用了密码复杂度设置,插件名字叫做 validate_password

mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';

修改配置文件

修改配置

[root@localhost ~]# vim /etc/my.cnf
[mysqld]
plugin-load=validate_password.so
validate_password_policy=0
validate-password=FORCE_PLUS_PERMANENT

重启MySQL生效

[root@localhost ~]# systemctl restart mysqld

查看错误日志

登陆数据库查看

mysql> show variables like 'validate%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM |
| validate_password_special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.04 sec)

validate_password_policy

代表的密码策略,可配置的值有以下:默认是MEDIUM 0 or LOW 仅需需符合密码长度(由参数validate_password_length指定)

1 or MEDIUM 满足LOW策略,同时还需满足至少有1个数字,小写字母,大写字母和特殊字符

2 or STRONG 满足MEDIUM策略,同时密码不能存在字典文件(dictionary file)中

validate_password_dictionary_file

用于配置密码的字典文件,当validate_password_policy设置为STRONG时可以配置密码字典文 件,字典文件中存在的密码不得使用。

validate_password_length

用来设置密码的最小长度,默认值是8最小是0

validate_password_mixed_case_count

当validate_password_policy设置为MEDIUM或者STRONG时,密码中至少同时拥有的小写和大写 字母的数量,默认是1最小是0;默认是至少拥有一个小写和一个大写字母。

validate_password_number_count

当validate_password_policy设置为MEDIUM或者STRONG时,密码中至少拥有的数字的个数,默 认1最小是0

validate_password_special_char_count

当validate_password_policy设置为MEDIUM或者STRONG时,密码中至少拥有的特殊字符的个 数,默认1最小是0

9) 密码不符合复杂性

mysql> GRANT ALL ON *.* TO admin1@'%' IDENTIFIED BY '123';
ERROR 1819 (HY000): Your password does not satisfy the current policy
requirements

处理方法:

查看密码策略

mysql> select @@validate_password_policy; # 查看密码复杂性策略
mysql> select @@validate_password_length; # 查看密码复杂性要求密码最低长度大小

更换符合复杂性要求的密码

mysql> set global validate_password_length=1; # 设置密码复杂性要求密码最低长度为1

关闭复杂性策略

mysql> set global validate_password_policy=0; # 关闭密码复杂性策略

4、MySQL 登录

mysql -u用户名 -p密码 [ -h主机 ] [ -P端口 ];
mysql -u用户名 -p密码 [ -h主机 ] [ -P端口 ] [ -e"SQL语句" ]

实例

[root@localhost ~]# mysql -uroot -hlocalhost -p'qfedu.123com' -P3306
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.29 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

5、MySQL 权限管理

1) 查看权限

SHOW GRANTS FOR '用户'@'IP地址';

可以不指定用户,则显示当前用户权限

实例

mysql> SHOW GRANTS FOR 'root'@'localhost';

2) 授权及设置密码

授权及设置密码

GRANT 权限 [,权限...[,权限]] NO 数据库.数据表 TO '用户'@'IP地址';
GRANT 权限 [,权限...[,权限]] NO 数据库.数据表 TO '用户'@'IP地址' IDENTIFIED BY '密码';

可以简化多次授权,并用逗号分隔

GRANT需要明确一下信息 要授予的权限 被授予权限的数据库或表 用户名

权限简介

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

授权设置密码实例

mysql> GRANT ALL ON *.* TO admin1@'%' IDENTIFIED BY '(Qfedu.123com)';
mysql> GRANT ALL ON *.* TO admin2@'%' IDENTIFIED BY '(Qfedu.123com)' WITH GRANT
OPTION;
mysql> GRANT ALL ON qfedu.* TO admin3@'%' IDENTIFIED BY '(Qfedu.123com)';
mysql> GRANT ALL ON qfedu.* TO admin3@'192.168.122.220' IDENTIFIED BY
'(Qfedu.123com)';
mysql> GRANT ALL ON qfedu.user TO admin4@'%' IDENTIFIED BY '(Qfedu.123com)';
mysql> GRANT SELECT(col1),INSERT(col2,col3) ON qfedu.user TO admin5@'%'
IDENTIFIED BY '(Qfedu.123com)';

4) MySQL 8.x 授权方式

创建新的用户

CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码';

数据库授权

GRANT ALL PRIVILEGES ON 数据库名.* TO '用户名'@'IP地址';

回收权限

REVOKE 权限 ON 数据库.数据表 FROM '用户'@'IP地址';

被回收的权限必须存在,否则会出错

整个服务器,使用 GRANT ALL 和 REVOKE ALL;

整个数据库,使用 ON datebase.*;

特定的表:使用 ON datebase.table;

实例

mysql> REVOKE DELETE ON *.* FROM admin1@’%;
# 回收指定权限
mysql> REVOKE ALL PRIVILEGES ON *.* FROM admin2@’%;
# 回收所有权限
mysql> REVOKE ALL PRIVILEGES,GRANT OPTION ON *.* FROM 'admin2'@'%';
# 回收多个指定权限

4) 刷新权限

mysql> FLUSH PRIVILEGES;

flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库 (MySQL数据库的内置库)中提取到内存里。

NT ALL 和 REVOKE ALL;

整个数据库,使用 ON datebase.*;

特定的表:使用 ON datebase.table;

实例

mysql> REVOKE DELETE ON *.* FROM admin1@’%;
# 回收指定权限
mysql> REVOKE ALL PRIVILEGES ON *.* FROM admin2@’%;
# 回收所有权限
mysql> REVOKE ALL PRIVILEGES,GRANT OPTION ON *.* FROM 'admin2'@'%';
# 回收多个指定权限

4) 刷新权限

mysql> FLUSH PRIVILEGES;

flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库 (MySQL数据库的内置库)中提取到内存里。

MySQL用户数据和权限有修改后,搜索希望在"不重启MySQL服务"的情况下直接生效,那么就需 要执行这个命令

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值