1.创建用户
由于 MySQL中所有用户的信息都保存在 mysql.user表中.
创建用户可以直接利用root用户登录 MySQL服务器后,向 mysql.user表中插入记录,但是在开发中为保证数据的安全,并不推荐使用此方式创建用户
采用 MySQL提供的 CREATE USER语句创建用户.
采用 MySQL提供的 GRANT语句创建用户,在讲解权限时讲解
使用 CREATE USER语句每创建一个新用户,都会在 mysql. user表中添加一条记录,同时服务器会自动修改相应的授权表.
该语句创建的新用户默认情况下没有任何权限,需要使用 GRANT进行授权
CREATE USER [IF NOT EXISTS] 账户名 [用户身份验证选项][,账户名[用户身份验证选项]]…
[WITH 资源控制选项]密码管理选项丨账户锁定选项]
CREATE USER 语句选项的默认值
用户身份验证选项的设置仅适用于其前面的用户名,可将其理解为某个用户的私有属性.
其余的选项对声明中的所有用户都有效,可以将其理解为全局属性.
常见的6种创建用户方式:
- 创建简单的用户
Create User 'test1';
#查看用户是否已创建
Select host,user From mysql.user;
host的值为"%"表示任何主机,其值为 localhost时,表本地主机,其值为空字符串(’ ')时,表示所有客户端。
- 创建含有密码的用户
Create user 'test2'@'localhost' Identified By '123456';
#查看用户的密码
Select plugin,authentication_String
From mysql.user Where user='test2';
在设置用户密码时还可以指定对密码加密的插件,只需将" IDENTIFIED BY·明文密码"修改为指定的选项即可。
IDENTIFIED WITH验证插件名BY明文密码:
Create user 'test2'@'localhost'
Identified With 'mysql_native_password' By '123456';
IDENTIFIED WITH关键字指明验证密码的插件名.
关键字BY后跟明文的密码.
- 同时创建多个用户:
Create User 'test3'@'localhost'
Identified By '333333',
'test4'@'localhost'Identified By '444444';
多个用户之间使用逗号分隔
在创建每个用户时可以单独为其设置密码,省略用户身份验证选项时,表明此用户在登录服务器时可以免密登录,但为了保证数据安全,不推荐用户这样做.
- 在创建用户时,可以添加WITH直接为用户指定可操作的资源范围,如登录的用户在一小时内可以查询数据的次数等.
MAX_USER_CONNECTIONS选项的值为0时,服务器将根据max_user_connections系统变量的值确定用户的同时连接数,若此变量值也为0,表示对该用户没有限制,与表中前三个选项的默认值含义相同.
MAX_QUERIES_PER_HOUR选项不会计算从缓存中查询数据的次数
限制其每小时最多可以更新10次:
Create user 'test5'@'localhost'
Identified By '555555'
With Max_updates_per_hour 10;
#查看user表中max_updates字段
Select max_updates From user Where user='test5';
- 在创建用户时,不仅可以为用户设置密码,还可以为密码设置有效时间.
在重置用户密码时,操作的用户必须要有全局的 CREATE USER权限或mysql数据库的 UPDATE特权.
设置用户密码每180天更改一次:
Create user 'test6'@'localhost'
Identified By '666666' Password Expire
Interval 180 Day;
- 利用 ACCOUNT关键字可以为创建的用户设置是否被锁定.
它有两个可选值,分别为LOCK(锁定)和UNLOCK(解锁).
创建一个锁定状态的用户:
Create user 'test7'@'localhost'
Identified By '777777' Password Expire Account Lock;
#查看user表的account locked 字段
Select account_locked From mysql.user
Where user='test7';
2.设置密码
除了创建用户的同时设置密码外,还可为没有密码的用户、密码过期的用户或为指定用户修改密码。
- ALTER USER账户名 IDENTIFIED BY ‘明文密码’;
- SET PASSWORD[FOR账户名]=‘明文密码’;
- SET PASSWORD[FOR账户名]= PASSWORD(‘明文密码’);
为指定用户设置密码:
Alter User 'test1'@'%' Identified By '123456';
为登录用户设置密码:
Alter User User()Identified By '000000';
Select Current_user();
3.修改用户
用户创建完成后,管理员可以通过 MySQL提供的专门SQL语句修改用户的密码丶身份验证的方式、资源限制丶密码的属性、以及账户的锁定和解锁的状态.
ALTER USER [IF EXISTS] 账户名[用户身份验证选项][,账户名[用户身份验证选项]][WITH 资源限制选项][密码管理选项|账户锁定选项]
ALTER USER可同时修改一个或多个用户,多个用户之间使用逗号(,)分隔。
语法中选项的可选值与创建用户时的选项完全相同.
每个修改的用户,都会更新其在 mysql.user表中对应的字段值,而未修改的字段仍然保留它原来的值.
修改用户验证插件丶密码以及密码过期时间:
Alter User test1 Identified
With sha256_password By '111111' Password Expire;
查看修改后用户的密码:
Select authentication_string From mysql.user
Where user='test1' And plugin='shan256_password';
解锁用户:
Alter user 'test7'@'localhost' Account Unlock;
同时修改多个用户资源:
Alter User 'test' Identified
With mysql_native_password,
'test2'@'localhost' Identified By '222222'
With max_user_connections 2;
4.删除用户
DROP USER[ IF EXISTS]账户名[,账户名]…;
Drop User If Exists test7;
在删除账户时,如果省略主机地址,则默认为’%’.