MySQL数据库高危权限回收的实现

 更新时间:2026年01月30日 09:14:07   作者:DomDanrtsey  
本文介绍MySQL数据库的基本操作指令,包括查看和切换数据库等,详细讲解了如何统计环境中的用户及权限,并提供了权限回收的方法,包括回收高危权限和重新授权必要权限的过程,感兴趣的可以了解一下

1. 基本操作指令

  1. 查看当前系统数据库
# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| erp              |
+--------------------+
3 rows in set (0.00 sec)
  1. 切换数据库
mysql> use erp;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

2. 权限回收准备工作

  1. 统计当前环境所有的用户(%表示所有机器可访问;127.0.0.1、localhost表示本机可访问)
mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
+-----------------------------------------+
| query                                   |
+-----------------------------------------+
| User: 'root'@'%';                       |
| User: 'root'@'127.0.0.1';               |
| User: 'root'@'::1';                     |
| User: ''@'localhost';                   |
| User: 'root'@'localhost';               |
| User: 'erp'@'%';                       |
+-----------------------------------------+
5 rows in set (0.00 sec)
  1. 统计业务用户具有哪些权限以用户名erp举例如下
mysql> show grants for 'erp'@'%';
+------------------------------------------------------------------------------------+
| Grants for erp@%                                                         |
+------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'erp'@'%' IDENTIFIED BY PASSWORD '*******'      |
| GRANT ALL PRIVILEGES ON `ump`.* TO 'ump'@'%'                          |
+------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

3. 操作回收高危权限

  1. 回收所有权限或回收某一权限,比如drop权限
mysql> revoke all privileges on erp.* from 'erp'@'%';
mysql> revoke drop on erp.* from 'erp'@'%';
mysql> flush privileges;

备注:
(1)列举部分特殊的服务器权限及其功能说明:

super:拥有此权限允许用户终止任何查询;修改全局变量的SET语句;使用CHANGE MASTER,PURGE MASTER LOGS
shutdown:关闭数据库
show databases:查看数据库
replication client:查询master server、slave server状态
replication slave:查看从服务器
reload:拥有此权限才可执行flush [tables | logs | privileges]
process:拥有此权限才可以执行SHOW PROCESSLIST和KILL命令
file:拥有file权限才可以执行 select ..into outfile和load data infile…操作

(2)普通用户权限及其功能说明:

all:允许任何操作(usage权限不能被回收)
usage:只允许登录
alter:修改数据库的表
alter routine:修改/删除存储过程
create:创建表
create routine:创建存储过程
create temporary tables:创建临时表
create:创建新的数据库或表
create view:创建视图
delete:删除表数据
drop:删除数据库/表
event:创建/更改/删除/查看事件
execute:执行权限
grant option:将自身所拥有的权限授予其他用户
index:创建/删除索引
insert:添加表数据
lock tables:锁表
references:将其它表的一个字段作为某一个表的外键约束
select:查询表数据
show view:查看视图
trigger:创建触发器
update:更新表数据

  1. 重新授权必要权限
mysql> grant select,insert,alter,update,delete,create,execute on erp.* to 'erp'@'%' ;
mysql> flush privileges;
  1. 确认权限
mysql> show grants for 'erp'@'%';

4. 注意事项

1)、file, process, super为危险权限,切勿权限授予管理员以外的账号;

mysql> revoke file,process,super on erp.* from 'erp'@'%';

2)、查看某个或所有用户的服务器权限,确认普通账号没有授权上述三种危险权限

mysql> select * from mysql.user where user='erp'\G;
*************************** 1. row ***************************
                  Host: %
                  User: erp
              Password: *33F471D4D8A84CD6C0
           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: 
      password_expired: N
1 row in set (0.00 sec)
mysql> select * from mysql.user \G;

3)、授予某张表权限,权限信息保存在mysql.tables_priv表中

mysql> grant select on dbname.tablename to 'username'@'%' with grant option;
mysql> select * from mysql.tables_priv;
select * from mysql.tables_priv;
+-----------+-----+-------+------------+----------------+---------------------+-------+
| Host | Db  | User  | Table_name  | Grantor | Timestamp | Table_priv | Column_priv |
+-----------+-----+-------+------------+----------------+---------------------+-------+
| % | dbname | username | tablename | root@localhost | 0000-00-00 00:00:00 | Select,Grant |             |
+-----------+-----+-------+------------+----------------+---------------------+-------+

