MySQL5.7用户权限管理

MySQL5.7用户即权限管理

MySQL5.7修改了很多新特性, 特别是在用户管理方面, 已经截然不同.
注释:
    部分新特性
        # mysql_native_password详解
        mysql.user表新增plugin列,且若某账户该字段值为空则账户不能使用。从低版本MySQL升级至MySQL5.7时要注意该问题,且建议DBA将使用mysql_old_password插件的账户替换为使用 mysql_native_password插件。
        意为者设置账户后,要用update user set plugin="mysql_native_password"; 来设置一下.
    
        特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了
        而是将加密后的用户密码存储于 authentication_string 字段,这就意味着,设置密码时要用这个字段来指定密码.
        
每次创建新用户必须刷新权限表:
     flush privileges;
mysql 新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动mysql服务器,来使新设置生效
  • 部分参数解释
user: 登录的用户名
host: 指定可以访问的地址 %为任意地址
authentication_string: 登录密码

privileges: 权限,可指定,SELECT, INSERT, UPDATE,CREATE....之类的.对库或表的权限,ALL代表所有权限.
databasename.tablename: 指定权限针对XX库下的XX表; databasename.*代表整个库; *.*代表整个MySQL.




  • 进入用户管理库
use mysql
进入系统资源库.

该库存储着MySQL系统配置,函数,用户权限等等.
该库中的user表, 存储着管理员.
  • 查看用户
SELECT 字段 FROM user WHERE 条件
如:
    SELECT user,host,authentication_string FROM mysql.user WHERE user='root';

  • 修改用户
# 如果在修改时提示
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

这是因为MySql运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命令。

1、show variables like 'SQL_SAFE_UPDATES';查看开关状态。

2、执行命令SET SQL_SAFE_UPDATES = 0;修改下数据库模式即可

# 这里的password()是一个MySQL的函数select password("字符串");可以对字符串进行不可逆的加密.
# 用这种方式的话,必须配合password()函数进行加密操作
UPDATE mysql.user SET authentication_string=password('MyPassword') WHERE user='userName';
# MySQL5.7新特性
update mysql.user set plugin="mysql_native_password";
# 刷新新的权限表
flush privileges;

如:
    #此处的where条件后面不是必须同时指定USER和host.如果非必要的话, 不用同时指定两个.
    update mysql.user set authentication_string=password('sss') where user='root';
    #将root用户修改为允许任意来源的连接,这里必须用%,用0.0.0.0不生效
    UPDATE mysql.user SET host='%' where user='root';
    update mysql.user set plugin="mysql_native_password";
    flush privileges;

# 5.7以后推荐下面这两种方式,下面两种执行后即可生效,不用执行flush privileges什么的.

# 这种的@前后都不能省去,不知道些什么可select一下user表,'用户'名@'作用域的HOST'host为%代表不限制
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

MySQL修改用户的密码主要有两种方法:ALTER USER 和SET PASSWORD

ALTER USER 基本使用

ALTER USER 'root'@'localhost' IDENTIFIED BY 'sss';
修改当前登录用户

ALTER USER USER() IDENTIFIED BY 'sss';
使密码过期

ALTER USER 'root'@'localhost' IDENTIFIED BY 'sss' PASSWORD EXPIRE;
使密码从不过期

ALTER USER 'root'@'localhost' IDENTIFIED BY 'sss' PASSWORD EXPIRE NEVER;
按默认设置过期时间

ALTER USER 'root'@'localhost' IDENTIFIED BY 'sss' PASSWORD EXPIRE DEFAULT;
指定过期间隔

ALTER USER 'root'@'localhost' IDENTIFIED BY 'sss' PASSWORD EXPIRE INTERVAL 90 DAY;
在MySQL文档里,推荐使用ALTER USER修改用户密码


SET PASSWORD 使用SET PASSWORD的password有两种:

使用默认加密
SET PASSWORD FOR 'root'@'localhost' = 'sss';

使用PASSWORD()函数加密
SET PASSWORD FOR 'root'@'localhost' = PASSWORD("sss");
注意:使用PASSWORD('auth_string')的方式已经被废弃,在以后的版本会把它移除,所以不建议使用它来修改密码。
    
  • 创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
 flush privileges;
如:
    CREATE USER 'liuhao'@'%' IDENTIFIED BY 'password';
     flush privileges;
     
每次创建新用户必须刷新权限表:
     flush privileges;
     
 否则登录时提示:ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: YES ) 

  • 删除用户
DROP USER 'Name'@'HOST'
如:
    DROP USER 'liuhao'@'localhost';
  • 查看用户权限
SHOW GRANTS FOR 'Name'@'Host';
如:
    SHOW GRANTS FOR 'root'@'localhost';

  • 授权
GRANT privileges ON databasename.tablename TO 'UserName'@'Host'

GRANT SELECT, INSERT, UPDATE ON test.user TO 'liuhao'@'localhost';

注释:
    权限: ALL代表所有权限
    库表选择: *.*代表整个MySQL

  • 撤销用户权限
REVOKE privilege ON databasename.tablename FROM 'username'@'host';

用法和授权相同
如:
 REVOKE SELECT ON test.user FROM 'liuhao'@'localhost';
 将该用户的权限设置为只查.基本上就是用来连库, 啥也干不了.
 
 注释:
    搜来搜去只能这个干.
    如果要彻底清掉, 可以直接删除该用户.
  • 添加用户同时授权
 grant 权限 privileges on 库名.表名 to 用户名@域名 identified by '密码';
 
 如:
    GRANT all privileges on *.* to 'liuhao'@'localhost' identified by 'password';
 
 # 必须执行, 刷新权限表.
 flush privileges;

转载于:https://my.oschina.net/chinaliuhan/blog/3065288

你可能感兴趣的:(MySQL5.7用户权限管理)