添加用户

1
2
create user 'username'@'host' identified by 'password'; -- 命令
create user 'tt'@'localhost' identified by '123456'; -- 例子
  • username 用户名
  • host 指定用户可以在哪个主机登录,localhost指只能在本地登录,改成%可以在任何一台电脑上登录
  • password 密码,可以为空,为空则不需要密码就可以登录

授权

1
2
3
grant privileges on databasename.tablename to 'username'@'host'; -- 命令
grant select on data1.table1 to 'tt'@'localhost'; -- 例子
grant all privileges on *.* to 'tt'@'%'; -- 例子
  • privileges 操作权限,如select/insert/update等,为all则表示所有操作权限
  • databasename 表示数据库名,可以为*,表示所有数据库
  • tablename 表示表名,可以为*,表示所有表

创建用户时授权

1
2
grant all privileges on *.* to 'tt'@'%' identified by '123456';
flush privileges;

必须执行flush privileges使权限生效

设置与修改用户密码

1
set password for 'tt'@'%' = '123456';

撤销权限

1
2
revoke privileges on databasename.tablename from 'username'@'host'; -- 命令
revoke update on data1.table1 from 'tt'@'%'; -- 例子

具体信息可以使用命令show grants for 'username'@'host'查看

可能遇到的问题

Your password does not satisfy the current policy requirements

由于mysql5.7默认安装了validate_password这个插件,这个问题与validate_password_policy的值有关。

validate_password_policy有以下取值:

Policy Tests Performed
0 or LOW Length
1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file

默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。

有时候,只是为了自己测试,不想密码设置得那么复杂,譬如说,我只想设置root的密码为123456。

必须修改两个全局参数:

首先,修改validate_password_policy参数的值

1
2
mysql> set global validate_password_policy = 0;
Query OK, 0 rows affected (0.00 sec)

这样,判断密码的标准就基于密码的长度了。这个由validate_password_length参数来决定。

1
2
3
select @@validate_password_length;

set global validate_password_length = 4;

validate_password_length最小值为4,如果你显性指定validate_password_length的值小于4,尽管不会报错,但validate_password_length的值将设为4。