1. MySQL软件所提供的权限(权限表)


1.1 user表
> use mysql;
> select * from user \G #查看所有的用户信息

1.2 db表和host表
> desc db;
> desc host;

1.3 table_priv表和columns_priv表
> select * from tables_priv;
> desc columns_priv;

1.4 procs_priv表
> desc procs_priv;

2. 账户管理

2.1 登录和退出MySQL服务器


#设置环境变量
C:\Users\px>set path=C:\Program Files\MySQL\MySQL Server 5.7\bin

#登录MySQL(两种方式)
C:\Users\px>mysql -h localhost -u root -p
C:\Users\px>mysql -h 127.0.0.1 -u root -p
或者C:\Users\px>mysql -h localhost -u root -p*****,在-p后面直接接密码,不许有空格。

#登录MySQL中的一个数据库
C:\Users\px>mysql -h localhost -u root -p company

#登录MySQL中的一个数据库company并查询表t_dept中所有数据记录
C:\Users\px>mysql -h localhost -u root -p company -e "select * from t_dept";
注意:-e后面的执行语句要双引号。

2.2 创建普通用户账号
(1)用create user 语句来创建用户账号
> create user 'coffee'@'localhost' identified by '123456';
#用新建的一个用户coffee登录,密码是123456,
C:\Users\px>mysql -h localhost -u coffee -p
#观察coffee登录后的一些相关信息
> show user();
> show databases; #可以尝试能否建立一个数据库


#如果只指定用户名部分’coffee’,则主机名部分则默认为’%’
#若省略identified by,则登录不需要密码
> create user 'coffee'@'localhost';

之前的密码是MySQL服务端使用的内建的身份验证机制,用户登录时不能指定密码。可以使用password()设置密码


#使用密码的哈希值设置密码
> select password('123456');
> create user 'coffee2'@'localhost' identified by
> password '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';


(2)用Grant 语句来创建用户账号
注意:create user语句创建的新用户没有任何权限,还需要使用grant语句赋予用户权限。

mysql> grant select on company.t_dept to 'testuser'@'localhost'
    -> identified by '123456';


2.3 删除普通用户账号
(1)使用drop user语句删除用户
#使用drop user,必须拥有MySQL数据库的全局create user权限和delete权限。
> drop user 'testuser'@'localhost';
> select * from user \G; #查看,或用> select host, user from user;
> drop user; #删除来自所有授权表的账户权限记录

(2)使用delete语句删除用户
> delete from mysql.user where host='localhost' and user='coffee2';

2.4 root用户修改自己的密码


(1)通过mysqladmin命令修改root用户密码
C:\Users\px>mysqladmin -u root -p password "123456",注意,此处用双引号。

(2)通过set命令修改root用户密码
Mysql>set password=password(“111111”);

(3)通过mysql.user数据记录修改root用户密码
>USE MYSQL;
> UPDATE USER SET authentication_string=PASSWORD("123456")
WHERE USER='ROOT' AND HOST='LOCALHOST';

> flush privileges; #重新加载权限,则可以用新的密码登录root用户了


2.5 root用户修改普通用户的密码

(1)通过set命令修改coffee用户密码
Mysql> set password for 'coffee'@'localhost'=password("coffee");

(2)通过grant命令修改coffee用户密码
mysql> grant select, create, drop on *.* to
-> 'coffee'@'localhost' identified by '123456';

2.6普通用户修改密码
普通用户登录Mysql服务器之后,通过set语句设置自己的密码
> set password=password("123456");

2.7 root 用户密码丢失的解决方法
(1)使用--skip-grant-tables选项启动MySQL服务


3. 账户管理

3.1 MySQL的各种权限

账号权限信息被存储在MySQL数据库的user、db、host、tabes_priv、columns_priv和procs_priv表中。

3.2 授权
(1)全局层级:grant all on *.*和revoke all on *.*
(2)数据库层级 grand all on db_name 和revoke all on db_name
(3)表层级 grand all on db_name.tbl_name 和revoke all on db_name.tbl_name
(4)列层级
(5)子程序层级

#使用grant语句创建一个新的用户grantuser, 密码是”grantpwd”。用户grantuser对所有的数据有查询、插入权限,并属于grant权限。
mysql> grant select,insert on *.* to 'grantuser'@'localhost'
identified by 'grantpwd' with grant option;


#使用select查看权限
mysql> select host,user,select_priv, insert_priv, grant_priv from
 mysql.user where user='grantuser';

#使用revoke语句取消用户grantuser的更新权限。
> revoke update on *.* from 'grantuser'@'localhost';


#使用select语句查询用户的权限
mysql> select host,user,select_priv, update_priv, grant_priv from
    mysql.user where user='grantuser';


3.3 查看权限

>Show grants for 'grantuser'@'localhost';