热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:MySQL查看用户授予的权限

篇首语:本文由编程笔记#小编为大家整理,主要介绍了MySQL 查看用户授予的权限相关的知识,希望对你有一定的参考价值。  在mysql中,如何查看一个用户被授予了那些权限呢? 授予用户的权限

篇首语:本文由编程笔记#小编为大家整理,主要介绍了MySQL 查看用户授予的权限相关的知识,希望对你有一定的参考价值。



 

mysql中,如何查看一个用户被授予了那些权限呢? 授予用户的权限可能分全局层级权限、数据库层级权限、表层级别权限、列层级别权限、子程序层级权限。具体分类如下:

 

 

全局层级

 

全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤销全局权限。

 

数据库层级

 

数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤销数据库权限。

    

表层级

 

表权限适用于一个给定表中的所有列。这些权限存储在mysql.tables_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。

 

列层级

 

列权限适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。

 

子程序层级

 

CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv表中。

 

 

 

1:那么我们来创建一个测试账号test,授予全局层级的权限。如下所示: 

 



mysql> grant select,insert on *.* to test@\'%\' identified by \'test\';

Query OK, 0 rows affected (0.01 sec)

 

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

 

mysql>


 

 

那么可以用下面两种方式查询授予test的权限。如下所示:

 

 



mysql> show grants for test;

+--------------------------------------------------------------------------------------------------------------+

| Grants for test@%                                                                                            |

+--------------------------------------------------------------------------------------------------------------+

| GRANT SELECT, INSERT ON *.* TO \'test\'@\'%\' IDENTIFIED BY PASSWORD \'*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29\' |

+--------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

 

mysql> select * from mysql.user where user=\'test\'\\G;

*************************** 1. row ***************************

                  Host: %

                  User: test

              Password: *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29

           Select_priv: Y

           Insert_priv: Y

           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.04 sec)

 

ERROR:

No query specified

 

mysql>


 

clip_image001

 

 

 

 

2:那么我们来创建一个测试账号test,授予数据库层级的权限。如下所示:

 



mysql> drop user test;

Query OK, 0 rows affected (0.00 sec)

 

mysql> grant select,insert,update,delete on MyDB.* to test@\'%\' identified by \'test\';

Query OK, 0 rows affected (0.01 sec)

 

mysql>

 

mysql> select * from mysql.user where user=\'test\'\\G; --可以看到无任何授权。

mysql> select * from mysql.db where user=\'test\'\\G;

*************************** 1. row ***************************

                 Host: %

                   Db: MyDB

                 User: test

          Select_priv: Y

          Insert_priv: Y

          Update_priv: Y

          Delete_priv: Y

          Create_priv: N

            Drop_priv: N

           Grant_priv: N

      References_priv: N

           Index_priv: N

           Alter_priv: N

Create_tmp_table_priv: N

     Lock_tables_priv: N

     Create_view_priv: N

       Show_view_priv: N

  Create_routine_priv: N

   Alter_routine_priv: N

         Execute_priv: N

           Event_priv: N

         Trigger_priv: N

1 row in set (0.04 sec)

 

ERROR:

No query specified

 

mysql>

mysql> show grants for test;

+-----------------------------------------------------------------------------------------------------+

| Grants for test@%                                                                                   |

+-----------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO \'test\'@\'%\' IDENTIFIED BY PASSWORD \'*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29\' |

| GRANT SELECT, INSERT, UPDATE, DELETE ON `MyDB`.* TO \'test\'@\'%\'                                      |

+-----------------------------------------------------------------------------------------------------+

2 rows in set (0.00 sec)

 

mysql>


 

 

 

3:那么我们来创建一个测试账号test,授予表层级的权限。如下所示:

 

 



mysql> drop user test;

Query OK, 0 rows affected (0.00 sec)

 

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

 

mysql> grant all on MyDB.kkk to test@\'%\' identified by \'test\';

Query OK, 0 rows affected (0.01 sec)

 

mysql>

 

mysql> show grants for test;

+-----------------------------------------------------------------------------------------------------+

| Grants for test@%                                                                                   |

+-----------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO \'test\'@\'%\' IDENTIFIED BY PASSWORD \'*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29\' |

| GRANT ALL PRIVILEGES ON `MyDB`.`kkk` TO \'test\'@\'%\'                                                  |

