MySQL用户及权限小结

备注:测试数据库版本为MySQL 8.0

这个blog我们来聊聊MySQL用户及权限

一.MySQL用户和权限介绍

MySQL权限系统通过下面两个阶段进行认证:
1.对连接的用户进行身份认证,合法的用户通过验证,不合法的用户拒绝连接
查看mysql.user表的Host、User、
备注:MySQL 进行身份认证的时候,IP地址和用户名联合进行确认,所以root@localhost 和root@ip 会被MySQL视为不同的用户。
2.对通过认证的合法用户赋予相应的权限,用户可以在这些权限范围内对数据库做相应的操作。

权限相关表:
user(全局级别权限)
db(数据库级别权限)
tables_priv(表级别权限)
columns_priv(列级别的权限)
procs_priv (存储过程和函数的权限)

按照user,db,tables_priv,columns_priv的顺序进行验证。
即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;
如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。

二.MySQL权限

2.1.MySQL都有哪些权限

权限名对应授权表的列用途
All/All Privilegesall privileges权限代表全局或者全数据库对象级别的所有权限
AlterAlter_priv允许许修改表结构的权限,但必须要求有create和insert权限配合。如果是rename表名,则要求有alter和drop原表, create和insert新表的权限
Alter routineAlter_routine_priv允许修改或者删除存储过程、函数的权限
CreateCreate_priv允许创建新的数据库和表的权限
Create ROLECreate_role_priv允许创建角色
Create routineCreate_routine_priv允许创建存储过程、函数的权限
Create tablespaceCreate_tablespace_priv允许创建、修改、删除表空间和日志组的权限
Create temporary tablesCreate_tmp_table_priv允许创建临时表的权限
Create userCreate_user_priv允许创建、修改、删除、重命名user的权限
Create viewCreate_view_priv允许创建视图的权限
DeleteDelete_priv允许删除行数据的权限
DropDrop_priv允许删除数据库、表、视图的权限,包括truncate table命令
Drop roleDrop_role_priv允许删除角色
EventEvent_priv允许查询,创建,修改,删除MySQL事件
ExecuteExecute_priv代表允许执行存储过程和函数的权限
FileFile_priv允许在MySQL可以访问的目录进行读写磁盘文件操作,可使用的命令包括load data infile,select … into outfile,load file()函数
Grant optionGrant_priv允许此用户授权或者收回给其他用户你给予的权限,重新付给管理员的时候需要加上这个权限
IndexIndex_priv允许创建和删除索引
InsertInsert_priv是否允许在表里插入数据,同时在执行analyze table,optimize table,repair table语句的时候也需要insert权限
Lock TABLESLock_tables_priv允许对拥有select权限的表进行锁定,以防止其他链接对此表的读或写
ProcessProcess_priv允许查看MySQL中的进程信息,比如执行show processlist, mysqladmin processlist, show engine等命令
PROXYSee proxies_priv table想让某个用户具有给他人赋予权限的能力,那么就需要proxy权限了,远程用户也可以
ReferenceReferences_priv允许创建外键
ReloadReload_priv允许执行flush命令
Replication clientRepl_client_priv允许执行show master status,show slave status,show binary logs命令
Replication slaveRepl_slave_priv允许slave主机通过此用户连接master以便建立主从复制关系
SelectSelect_priv允许从表中查看数据,update、delete语句有where条件的也需要select权限
Show databasesShow_db_priv通过执行show databases命令查看所有的数据库名
Show viewShow_view_priv过执行show create view命令查看视图创建的语句
ShutdownShutdown_priv允许关闭数据库实例,执行语句包括mysqladmin shutdown
SuperSuper_priv允许执行一系列数据库管理命令
TriggerTrigger_priv允许创建,删除,执行,显示触发器的权限
UpdateUpdate_priv允许修改表中的数据的权限
Usage“no privileges”的同义词创建一个用户之后的默认权限,其本身代表连接登录权限

2.2 MySQl权限表数据字典

