一、用户与权限简介
1.用户列
user表的用户列包括host、user、authentication_string,分别表示主机名、用户名和加密后的密码。其中user和host为user表的联合主踺。当用户与服务器之间建立连接时,输入的账户信息中的用户名称、主机名和密码必须匹配user表中对应的字段,只有3个值都匹配时,才允许连接的建立。这3个字段的值就是创建账户时保存的账户信息。修改用户密码时,实际就是修改user表的authentication_string字段的值。
2.权限列
权限列的字段决定了用户的权限,描述了在全局范围内允许对数据和数据库进行的操作。包括查询权限、修改权限等普通权限,还包括了关闭服务器、超级权限和加载用户等高级权限。
普通权限用于操作数据库;
高级权限用于数据库管理。
user表中对应的权限是针对所有用户数据库的。这些字段值的类型为ENUM,可以取的值只能为Y和N,Y表示该用户有对应的权限;N表示用户没有对应的权限。查看user表的结构可以看到,这些字段的值默认都是N。如果要修改权限,可以使用GRANT语句或UPDATE语句更改user表的这些字段来修改用户对应的权限。
3.安全列
安全列只有6个字段,其中两个是SSI相关的,2个是x509相关的,另外2个是授权插件相关的。SSI用于加密;X509标准可用于标识用户;Plugin字段标识可以用于验证用户身份的插件,如果该字段为空,服务器使用内建授权验证机制验证用户身份。可以通过show variables like 'have_openssl’语句来查询服务器是否支持SSI功能。
mysql> show variables like 'have_openssl';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl | YES |
+---------------+-------+
1 row in set (0.00 sec)
4.资源控制列
资源控制列的字段用来限制用户使用的资源,包含4个字段,分别为:
(1)Max_questions
用户每小时允许执行的查询操作次数。
(2)Max_updates
用户每小时允许执行的更新操作次数。
(3)Max_connections
用户每小时允许执行的连接操作次数。
(4)Max_user_connections
用户允许同时建立的连接次数。
注意:一个小时内用户查询或者连接数量超过资源控制限制,用户将被锁定,直到下一个小时,才可以再次执行对应的操作。可以使用GRANT语句更新这些字段的值。
5.db表和host表
db表和host表是MYSQL数据库中非常重要的权限表。
db表中存储了用户对某个数据库的操作权限,决定用户能从哪个主机存取哪个数据库。
host表中存储了某个主机对数据库的操作权限,配合db权限表对给定主机上数据库级操作权限做更细致的控制。
这个权限表不受GRANT和REVOKE语句的影响。db表比较常用,host表一般很少使用。db表和host表结构相似,字段大致可以分为两类:用户列和权限列。
二、新建普通用户
1.使用CREATE USER语句创建新用户
CREATE USER [IF NOT EXISTS]
user [auth_option] [, user [auth_option]] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH resource_option [resource_option] ...]
[password_option | lock_option] ...
user:
(see )
auth_option: {
IDENTIFIED BY 'auth_string'
| IDENTIFIED WITH auth_plugin
| IDENTIFIED WITH auth_plugin BY 'auth_string'
| IDENTIFIED WITH auth_plugin AS 'auth_string'
| IDENTIFIED BY PASSWORD 'auth_string'
}
tls_option: {
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
}
resource_option: {
MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
}
password_option: {
PASSWORD EXPIRE
| PASSWORD EXPIRE DEFAULT
| PASSWORD EXPIRE NEVER
| PASSWORD EXPIRE INTERVAL N DAY
}
lock_option: {
ACCOUNT LOCK
| ACCOUNT UNLOCK
}
CREATE USER user_specification [,user_specification] ... user_specification: user@host [ IDENTIFIED BY
[PASSWORD] 'password' | IDENTIFIED WITH auth_plugin [AS 'auth_string']]
参数解释
User:表示创建的用户的名称;
host:表示允许登陆的用户主机名称;
IDENTIFIED BY:表示用来设置用户的密码;
[PASSWORD]:表示使用哈希值设置密码;
'password':表示用户登陆时使用的普通明文密码;
IDENTIFIED WITH:表示用户指定一个身份验证插件;
auth_plugin:是插件的名称;
'auth_string':是可选的字符串,解释插件的意义;
查看用户
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: *204C8A3B79DC1533866049F6819865291C5E6AD5
password_expired: N
password_last_changed: 2020-11-22 12:57:08
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: 2020-11-22 12:57:05
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: 2020-11-22 12:57:05
password_lifetime: NULL
account_locked: Y
3 rows in set (0.00 sec)
忽略密码限制
mysql> show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM |
| validate_password_special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.00 sec)
#把validate_password_policy改为low即可
mysql> set global validate_password_policy="low";
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 1 |
+--------------------------------------+-------+
7 rows in set (0.00 sec)
创建用户tom
mysql> create user tom@localhost identified by '123';
Query OK, 0 rows affected (0.00 sec)
mysql> create user test@localhost;
Query OK, 0 rows affected (0.00 sec)
#如果不指定则无密码
哈希加密
mysql> select password('123');
+-------------------------------------------+
| password('123') |
+-------------------------------------------+
| *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> create user tom1@localhost identified by password '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257';
Query OK, 0 rows affected, 1 warning (0.00 sec)
2.使用grant语句创建新用户
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user [auth_option] [, user [auth_option]] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH {GRANT OPTION | resource_option} ...]
GRANT PROXY ON user
TO user [, user] ...
[WITH GRANT OPTION]
object_type: {
TABLE
| FUNCTION
| PROCEDURE
}
priv_level: {
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
}
user:
(see https://dev.mysql.com/doc/refman/5.7/en/account-names.html)
auth_option: {
IDENTIFIED BY 'auth_string'
| IDENTIFIED WITH auth_plugin
| IDENTIFIED WITH auth_plugin BY 'auth_string'
| IDENTIFIED WITH auth_plugin AS 'auth_string'
| IDENTIFIED BY PASSWORD 'auth_string'
}
tls_option: {
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
}
resource_option: {
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
}
GRANT privileges ON db.table To user@host [identified by ‘password’] [,user[identified by ‘password’]] [with grant option];
参数解释
Privileges:表示赋予用户的权限类型;
db.table:表示用户的权限所作用的数据库中的表;
identified by:关键字用来设置密码;
‘password’:用户的密码;
[with grant option]:可选项,表示对新建立的用户赋予GRANT权限。
创建用户
mysql> grant select,update on *.* to tom2@localhost identified by '123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
查看用户
mysql> select * from mysql.user where user='tom2' and host='localhost'\G
*************************** 1. row ***************************
Host: localhost
User: tom2
Select_priv: Y
Insert_priv: N
Update_priv: Y
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: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
password_expired: N
password_last_changed: 2020-12-29 18:16:37
password_lifetime: NULL
account_locked: N
1 row in set (0.00 sec)
使用flush告诉服务器重新加载授权
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
提示:直接使用insert语句进行权限修改时,需要使用flush privileges把修改后的内容写入缓存,grant语句修改会自动存入user表,因此不需要。
三、删除普通用户
1.使用DROP USER语句删除用户
mysql> drop user tom2@localhost;
Query OK, 0 rows affected (0.00 sec)
2.使用delete语句删除用户
mysql> delete from mysql.user where host='localhost' and user='tom1';
Query OK, 1 row affected (0.00 sec)
四、root用户修改自己的密码
1.使用mysqladmin在命令行指定新密码
mysqladmin -u username -h localhost -p password “newpassword”
username:要修改的用户名
-h:需要修改哪个主机
-p:输入当前的密码
“newpassword”:新密码
[root@localhost ~]# mysqladmin -u root -h localhost -pasd123 password '123'
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
2.修改mysql数据库的user表
mysql> update mysql.user set authentication_string=password('321') where user='root' and host='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
3.使用set语句修改root用户的密码
mysql> set password=password('asd123');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
五、root用户修改普通用户密码
1.使用set语句来修改普通用户的密码
mysql> set password for tom@localhost=password('asd123');
Query OK, 0 rows affected, 1 warning (0.00 sec)
2.使用update语句修改普通用户密码
mysql> update mysql.user set authentication_string=password('123') where user='tom' and host='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
3.使用grant语句修改普通用户密码
mysql> grant all on *.* to tom@localhost identified by '123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
4.普通用户修改密码需先登录
[root@localhost ~]# mysql -utom -p123
mysql> set password=password('asd123');
Query OK, 0 rows affected, 1 warning (0.00 sec)
六、root用户密码丢失的解决办法
1.使用参数–skip-grant-tables选项启动mysql服务
[root@localhost bin]# systemctl stop mysqld
[root@localhost bin]# mysqld --skip-grant-tables -u root #会卡在终端
[root@localhost ~]# pkill mysqld #另一台终端执行此命令结束终端卡住的问题
[root@localhost ~]# mysql -uroot #另一台终端可以不需要密码登录,登录之后记得改密码。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.32 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> update mysql.user set authentication_string=password('asd123') where user='root' and host='localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 1
七、权限管理
主要是对登陆到MySQL的用户进行权限验证。所有用户的权限都存储在MySQL的权限表中,不合理的权限规划会给MySQL服务器带来安全隐患。MySQL权限系统的主要功能是证实连接到一台给定主机的用户,并赋予该用户在数据库上SELECT\INSERT\UPDATE和DELETE权限。账户权限信息被存储在MySQL数据库的user、db、tables_priv、columns_priv和procs_priv表中。在MySQL启动时,服务器将这些数据库表中权限信息的内容读入内存。
权限 | 权限范围 |
---|---|
CREATE | 数据库、表或索引 |
DROP | 数据库、表或视图 |
GRANT OPTION | 数据库、表 |
REFERENCES | 数据库、表 |
EVENT | 数据库 |
ALTER | 数据库 |
DELETE | 表 |
INDEX | 表 |
INSERT | 表 |
SELECT | 表或列 |
UPDATE | 表或列 |
CREATE TEMPORARY TABLES | 表 |
LOCK TABLES | 表 |
TRIGGER | 表 |
CREATE VIEW | 视图 |
SHOW VIEW | 视图 |
FILE | 访问服务器上的文件 |
RELOAD | 访问服务器上的文件 |
SHUTDOWN | 服务器管理 |
PROCESS | 函数 |
CREATE USER | 服务器管理 |
SHOW DATABASES | 服务器管理 |
REPLICATION SLAVE | 服务器管理 |
REPLICATION CLIENT | 服务器管理 |
1.权限解释
(1)CREATE和DROP权限
可以创建新数据库和表,或删除(移掉)己有数据库和表。如果将MySQL数据库中的DROP权限授予某用户,用户可以删掉MySQL访问权限保存的数据库。
(2)SELECT、INSERT、UPDATE和DELETE权限
允许在一个数据库现有的表上实施操作。
(3)SELECT权限
只有在它们真正从一个表中检索行时才被用到。
(4)INDEX权限
允许创建或删除索引,INDEX适用己有表。如果具有某个表的CREATE权限,可以在CREATE TABLE语句中包括索引定义。
(5)ALTER权限
可以使用ALTER TABLE来更改表的结构和重新命名表。
(6)CREATE ROUTINE权限
创建保存的程序(函数和程序),ALTER ROUTINE权限用来更改和删除保存的程序,EXECUTE权限用来执行保存的程序。
(7)GRANT权限
允许授权给其他用户。可用于数据库、表和保存的程序。
(8)FILE权限
给予用户使用LOAD DATA INFILE和SELECT... INTO OUTFILE语句读或写服务器上的文件,任何被授予FILE权限的用户都能读或写MySQL服务器上的任何文件。
(说明用户可以读任何数据库目录下的文件,因为服务器可以访问这些文件)。FILE权限允许用户在MySQL服务器具有写权限的目录下创建新文件,但不能覆盖己有文件。
2.授权
授权就是为某个用户授予权限。合理的授权可以保证数据库的安全。MySQL中可以使用GRANT语句为用户授予权限。
授予的权限的层级划分
(1)全局层级
全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANT ALL ON . 和REVOKE ALL ON . 只授予和撤销全局权限。
(2)数据库层级
数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANT ALL ON db_name.*和REVOKE ALL ON db_name.* 只授予和撤销数据库权限。
(3)表层级
表权限适用于一个给定表中的所有列。这些权限存储在mysql.tables_priv表中。GRANT ALL ON db_name.tb1_name和REVOKE ALL ON db_name.tb1_name只授予和撤销表权限。
(4)列层级
列权限适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时,必须指定与被授权列相同的列。
(5)子程序层级
CREATE ROUTINE、ALTER ROUTINE、EXCUTE和GRANT权限适用于己存储的子程序。
这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予子程序层级,并存储在mysql.procs_priv表中。
在MySQL中,必须是拥有GRANT权限的用户才可以执行GRANT语句。要使用GRANT或REVOKE,必须拥有GRANT OPTION权限,并且必须用于正在授予或撤销的权限。
3.GRANT语法格式
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user [auth_option] [, user [auth_option]] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH {GRANT OPTION | resource_option} ...]
GRANT PROXY ON user
TO user [, user] ...
[WITH GRANT OPTION]
object_type: {
TABLE
| FUNCTION
| PROCEDURE
}
priv_level: {
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
}
user:
(see https://dev.mysql.com/doc/refman/5.7/en/account-names.html)
auth_option: {
IDENTIFIED BY 'auth_string'
| IDENTIFIED WITH auth_plugin
| IDENTIFIED WITH auth_plugin BY 'auth_string'
| IDENTIFIED WITH auth_plugin AS 'auth_string'
| IDENTIFIED BY PASSWORD 'auth_string'
}
tls_option: {
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
}
resource_option: {
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
}
4.GRANT OPTION的取值意义
(1)GRANT OPTION将自己的权限赋予其他的用户;
(2)MAX_QUERIES_PER_HOUR count设置每个小时可以执行count次查询;
(3)MAX_UPDATES_PER_HOUR count设置每个小时可以执行count次更新;
(4)MAX_CONNECTIONS_PER_HOUR count设置每个小时可以建立count个连接;
(5)MAX_USER_CONNECTIONS count设置单个用户可以同时建立count个连接;
5.创建权限并查看
mysql> grant select,insert on *.* to tom@localhost identified by 'asd123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> select host,user,select_priv,insert_priv,grant_priv from mysql.user where user='tom' and host='localhost';
+-----------+------+-------------+-------------+------------+
| host | user | select_priv | insert_priv | grant_priv |
+-----------+------+-------------+-------------+------------+
| localhost | tom | Y | Y | N |
+-----------+------+-------------+-------------+------------+
1 row in set (0.00 sec)
6.收回权限
取消已经赋予用户的某些权限。收回用户不必要的权限可以在一定程度上保证系统的安全性。MySQL中使用REVOKE语句取消用户的某些权限,使用REVOKE收回权限之后,用户账号的记录将从db,host,user,tables_priv和columns_priv表中删除,但是用户账号记录仍然在user表中保存(删除user表中的账户记录,用DROP USER语句)。
REVOKE语句有两种用法
第一种是收回所有用户的所有权限,此语法用于取消对已命名的用户的所有全局层级,数据库层级,表层级和列层级的权限。
REVOKE ALL [PRIVILEGES], GRANT OPTION
FROM user [, user] ...
第二种语法是长格式的REVOKE语句
REVOKE
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [, user] ...
回收权限并查看
mysql> revoke insert on *.* from tom@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user,select_priv,insert_priv,grant_priv from mysql.user where user='tom';
+-----------+------+-------------+-------------+------------+
| host | user | select_priv | insert_priv | grant_priv |
+-----------+------+-------------+-------------+------------+
| localhost | tom | Y | N | N |
+-----------+------+-------------+-------------+------------+
1 row in set (0.00 sec)
7.查看权限
(1)show grants
查看当前用户权限
mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
(2)show grants for ‘user’@‘host’
可以显示指定用户的权限信息
mysql> show grants for root@localhost;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
(3)select语句
查看user表中的各个权限字段以确定用户的权限信息
语法格式
SELECT privileges_list FROM user WHERE user=’username’,host=’hostname’;
例如
mysql> select host,user,select_priv,insert_priv,grant_priv from mysql.user where user='tom' and host='localhost';
+-----------+------+-------------+-------------+------------+
| host | user | select_priv | insert_priv | grant_priv |
+-----------+------+-------------+-------------+------------+
| localhost | tom | Y | N | N |
+-----------+------+-------------+-------------+------------+
1 row in set (0.00 sec)