• 环境基于Centos7.6

1.user表作用

通常用户信息、修改用户的密码、删除用户及分配权限等就是在mysql数据库的user表中。

2.user表查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
mysql> select * from mysql.user\G
*************************** 1. row ***************************
Host: localhost
User: root
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
Create_tablespace_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
password_expired: N
password_last_changed: 2021-04-12 22:41:17
password_lifetime: NULL
account_locked: N
*************************** 2. row ***************************
Host: localhost
User: mysql.session
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: Y
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
Create_tablespace_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE
password_expired: N
password_last_changed: 2021-03-31 01:16:25
password_lifetime: NULL
account_locked: Y
*************************** 3. row ***************************
Host: localhost
User: mysql.sys
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
Create_tablespace_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE
password_expired: N
password_last_changed: 2021-03-31 01:16:25
password_lifetime: NULL
account_locked: Y
3 rows in set (0.00 sec)

mysql>

3.user详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
mysql> select * from mysql.user\G
*************************** 1. row ***************************
Host: localhost #表示可以本地登录,即可以在服务器上登陆。如果是%,表示可以远程登录,并且是除服务器外的其他任何终端。如果是sv01,表示主机名为sv1可以登陆,sv01具体指的哪台机器,可以在cat /etc/hosts查看
User: root #用户
Select_priv: Y #确定用户是否可以通过SELECT命令选择数据。
Insert_priv: Y #确定用户是否可以通过INSERT命令插入数据。
Update_priv: Y #确定用户是否可以通过UPDATE命令修改现有数据。
Delete_priv: Y #确定用户是否可以通过DELETE命令删除现有数据。
Create_priv: Y #确定用户是否可以创建新的数据库和表。
Drop_priv: Y #确定用户是否可以删除现有数据库和表。
Reload_priv: Y #确定用户是否可以执行刷新和重新加载MySQL所用各种内部缓存的特定命令,包括日志、权限、主机、查询和表。
Shutdown_priv: Y #确定用户是否可以关闭MySQL服务器。在将此权限提供给root账户之外的任何用户时,都应当非常谨慎。
Process_priv: Y #确定用户是否可以通过SHOW PROCESSLIST命令查看其他用户的进程。
File_priv: Y #确定用户是否可以执行SELECT INTO OUTFILE(将查询结果输出保存到一个文件中)和LOAD DATA INFILE(把文件读取到数据库的某个表中)命令。
Grant_priv: Y #确定用户是否可以将已经授予给该用户自己的权限再授予其他用户。例如,如果用户可以插入、选择和删除foo数据库中的信息,并且授予了GRANT权限,则该用户就可以将其任何或全部权限授予系统中的任何其他用户。
References_priv: Y #目前只是某些未来功能的占位符;现在没有作用。
Index_priv: Y #确定用户是否可以创建和删除表索引。
Alter_priv: Y #确定用户是否可以重命名和修改表结构。
Show_db_priv: Y #确定用户是否可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库。可以考虑对所有用户禁用这个权限,除非有特别不可抗拒的原因。
Super_priv: Y #确定用户是否可以执行某些强大的管理功能,例如通过KILL命令删除用户进程,使用SET GLOBAL修改全局MySQL变量,执行关于复制和日志的各种命令。
Create_tmp_table_priv: Y #确定用户是否可以创建临时表。
Lock_tables_priv: Y #确定用户是否可以使用LOCK TABLES命令阻止对表的访问/修改。
Execute_priv: Y #确定用户是否可以执行存储过程。此权限只在MySQL 5.0及更高版本中有意义。
Repl_slave_priv: Y #确定用户是否可以读取用于维护复制数据库环境的二进制日志文件。此用户位于主系统中,有利于主机和客户机之间的通信。
Repl_client_priv: Y #确定用户是否可以确定复制从服务器和主服务器的位置。
Create_view_priv: Y #确定用户是否可以创建视图。此权限只在MySQL 5.0及更高版本中有意义。
Show_view_priv: Y #确定用户是否可以查看视图或了解视图如何执行。此权限只在MySQL 5.0及更高版本中有意义。
Create_routine_priv: Y #确定用户是否可以更改或放弃存储过程和函数。此权限是在MySQL 5.0中引入的。
Alter_routine_priv: Y #确定用户是否可以修改或删除存储函数及函数。此权限是在MySQL 5.0中引入的。
Create_user_priv: Y #确定用户是否可以执行CREATE USER命令,这个命令用于创建新的MySQL账户。
Event_priv: Y #确定用户能否创建、修改和删除事件。这个权限是MySQL 5.1.6新增的。
Trigger_priv: Y #确定用户能否创建和删除触发器,这个权限是MySQL 5.1.6新增的。
Create_tablespace_priv: Y #确定用户能否创建表空间。
ssl_type: #支持ssl标准加密安全字段
ssl_cipher: #支持ssl标准加密安全字段
x509_issuer: #支持x509规范字段
x509_subject: #支持x509标准字段
max_questions: 0 #每小时允许执行多少次查询:0表示无限制
max_updates: 0 #每小时可以执行多少次更新:0表示无限制
max_connections: 0 #每小时可以建立的多少次连接:0表示无限制
max_user_connections: 0 #单用户可以同时具有的连接数:0表示无限制
plugin: mysql_native_password #5.5.7开始,mysql引入plugins以进行用户连接时的密码验证,plugin创建外部/代理用户
authentication_string: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B #通过authentication_string可以控制两者的映射关系,(PAM plugin等,PAM可以支持多个服务名)
password_expired: N #密码是否过期。Y:说明该用户密码已过期 N:没有过期
password_last_changed: 2021-04-12 22:41:17 #上次修改密码时间
password_lifetime: NULL #密码有效期,null表示长期有效
account_locked: N #用户或表格上锁,N表示不上锁。上锁语句:update mysql.user set account_locked='Y' where user='root',上锁后修改的时候可能会触发安全模式报警。

