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;
评论前必须登录!
注册