2.2.1 user表&&db表
表名userdb
范围列HostHost
UserUser
DB
权限相关列Select_privSelect_priv
Insert_privInsert_priv
Update_privUpdate_priv
Delete_privDelete_priv
Index_privIndex_priv
Alter_privAlter_priv
Create_privCreate_priv
Drop_privDrop_priv
Grant_privGrant_priv
Create_view_privCreate_view_priv
Show_view_privShow_view_priv
Create_routine_privCreate_routine_priv
Alter_routine_privAlter_routine_priv
Execute_privExecute_priv
Trigger_privTrigger_priv
Event_privEvent_priv
Create_tmp_table_privCreate_tmp_table_priv
Lock_tables_privLock_tables_priv
References_privReferences_priv
Reload_priv
Shutdown_priv
Process_priv
File_priv
Show_db_priv
Super_priv
Repl_slave_priv
Repl_client_priv
Create_user_priv
Create_tablespace_priv
Create_role_priv
Drop_role_priv
安全相关列ssl_type
ssl_cipher
x509_issuer
x509_subject
plugin
authentication_string
password_expired
password_last_changed
password_lifetime
account_locked
Password_reuse_history
Password_reuse_time
Password_require_current
User_attributes
资源控制相关列max_questions
max_updates
max_connections
max_user_connections

User权限表结构中的特殊字段:
Plugin,authentication_string字段存放用户认证信息
Password_expired设置成’Y’则表明允许DBA将此用户的密码设置成过期而且过期后要求用户的使用者重置密码(alter user/set password重置密码)
Password_last_changed作为一个时间戳字段代表密码上次修改时间,执行create user/alter user/set password/grant等命令创建用户或修改用户密码时此数值自动更新
Password_lifetime代表从password_last_changed时间开始此密码过期的天数
Account_locked代表此用户被锁住,无法使用

2.2.2 tables_priv表&&columns_priv表
表名tables_privcolumns_priv
范围列HostHost
DbDb
UserUser
Table_nameTable_name
Column_name
权限列Table_privColumn_priv
Column_priv
其它列TimestampTimestamp
Grantor

Tables_priv和columns_priv权限值

表名列名对应权限
tables_privTable_priv‘Select’, ‘Insert’, ‘Update’, ‘Delete’, ‘Create’, ‘Drop’, ‘Grant’, ‘References’, ‘Index’, ‘Alter’, ‘Create View’, ‘Show view’, ‘Trigger’
tables_privColumn_priv‘Select’, ‘Insert’, ‘Update’, ‘References’
columns_privColumn_priv‘Select’, ‘Insert’, ‘Update’, ‘References’
procs_privProc_priv‘Execute’, ‘Alter Routine’, ‘Grant’
2.2.3 procs_priv表
类别
范围列Host
Db
User
Routine_name
Routine_type
权限列Proc_priv
其它列Timestamp
Grantor

三. 用户权限信息管理

3.1 查看用户权限信息

-- 查看mysql有哪些用户
select user,host from mysql.user;
-- 查看已经授权给用户的权限信息 
show grants for root@'%';

执行记录:

mysql> -- 查看mysql有哪些用户
mysql> select user,host from mysql.user;
+------------------+------+
| user             | host |
+------------------+------+
| mysql.infoschema | %    |
| mysql.session    | %    |
| mysql.sys        | %    |
| root             | %    |
+------------------+------+
mysql> show grants for root@'%'\G
*************************** 1. row ***************************
Grants for root@%: GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE
TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGE
R, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `root`@`%` WITH GRANT OPTION
1 row in set (0.00 sec)

3.2用户组成

MySQL的授权用户由两部分组成: 用户名和登录主机名
表达用户的语法为’user_name’@’host_name’
单引号不是必须,但如果其中包含特殊字符则是必须的
”@‘localhost’代表匿名登录的用户
Host_name可以使主机名或者ipv4/ipv6的地址。 Localhost代表本机, 127.0.0.1代表ipv4本机地址, ::1代表ipv6的本机地址
Host_name字段允许使用%和_两个匹配字符,比如’%’代表所有主机, ’%.mysql.com’代表 来自mysql.com这个域名下的所有主机, ‘192.168.1.%’代表所有来自192.168.1网段的主机

User值Host 值允许的连接
‘my_user’‘www.mysql.com’my_user从www.mysql.com主机连接
‘’‘h1.example.net’任何用户从www.mysql.com主机连接
‘my_user’‘%’my_user从任何主机连接
‘’‘%’任何用户,从任何主机连接
‘my_user’‘%.mysql.com’my_user从mysql.com域中的任何主机连接
‘my_user’‘www.mysql.%’my_user从连接 www.mysql.com,www.mysql.net,www.mysql.pub,等; 这可能没用
‘my_user’‘10.31.1.115’my_user从10.31.1.115连接
‘my_user’‘10.31.1.%’my_user从10.31.1 C类子网中的任何主机连接
‘my_user’‘10.31.1.0/255.255.255.0’同上