4.常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
查询所有用户
mysql> select Host,User,Password from user;
查询用户权限:all表示所有权限,select表示只查权限,update表示只改权限,delete表示只删权限等。
mysql> show grants for "user"@"host";
mysql> show grants for "root"@"localhost";
添加授权用户(新创建的用户,默认情况下是没有任何权限的):使用root用户连接到服务器
mysql> create user "用户名"@"IP地址" identified by "密码";
mysql> create user "haidon"@"%" identified by "123456";
mysql> create user "haidon"@"localhost" identified by "123456";
IP地址的表示方式:
1.% 表示用户可以从任何地址连接到服务器
2.localhost 表示用户只能从本地连接到服务器
3.指定一个ip表示用户只能从此ip连接到服务器
分配用户权限(给用户授权)
mysql> grant 权限列表 on 库.表 to "用户名"@"ip地址" with grant option;
mysql> grant all privileges on *.* to "haidon"@"%" with grant option;
mysql> grant all privileges on *.* to "haidon"@"%" identified by 'test' with grant option;
mysql> grant all privileges on domain_check.tb_user to "haidon"@"localhost" with grant option;
mysql> grant select on domain_check.tb_user to "haidon"@"localhost" with grant option;
mysql> grant select,insert on domain_check.tb_user to "haidon"@"132.24.98.25" with grant option;
1.权限列表:select、update、deleteinsertalterdropcreate、...(show)
2.库.表:*.*表示所有库的所有表。with grant option表示它具有grant权限。密码是test。
3.如果带了 with grant option,那么用户haidon可以将select ,update权限传递给其他用户( 如xiaodon)。
4.如果没带 with grant option,那么用户haidon不能给用户xiaodon授权。
5.all后面加上privileges,具体到哪些权限时得看MySQL版本,5.7版本不加privileges,8.0版本加privileges。
6.mysql> insert into user values("%","haidon",password("test"),"Y","Y","Y","Y","Y","Y","Y","Y","Y","Y");
mysql> flush privileges; 这两句和上面第3grant的效果是一样的。
7.mysql> insert into user (host,user) values("132.24.98.25","haidon");
mysql> insert into db values("132.24.98.25","haidon","Y","Y","Y","Y","Y","Y","N","N","N","N")
mysql> flush privileges; 这三句和上面第6grant的效果是一样的。
收回用户权限
mysql> revoke all on *.* from "haidon"@"localhost";
mysql> revoke all on domain_check.tb_user from "haidon"@"localhost";
mysql> revoke select on *.* from "haidon"@"localhost";
删除授权用户
mysql> drop user "用户名"@"ip地址"
mysql> drop user "haidon"@"%"
mysql> delete from user where user='haidon';
mysql> flush privileges;