my.ini 配置文件格式
登录mysql
mysql -h hostname | IP -P port -u username -p database -e “select 语句”;
创建用户、修改用户、删除用户
create user ‘zen’ identified by ‘密码’ ## host 默认是 %
create user ‘zen’@‘localhost’ identified by ‘密码’
update user set user=‘zen123’ where user=‘zen’; # 如何有多个用户,需要家 and host=‘xxx’ 条件, 最后别忘记 Flush privileges ;
删除用户
方式1
drop user user1[,…usern ] ;
此处的user1: 用用户名和主机名组成。 zen@localhost
支持同时删除多个用户,用逗号隔开。
drop user zen ; drop user ‘zen’ ; # 默认是删除 host=%的用户
drop user ‘zen‘@’localhost’
flush privileges;
方式2
delete from mysql.user where Host=‘xxxx’ and user=‘xxxx’; ### host 和user 两个字段联合主键。
flush privileges;建议
不推荐通过delete from user 进行删除,系统会有残留信息保留
drop user 命令删除用户以及对应的权限,执行命令后你会发现 mysql.user 表和 mysql.db 表的相应记录都消失了
修改密码
alter 和 set
root用户修改指定普通用户密码
alter user u identified by ‘密码’;
u: 由 用户名和主机名构成 ‘zen’@‘localhost’set password for u=‘密码’
u:由 用户名和主机名构成 ‘zen’@‘localhost’修改当前用户密码
alter user user() idenfited by ‘密码’;
user(): 返回是 当前登录用户的 用户名@主机名
密码管理
密码管理功能只针对使用基于MySQL授权插件的账号
这些插件如下:
mysql_native_password
sha256_password
caching_sha2_password
密码过期策略
手动设置 账号密码过期,也可以建立一个 自动 密码过期策略
过期策略 可以是 全局 也可以为 每个账号 设置单独的过期策略
手动设置立马过期
alter user ’zen‘@‘localhost’ password expire;
>
手动设置指定时间过期方式1 全局
default_password_lifetime 系统变量建立全局密码过期策略
默认值 0 : 禁用自动密码过期
允许正整数N,表示允许的密码生存期。密码必须 每隔N天 进行修改
set persist default_password_lifetime=180; ### 没写 global,默认是 session, 建立全局策略,设置密码每个180天过期
配置文件 my.ini 全局 ###重启才能生效
[mysqld]
default_password_lifetime=180单独设置 指定用户 过期策略
create user ‘xxx’@‘%’ identified by ‘密码’ password expire interval 90 DAY;
修改指定用户 密码过期时间
alter user ‘xxx’@‘%’ password expire interval 100DAY;###设置密码永不过期
create user ‘XXX’@‘localhost’ password expire never
alter ser ‘XXX’@‘localhost’ password expire never
延用全局密码过期策略
create user ‘XXX’@‘localhost’ password expire default
alter ser ‘XXX’@‘localhost’ password expire default
密码重用策略
mysql限制使用已用过的密码。 重用限制策略基于 密码更改的数量和使用的时间,
重用策略可以是 全局 的,也可以为每个账号设置 单独的策略
mysql 使用 password_history 和 password_reuse_interval 系统变量设置密码重用策略
password_history : 规定密码重用的数量
password_reuse_interval: 规定密码重用的周期
这两个值 可以通过 my.ini 中维护 也可以在运行期间 通过 sql语句更改 变量的值 并持久化 persist方式1 使用sql
set persist password_hostiry=6; # 设置不能选择最近使用过的6个密码
set persist password_reuse_interval=365; # 设置不能选择最近一年内的密码方式2 my.ini
[mysqld]
password_history=6 # 设置不能选择最近使用过的6个密码
password_reuse_interval=365 # 设置不能选择最近一年内的密码手动设置密码重用方式2:单独设置 ,上面 设置 都是 全局的
create user ‘xx’@‘localhost’ password history 5;
alter user ‘xx’@‘localhost’ password history 5;
create user ‘xx’@‘localhost’ password resuse interval 365 day;
alter user ‘xx’@‘localhost’ password resuse interval 365 day;
既不能使用最近5个密码,也不能使用365天内的密码
create user ’XXX‘ @’localhost‘
identified by ’密码‘
password history 5
reuse interval 365;alter user ’XXX‘ @’localhost‘
password history 5
reuse interval 365 day;延后全局策略
create user ’XXX‘ @’localhost‘
identified by ’密码‘
password history default
reuse interval default;alter user ’XXX‘ @’localhost‘
password history default
reuse interval 365 default;
授权
语法格式:
grant 权限列表 on 库名.表名 to 用户名@‘客户端主机’
[identified by ‘密码’] [with grant option];
grant all privileges on . to root@“IP地址” identified by ‘密码’ with grant option;
all privileges: 表示所有权限。
identified by:指定用户的登录密码
with grant option表示该用户可以将自己拥有的权限授权给别人。
grant 权限叠加
grant select on zen.employee to ‘xx’@’%‘ ;
grant update on zen.employee to ‘xx’@’%‘ ;
所以 zen 用户 拥有 select 和update 权限
– 查看当前用户(自己)权限
show grants;
show grants for current_user;
show grants for current_user();查看指定用户的权限
show grants for dba@localhost;
权限收回
revoke 收回权限之后,用户账户的记录将从 db、host、tables_priv和 columns_priv 表中删除,但用户账户记录仍然存在 user表中
要删除user表中记录 需要 drop user语句
revoke all privileges on . from dba@localhost;
revoke 权限列表 on 数据库.表 from 用户名@localhost;
回收之后,对应用户需要重新进入。
权限表
- user
- db
- tables_priv
- columns_priv