4)、授予某个字段权限,权限信息保存在mysql.columns_priv表中

mysql> grant select(Column_name) on dbname.tablename to 'username'@'%' with grant option;
mysql> select * from mysql.columns_priv;
select * from mysql.columns_priv;
+-----------+-----+-------+------------+-------------+---------------------+----------+
| Host   | Db  | User  | Table_name | Column_name | Timestamp   | Column_priv |
+-----------+-----+-------+------------+-------------+---------------------+----------+
| % | dbname | username | tablename | Column_name | 0000-00-00 00:00:00 | Select|
+-----------+-----+-------+------------+-------------+---------------------+----------+

5)、当使用如下命令回收权限时,它回收的只是全局的权限,username用户其他的权限,比如对dbname数据库的权限,对tablename表的权限,对某个Column_name字段的权限仍然持有。

mysql> revoke all privileges on *.* from 'username'@'localhost';

所以为了回收用户的所有权限,要使用如下命令

mysql> revoke all privileges,grant option from 'username'@'%';

5. 结束

到此这篇关于MySQL数据库高危权限回收的实现的文章就介绍到这了,更多相关MySQL数据库高危权限回收内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL中建表时可空(NULL)和非空(NOT NULL)的用法详解

    MySQL中建表时可空(NULL)和非空(NOT NULL)的用法详解

    这篇文章主要介绍了MySQL中建表时可空(NULL)和非空(NOT NULL)的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • MySQL中的DDL、DML与DCL的深度探究

    MySQL中的DDL、DML与DCL的深度探究

    本文系统介绍了MySQL数据库中的三大SQL语句类别DDL(数据定义语言)、DML(数据操纵语言)和DCL(数据控制语言),感兴趣的朋友跟随小编一起看看吧
    2025-07-07
  • mysql如何通过my.ini更改默认字符集

    mysql如何通过my.ini更改默认字符集

    这篇文章主要介绍了mysql如何通过my.ini更改默认字符集问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • MySQL高级操作指令汇总

    MySQL高级操作指令汇总

    本文给大家带来的是MySQL高级操作指令代码,罗列的很详细并且附带有例子,对大家的学习将会很有用,建议收藏以防丢失,需要的朋友可以参考下
    2022-01-01
  • mysql数据库分表分库的策略

    mysql数据库分表分库的策略

    这篇文章主要介绍了mysql数据库分表分库的策略希望我们的整理能给你提供到帮助。
    2017-11-11
  • 设置MySQLroot账户密码报错ERROR 1064 (42000): You have an error in your SQL syntax;的解决方案

    设置MySQLroot账户密码报错ERROR 1064 (42000): You 

    在安装mysql的时候,设置root账户密码出现了ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds..错误,本文小编给大家介绍了相关的解决方案,需要的朋友可以参考下
    2023-12-12
  • mysql创建的外键无法保存的原因以及处理办法

    mysql创建的外键无法保存的原因以及处理办法

    这篇文章主要介绍了mysql创建的外键无法保存的原因以及处理办法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • MySQL数据库线上修改表结构的方法

    MySQL数据库线上修改表结构的方法

    MySQL有一个把锁,叫做MDL元数据锁,当对表修改的时候,会自动给表加上这把锁,也就是不需要自己显式使用,这篇文章主要介绍了MySQL数据库线上修改表结构的方法,需要的朋友可以参考下
    2022-09-09
  • 深入理解mysql各种锁

    深入理解mysql各种锁

    大家好,本篇文章主要讲的是深入理解mysql各种锁,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • MySQL DELETE速度提高的几种方法

    MySQL DELETE速度提高的几种方法

    提高MySQL中DELETE操作的速度通常涉及多个方面,包括优化查询、索引、表结构、硬件和配置等,本文主要介绍了MySQL DELETE速度提高的几种方法,感兴趣的可以了解一下
    2024-07-07

最新评论