mysql 5.7 权限_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;


版权声明:本文为weixin_32700139原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。