3.3 修改用户权限

执行Grant,revoke,set password,rename user命令修改权限之后, MySQL会自动将修改后的权限信息同步加载到系统内存中

如果执行insert/update/delete操作上述的系统权限表之后,则必须再执行刷新权限命令才能同步到系统内存中,刷新权限命令包括: flush privileges/mysqladmin flush-privileges / mysqladmin reload

如果是修改tables和columns级别的权限,则客户端的下次操作新权限就会生效

如果是修改database级别的权限,则新权限在客户端执行use database命令后生效

如果是修改global级别的权限,则需要重新创建连接新权限才能生效

如果是修改global级别的权限,则需要重新创建连接新权限才能生效 (例如修改密码)

3.4 创建用户及授权

有两种方式创建MySQL授权用户:
1.执行create user/grant命令(推荐方式)
2.通过insert语句直接操作MySQL系统权限表

创建用户及授权脚本

# 创建my_user1,授予管理员权限
CREATE USER 'my_user1'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON *.* TO 'my_user1'@'localhost' WITH GRANT OPTION;
# MySQL 8.0开始需要将密码噶为native password
ALTER USER 'my_user1'@'localhost' IDENTIFIED with mysql_native_password BY 'admin';


# 创建my_user2 用户并赋予常用权限 ,在所有的库和表上
# MySQL 8.0之前可以通过grant语句创建用户,MySQL 8.0之后不允许了
GRANT Create,Insert,Update,Delete,Select,Index *.* TO 'my_user2'@'localhost' IDENTIFIED BY '123456';

CREATE USER 'my_user2'@'localhost' IDENTIFIED BY '123456';
GRANT Create,Insert,Update,Delete,Select,Index ON *.* TO 'my_user2'@'localhost';

 
# 创建my_user3用户,在test1库,t1表, 上的name1列只有select 权限
CREATE USER 'my_user3'@'localhost' IDENTIFIED BY '123456';
grant select(name1) on test1.t1 to 'my_user3'@'localhost';

执行记录:

mysql> select user,host from mysql.user;
+------------------+------+
| user             | host |
+------------------+------+
| mysql.infoschema | %    |
| mysql.session    | %    |
| mysql.sys        | %    |
| root             | %    |
+------------------+------+
4 rows in set (0.00 sec)

mysql> # 创建my_user1,然后另开一个授权语句
mysql> CREATE USER 'my_user1'@'localhost' IDENTIFIED BY 'admin';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'my_user1'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

# 创建my_user2 用户并赋予常用权限 ,在所有的库和表上
mysql> CREATE USER 'my_user2'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT Create,Insert,Update,Delete,Select,Index ON *.* TO 'my_user2'@'localhost';
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql>
mysql>
mysql> # 创建my_user3用户,在test1库,t1表, 上的name1列只有select 权限
mysql> CREATE USER 'my_user3'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.01 sec)

mysql> grant select(name1) on test1.t1 to 'my_user3'@'localhost';
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | %         |
| mysql.session    | %         |
| mysql.sys        | %         |
| root             | %         |
| my_user1         | localhost |
| my_user2         | localhost |
| my_user3         | localhost |
+------------------+-----------+
7 rows in set (0.00 sec)

权限表数据

