服务器MySQL的用户管理和权限管理
1.mysql的权限管理
1)mysql.user
1.用户字段:Host、User、Password
2.权限字段:_Priv结尾的字段
3.安全字段:ssl x509字段
4.资源控制字段:max开头的字段
2)mysql.db
1.用户字段:host、user、password
2.权限字段:剩下的_Priv结尾的字段
3)权限信息
1.表、列、存储过程的权限表
2.mysql.tables_priv,mysql.columns_priv,procs_priv
4)权限级别排列
1.mysql.user //全局授权
2.mysql.db //数据库级别授权
3.其他 //表级,列级授权
5)数据库和表格式
数据库名.* //数据库中的所有
数据库名.表名 //指定数据库中的某张表
数据库名.存储过程 //指定数据库中的存储过程
*.* //所有数据库
6)用户和ip格式
用户名@IP地址:用户只能在指定的IP地址下才能访问。
用户名@192.168.1.%:用户只能在192.168.1段的任意IP地址下才能访问(通配符%表示任意)。
用户名%@qfedu.com:用户可以在任意IP地址下访问(默认IP地址为通配符%)
2.mysql用户管理
1)创建用户
1.create user 语句创建
CREATE USER 用户名@IP地址 [IDENTIFIED BY '密码']
实例:
create user 'xiaoli'@'localhost' identified by 'Curry@123';
2.grant语句创建
GRANT SELECT ON *.* TO '用户名'@'IP地址' IDENTIFIED BY '密码';
实例:
grant select on *.* to 'testuser'@'localhost' identified by 'Curry@123';
2)删除用户
1.drop user删除
DROP USER 用户名@IP地址;
实例:drop user 'xiaoli'@'localhost';
2.delete语句删除
DELETE FROM mysql.user WHERE user='用户名' AND host='IP地址';
实例:delete from mysql.user where user='xiaoli' and host='localhost';
3)修改用户
RENAME USER '旧用户名'@'IP地址' TO '新用户名'@'IP地址';
实例:rename user 'xiaoli'@'localhost' to 'xiaoming'@'localhost';
4)修改密码
注意:修改完密码必须刷新权限
flush privileges;
1.root用户修改自己密码
方法一:使用 mysqladmin 命令行工具
mysqladmin -u用户名 -p旧密码 password '新密码'实例:
mysqladmin -uroot -pLiuyi@123 password 'Liuyi@456';
方法二:使用 ALTER USER 语句
ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码';
实例:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
方法三:使用 SET PASSWORD 语句
SET PASSWORD [FOR '用户名'@'主机名'] = PASSWORD('新密码');
实例:
SET PASSWORD = PASSWORD('new_password');
5)root修改其他用户密码
方法一:修改用户密码
ALTER USER 'testuser'@'localhost' IDENTIFIED BY 'Curry@123';
方法二:授予权限并设置密码
GRANT 权限 ON 数据库.表 TO '用户名'@'主机名' IDENTIFIED BY '密码';
6)普通用户修改自己密码
set password=password('new_password');
7)找回root密码
1.修改mysql配置文件
在[mysqld]下面加上skip-grant-tables
[root@qfedu.com ~]# vim /etc/my.cnf
...
[mysqld]
#设置免密登录
skip-grant-tables
2.重启mysql
systemctl restart mysqld
3.修改密码
1.终端输入mysql直接登录mysql数据库
mysql
2.切换到mysql系统库mysql
use mysql;
3.设置密码
update user set authentication_string=password('密码') where user='root';
4.注释掉免密登陆
5.重启mysql然后登陆
8)密码复杂度
1.安装密码插件
mysql默认其用量密码复杂度设置,创建名字叫做validate_password
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
9)修改配置文件
1.修改配置/etc/my.cnf
[mysqld]
plugin-load = validate_password.so
validate_password_policy = 0
validate-password = FORCE_PLUS_PERMANENT
2.重启mysql生效
systemctl restart mysqld
3.查看错误日志
mysql> SHOW VARIABLES LIKE 'log_error';
4.登陆数据库查看
show variables like 'validate%'
以下是每个变量的含义:
validate_password_check_user_name
:
是否检查密码是否与用户名相同。
默认值:
OFF
(不检查)。如果设置为
ON
,密码不能与用户名相同。
validate_password_dictionary_file
:
字典文件的路径,用于检查密码是否包含常见单词。
默认值:空(未启用字典检查)。
validate_password_length
:
密码的最小长度。
默认值:
8
。
validate_password_mixed_case_count
:
密码中至少需要包含的大写和小写字母的数量。
默认值:
1
。
validate_password_number_count
:
密码中至少需要包含的数字数量。
默认值:
1
。
validate_password_policy
:
密码策略的强度级别。
可选值:
0
或LOW
:只检查密码长度。
1
或MEDIUM
:检查长度、数字、大小写字母和特殊字符。
2
或STRONG
:在MEDIUM
的基础上增加字典文件检查。默认值:
MEDIUM
。
validate_password_special_char_count
:
密码中至少需要包含的特殊字符数量。
默认值:
1
。
9)回收权限
REVOKE 权限类型 ON 数据库名.表名 FROM '用户名'@'主机';
注意事项:
1. 被回收的权限必须存在
只有当用户已经拥有要撤销的权限时,
REVOKE
命令才会成功执行。如果用户没有该权限,执行
REVOKE
会报错。2.撤销所有权限
撤销整个服务器的所有权限:
REVOKE ALL PRIVILEGES ON *.* FROM 'admin1'@'%';
撤销整个数据库的所有权限:
REVOKE ALL PRIVILEGES ON mydb.* FROM 'admin1'@'%';
撤销特定表的所有权限:
REVOKE ALL PRIVILEGES ON mydb.mytable FROM 'admin1'@'%';
3.顺序权限
FLUSH PRIVILEGES;