+-----------------------------------------------------------------------------------------------------+

2 rows in set (0.00 sec)

 

mysql> select * from mysql.tables_priv\\G;

*************************** 1. row ***************************

       Host: %

         Db: MyDB

       User: test

Table_name: kkk

    Grantor: root@localhost

  Timestamp: 0000-00-00 00:00:00

Table_priv: Select,Insert,Update,Delete,Create,Drop,References,Index,Alter,Create View,Show view,Trigger

Column_priv:

1 row in set (0.01 sec)

 

ERROR:

No query specified

 

mysql>


 

 

clip_image002

 

 

 

4:那么我们来创建一个测试账号test,授予列层级的权限。如下所示:

 



mysql> drop user test;

Query OK, 0 rows affected (0.00 sec)

 

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

 

mysql> grant select (id, col1) on MyDB.TEST1 to test@\'%\' identified by \'test\';

Query OK, 0 rows affected (0.01 sec)

 

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

 

mysql>

 

 

mysql> select * from mysql.columns_priv;

+------+------+------+------------+-------------+---------------------+-------------+

| Host | Db   | User | Table_name | Column_name | Timestamp           | Column_priv |

+------+------+------+------------+-------------+---------------------+-------------+

| %    | MyDB | test | TEST1      | id          | 0000-00-00 00:00:00 | Select      |

| %    | MyDB | test | TEST1      | col1        | 0000-00-00 00:00:00 | Select      |

+------+------+------+------------+-------------+---------------------+-------------+

2 rows in set (0.00 sec)

 

mysql> show grants for test;

+-----------------------------------------------------------------------------------------------------+

| Grants for test@%                                                                                   |

+-----------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO \'test\'@\'%\' IDENTIFIED BY PASSWORD \'*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29\' |

| GRANT SELECT (id, col1) ON `MyDB`.`TEST1` TO \'test\'@\'%\'                                             |

+-----------------------------------------------------------------------------------------------------+

2 rows in set (0.00 sec)

 

mysql>


clip_image003

 

 

5:那么我们来创建一个测试账号test,授子程序层级的权限。如下所示:

 

 



mysql> DROP PROCEDURE IF EXISTS PRC_TEST;

Query OK, 0 rows affected (0.00 sec)

 

mysql> DELIMITER //

mysql> CREATE PROCEDURE PRC_TEST()

    -> BEGIN

    ->    SELECT * FROM kkk;

    -> END //

Query OK, 0 rows affected (0.00 sec)

 

mysql> DELIMITER ;

 

mysql> grant execute on procedure MyDB.PRC_TEST to test@\'%\' identified by \'test\';

Query OK, 0 rows affected (0.01 sec)

 

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

 

mysql>

 

 

mysql> show grants for test;

+-----------------------------------------------------------------------------------------------------+

| Grants for test@%                                                                                   |

+-----------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO \'test\'@\'%\' IDENTIFIED BY PASSWORD \'*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29\' |

| GRANT EXECUTE ON PROCEDURE `MyDB`.`prc_test` TO \'test\'@\'%\'                                          |

+-----------------------------------------------------------------------------------------------------+

2 rows in set (0.00 sec)

 

mysql> select * from mysql.procs_priv where User=\'test\';

+------+------+------+--------------+--------------+----------------+-----------+---------------------+

| Host | Db   | User | Routine_name | Routine_type | Grantor        | Proc_priv | Timestamp           |

+------+------+------+--------------+--------------+----------------+-----------+---------------------+

| %    | MyDB | test | PRC_TEST     | PROCEDURE    | root@localhost | Execute   | 0000-00-00 00:00:00 |

+------+------+------+--------------+--------------+----------------+-----------+---------------------+

1 row in set (0.00 sec)

 

mysql>


 

 

clip_image004

 

 

所以,如果需要查看用户被授予的权限,就需要从这五个层级来查看被授予的权限。从上到下或从小到上,逐一检查各个层级被授予的权限。



推荐阅读
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
  • 本文介绍了如何使用PHP代码将表格导出为UTF8格式的Excel文件。首先,需要连接到数据库并获取表格的列名。然后,设置文件名和文件指针,并将内容写入文件。最后,设置响应头部,将文件作为附件下载。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
author-avatar
shaonan
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有