mysql> select * from mysql.user where user = 'my_user1'\G
*************************** 1. row ***************************
                    Host: localhost
                    User: my_user1
             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: 0x
             x509_issuer: 0x
            x509_subject: 0x
           max_questions: 0
             max_updates: 0
         max_connections: 0
    max_user_connections: 0
                  plugin: caching_sha2_password
   authentication_string: $A$005$`:^,98&aKZ|<v">9vtB9sKI/vTT3bpN0Zn.W7F94.FoVvk/nzSB1dkrsb0
        password_expired: N
   password_last_changed: 2020-06-17 18:07:05
       password_lifetime: NULL
          account_locked: N
        Create_role_priv: Y
          Drop_role_priv: Y
  Password_reuse_history: NULL
     Password_reuse_time: NULL
Password_require_current: NULL
         User_attributes: NULL
1 row in set (0.00 sec)

mysql>
mysql> select * from mysql.user where user = 'my_user2'\G
*************************** 1. row ***************************
                    Host: localhost
                    User: my_user2
             Select_priv: Y
             Insert_priv: Y
             Update_priv: Y
             Delete_priv: Y
             Create_priv: Y
               Drop_priv: N
             Reload_priv: N
           Shutdown_priv: N
            Process_priv: N
               File_priv: N
              Grant_priv: N
         References_priv: N
              Index_priv: Y
              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: 0x
             x509_issuer: 0x
            x509_subject: 0x
           max_questions: 0
             max_updates: 0
         max_connections: 0
    max_user_connections: 0
                  plugin: caching_sha2_password
   authentication_string: $A$005$iW4p]eutb^=HR!"}=rwrGeXa26KbtLykSHJ7YOAZtxhGc/fH8nIMvzahEi3A
        password_expired: N
   password_last_changed: 2020-06-17 18:28:12
       password_lifetime: NULL
          account_locked: N
        Create_role_priv: N
          Drop_role_priv: N
  Password_reuse_history: NULL
     Password_reuse_time: NULL
Password_require_current: NULL
         User_attributes: NULL
1 row in set (0.00 sec)

mysql> select * from mysql.user where user = 'my_user3'\G
*************************** 1. row ***************************
                    Host: localhost
                    User: my_user3
             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: 0x
             x509_issuer: 0x
            x509_subject: 0x
           max_questions: 0
             max_updates: 0
         max_connections: 0
    max_user_connections: 0
                  plugin: caching_sha2_password
   authentication_string: $A$005$>HP
>HE@y\Z[])WrYu/lB3SQHa.zoFROwzS4OcGotmdCCyttkxWrAhpW4
        password_expired: N
   password_last_changed: 2020-06-17 18:32:39
       password_lifetime: NULL
          account_locked: N
        Create_role_priv: N
          Drop_role_priv: N
  Password_reuse_history: NULL
     Password_reuse_time: NULL
Password_require_current: NULL
         User_attributes: NULL
1 row in set (0.00 sec)

-- DB表都是空数据
mysql> select * from mysql.db where user = 'my_user1'\G
Empty set (0.00 sec)

mysql> select * from mysql.db where user = 'my_user2'\G
Empty set (0.00 sec)

mysql> select * from mysql.db where user = 'my_user3'\G
Empty set (0.00 sec)

-- tables_priv和columns_priv 表只有第三个表有数据
mysql> select * from mysql.tables_priv where user = 'my_user1'\G
Empty set (0.00 sec)

mysql> select * from mysql.tables_priv where user = 'my_user2'\G
Empty set (0.00 sec)

mysql> select * from mysql.tables_priv where user = 'my_user3'\G
*************************** 1. row ***************************
       Host: localhost
         Db: test1
       User: my_user3
 Table_name: t1
    Grantor: root@localhost
  Timestamp: 0000-00-00 00:00:00
 Table_priv:
Column_priv: Select
1 row in set (0.00 sec)

mysql>
mysql>
mysql>
mysql>
mysql> select * from mysql.columns_priv where user = 'my_user1'\G
Empty set (0.00 sec)

mysql> select * from mysql.columns_priv where user = 'my_user2'\G
Empty set (0.00 sec)

mysql> select * from mysql.columns_priv where user = 'my_user3'\G
*************************** 1. row ***************************
       Host: localhost
         Db: test1
       User: my_user3
 Table_name: t1
Column_name: name1
  Timestamp: 0000-00-00 00:00:00
Column_priv: Select
1 row in set (0.00 sec)

3.5 回收mysql权限

通过revoke命令收回用户权限,回收的时候看一下这个用户有哪些权限然后回收

-- 查看用户有哪些权限
show grants for my_user2@'localhost';
-- 回收权限
revoke SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX ON *.* FROM my_user2@'localhost';
-- 再次查看用户权限
show grants for my_user2@'localhost';

执行记录:

mysql> -- 查看用户有哪些权限
mysql> show grants for my_user2@'localhost';
+--------------------------------------------------------------------------------------+
| Grants for my_user2@localhost                                                        |
+--------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX ON *.* TO `my_user2`@`localhost` |
+--------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> -- 回收权限
mysql> revoke SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX ON *.* FROM my_user2@'localhost';
Query OK, 0 rows affected (0.01 sec)

mysql> -- 再次查看用户权限
mysql> show grants for my_user2@'localhost';
+----------------------------------------------+
| Grants for my_user2@localhost                |
+----------------------------------------------+
| GRANT USAGE ON *.* TO `my_user2`@`localhost` |
+----------------------------------------------+
1 row in set (0.00 sec)

3.6 删除mysql用户

通过执行drop user命令删除MySQL用户
还可以通过系统权限表删除(不建议)

mysql> drop user my_user2@'localhost';
Query OK, 0 rows affected (0.01 sec)

3.7 设置MySQL用户资源限制

通过设置全局变量max_user_connections可以限制所有用户在同一时间连接MySQL实例的数量,但此参数无法对每个用户区别对待,所以MySQL提供了对每个用户的资源限制管理

MAX_QUERIES_PER_HOUR:一个用户在一个小时内可以执行查询的次数(基本包含所有语句)

MAX_UPDATES_PER_HOUR:一个用户在一个小时内可以执行修改的次数(仅包含修改数据库或表的语句)

MAX_CONNECTIONS_PER_HOUR:一个用户在一个小时内可以连接MySQL的时间

MAX_USER_CONNECTIONS:一个用户可以在同一时间连接MySQL实例的数量

从5.0.3版本开始,对用户‘user’@‘%.example.com’的资源限制是指所有通过example.com域名主机连接user用户的连接,而不是分别指从host1.example.com和host2.example.com主机过来的连接

-- 设置my_user3 每小时查询500次,每小时修改 100次
ALTER USER 'my_user3'@'localhost' WITH MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100 ;
-- 设置my_user3 一个小时内可以连接MySQL的时间,一个用户可以在同一时间连接MySQL实例的数量
ALTER USER 'my_user3'@'localhost' REQUIRE SSL WITH MAX_CONNECTIONS_PER_HOUR 20 MAX_USER_CONNECTIONS 2;

3.8 修改mysql用户密码

ALTER USER 'my_user3'@'localhost' IDENTIFIED BY 'mypass';
mysqladmin -u my_user1 -h localhost password "123456"

3.9 设置MySQL用户密码过期策略

设置系统参数default_password_lifetime作用于所有的用户账户
default_password_lifetime=180 设置180天过期
default_password_lifetime=0 设置密码不过期
如果为每个用户设置了密码过期策略,则会覆盖上述系统参数

-- 密码90天过去
ALTER USER 'my_user3'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
-- 密码不过期
ALTER USER 'my_user3'@'localhost' PASSWORD EXPIRE NEVER; 
-- 默认过期策略
ALTER USER 'my_user3'@'localhost' PASSWORD EXPIRE DEFAULT; 

执行记录:

mysql> -- 密码90天过去
mysql> ALTER USER 'my_user3'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
Query OK, 0 rows affected (0.01 sec)

mysql> -- 密码不过期
mysql> ALTER USER 'my_user3'@'localhost' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.00 sec)

mysql> -- 默认过期策略
mysql> ALTER USER 'my_user3'@'localhost' PASSWORD EXPIRE DEFAULT;
Query OK, 0 rows affected (0.01 sec)

mysql> show variables like 'default_password_lifetime'\G
*************************** 1. row ***************************
Variable_name: default_password_lifetime
        Value: 0
1 row in set, 1 warning (0.00 sec)

3.10 mysql 用户 lock

通过执行create user/alter user命令中带account lock/unlock子句设置用户的lock状态
Create user语句默认的用户是unlock状态

# 修改用户为lock
alter user my_user3@'localhost' account lock;
# 修改用户为unlock
alter user my_user3@'localhost' account unlock;
mysql> # 修改用户为lock
mysql> alter user my_user3@'localhost' account lock;
Query OK, 0 rows affected (0.01 sec)

mysql> # 修改用户为unlock
mysql> alter user my_user3@'localhost' account unlock;
Query OK, 0 rows affected (0.01 sec)

四.参考文档:

1.https://www.cnblogs.com/keme/p/10288168.html#
2.https://dev.mysql.com/doc/refman/8.0/en/grant-tables.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值