使用与GRANT与REVOKE相同的格式为每个账户命名。
DROP USER不能自动关闭任何打开的用户对话。而且如果用户有打开的对话,此时取消用户,命令则不会生效,直到用户对话被关闭后才能生效,一旦用户对话被关闭,用户也被取消,此用户再次试图登录时将会失败

(2)使用DELETE语句删除用户

DELETE FROM mysql.user WHERE host=‘hostname’ and user=‘username’
host和user为user表中的两个字段,两个字段的组合确定所要删除的账户记录

4. root用户修改自己的密码

root用户拥有最高的权限,因此root用户的安全对于MySQL非常重要。修改root用户密码的方式有多种。

(1)使用 mysqladmin 命令在命令行指定新密码

mysqladmin -u username -h localhost -p password‘newpassword’username:为要修改密码的用户名称,在这里指定为root-h指需要修改的、对应哪个主机用户的密码,默认为localhostnewpassword:为新设置 的密码

(2)修改 mysql 数据库的 user 表

因为所有账户信息都保存在user表中,因此可以通过直接修改用户表来改变root用户的密码。root用户登录到MySQL服务器后,使用UPDATE语句修改mysql数据库的user表的password字段,从而修改用户的密码。
UPDATE mysql.user SET password=PASSWORD('newpassword') WHERE user='roow'and host='localhost'
执行完UPDATE语句后,也需要执行FLUSH PRIVILEGES 语句重载用户权限。

(3)使用SET语句修改root用户的密码

SET PASSWORD 语句重新设置其他用户的登录密码或者自己使用的账户的密码。
SET PASSWORD=PASSWORD('newpassword')新密码必须使用 PASSWORD 函数加密执行成功之后需要重新加载权限表

5. root用户修改普通用户权限

root用户拥有很高的权限,不仅可以修改自己的密码,还可以修改其他用户的密码。

(1)使用 SET 语句修改普通用户的密码

SET PASSWORD FOR 'user'@'host'=PASSWORD('newpassword');只有root可以通过更新mysql数据库的用户来更改其他用户的密码。如果使用普通用户修改,可省略FOR子句更改自己的密码。

(2)使用UPDATE语句修改普通用户的密码

同root使用UPDATE修改密码,执行UPDATE要使用FLUSH PRIVILEGES语句重新加载用户权限。

(3)使用 GRANT 语句修改普通用户密码

在全局级别使用GRANT USAGE语句(*.*)指定某个账户的密码而不影响账户当前的权限,使用GRANT语句修改密码,必须拥有GRANT权限,一般情况下最好使用该方法来指定或修改密码
GRANT USAGE ON \*.\* TO 'user'@'%'IDENTIFIED BY 'newpassword'
使用GRANT…IDENTIFIED BY 语句,会自动加密密码,不需要使用PASSWORD函数

6. 普通用户修改密码

普通用户登录MySQL之后,通过SET语句设置自己的密码。
SET PASSWORD=PASSWORD('newpassword');
三、权限管理
权限管理主要是对登录到MySQL的用户进行权限验证,所有用户的权限都存储在MySQL的权限表中,不合理的权限规划会给MySQL服务器带来安全隐患。MySQL权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的SELECT、INSERT、UPDATE和DELETE权限。

1. MySQL的各种权限

账户权限信息被存储在mysql数据库中。在服务启动时,将mysql数据库中的表中权限信息的内容读入内存
不同权限下可以使用的mysqladmin命令

2. 授权

授权就是为某个用户授予权限。合理的授权将保证数据库的安全。
授予的权限层级

权限说明
全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。
数据库层级适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host 表中。
表层级适用于一个给定表中的所有列。这些权限存储在mysql.tables_priv表中。
列层级适用于一个给定表中的单一列。这些权限保存在 mysql.columns_priv 表中。当使用REVOKE时,必须指定与被授权列相同的列。
子程序层级适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且CREATE ROUTINE外,这些权限可以被授予子程序层级,并存储在mysql.procs_priv

3. 收回权限

收回权限就是取消已经赋予用户的某些权限。MySQL中使用REVOKE语句取消用户的某些权限。使用REVOKE收回权限之后,用户账户的记录将从db、host、tables_priv 和columns_priv表中删除,但是用户账户仍然保存在user表中。
收回用户的所有权限 REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'user'@'host'[,'user'@'host'...]
REVOKE必须和FROM语句一起使用,FROM语句指明需要收回权限的账户
收回指定的权限 REVOKE priv_type[(columns)][,priv_type[(columns)]]... ON table1,table2,...ntablen FROM 'user'@'host'[,'user'@'host'...]priv_type:表示权限类型columns:表示权限作用于哪些列上,如果不指定,表示作用于整个表table1,table2,…ntablen:表示从哪个表中收回权限‘user’@’host’:表示用户账户
要使用REVOKE语句,必须拥有mysql数据库的全局CREATE USER权限或UPDATE权限。

4. 查看权限

SHOW GRANTS语句可以显示指定用户的权限信息。
SHOW GRANTS FOR 'user'@'host'
也可以使用SELECT语句查看user表中的各个权限以确定用户的权限信息。
SELECT privileges_list FROM user WHERE user='username' AND host='hostname'privileges_list 为想要查看的权限字段, 可以为select_priv、insert_priv等,根据需要选择查询的权限字段
四、访问控制
当MySQL允许一个用户执行各种操作时,它将首先核实该用户向MySQL服务器发送的连接请求, 然后确认用户的操作请求是否被允许。

1. 连接核实阶段

当连接MySQL服务器时,服务器基于用户的身份以及用户是否能通过正确的密码身份验证,来接受或拒绝连接。

2. 请求合适阶段

建立了连接之后,服务器进入访问控制的第二阶段。对在此连接的每个请求,服务器检查用户要执行的操作,然后检查是否有足够的权限来执行它,这也正是在授权表中的权限列发挥作用的地方。
MySQL请求核实流程图
MySQL通过向下层级的顺序检查权限表(从user表到columns_priv表),但并不是所有的权限都要执行该过程。另外,如果请求的权限操作不被允许,MySQL也不会继续检查下一层级的表。
根据mysql.user表字段的功能可将其分为6类 客户端访问服务器的账号字段 Host和User字段共同组成的复合主键用于区分MySQL中的账户。 User字段用于代表用户的名称。 Host字段表示允许访问的客户端IP地址或主机地址...

1.用户与权限概述

用户是数据库的使用者和管理者。
MySQL通过用户的设置来控制数据库操作人员的访问与操作范围。
服务器中名为mysqI的数据库,用于维护数据库的用户以及权限的控制和管理。
MySQL中的所有用户信息都保存在mysql.user数据表中。
根据mysql.user表字段的功能可将其分为6类
客户端访问服务器的账号字段
Host和User字段共同组成的复合主键用于区分MySQL中的账户。
User字段用于代表用户的名称。Host字段表示允许访问的客户端IP地址或主机地址。当Host的值为“*”时,表示所有客户端的用户都可以访问。mysql> SELEC Thost,userFROM mysql.user;
root:默认的超级用户。
session: MySQL5.7新增用户,用于用户身份验证。
sys:MySQL5.7新增用户,用于系统模式对象的定义,防止DBA(数据库管理员)重命名或删除root用户时发生错误。
身份验证字段
在MySQL5.7中,mysql.user表中已不再包含Password字段,而是使用plugin和authentication_string字段保存用户身份验证的信息。
plugin字段用于指定用户的验证插件名称。