世界超算排行榜:太湖之光!

IT教程学习网

网站建设

GRANT命令的作用及其工作原理

文章来源:深腾网   作者:静岳   浏览量:
想了解如何创建用户,以及使用GRANT命令实现用户权限的授予;如果要管理一个MYSQL数据库,那么准确地理解GRANT命令的作用及其工作原理是非常有意义的。

当执行一条GRANT语句的时候,它会影响一个名为mysql的特殊数据库。权限信息就是保存在这个数据库的6个表中。这样,当对数据库授予权限的时候,就应该注意是否授予了访问mysql数据库的访问权限。
 
以管理员身份登录的,输入如下命令,我们就可以看到mysql数据库的内容:
Use mysql;show tables;
这个数据库的数据表如下所示:

 
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| func                      |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| proc                      |
| procs_priv                |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

以上每个表都存储了关于系统的信息。保存权限信息的6个表分别是:user、host、db、 tables_priv和columns_priv以及procs_priv。有时,这些表也称为授权表(grant tables)。
 
这些表的具体用途各不相同,但它们的基本用途都是相同的,都可以用来确定用户身份以及是否允许执行特定操作。这些表都包含两种类型的字段:范围字段,它可以指定用户、主机和数据库的一部分;权限字段,它可指定该用户在该范围内可以执行哪些操作。

User表和host表用于确定一个用户是否可以连接MYSQL服务器,以及该用户是否任何管理员权限。Db表和host表确实用户可以访问哪些数据库。Tables_priv表确实用户可以使用数据库中哪些表,而columns_priv表确实用户可以访问表中的哪些列,procs_priv表确定用户可以执行哪些过程。
 
 

访问控制:MYSQL如何使用GRANT授权表

MYSQL使用GRANT表通过两个步骤来确实允许用户做什么;
  1. 连接验证:在这里,MYSQL基于如上所示的user表中的信息检查用户是否有权连接数据库。这是基于用户名、主机名和密码进行的验证。如果用户名为空,它将匹配所有用户。主机名可以用通配符%指定。通配符%可以用作整个主机名(也就是说,”%”符号匹配所有的主机),或者用作主机名的一部分,例如,%。Tangledweb.com.au匹配所在以.tangledweb.com.au结果的主机。如果密码字段为空,则不要求密码。在主机名中避免使用通配符,避免使用没有密码的用户名,避免空用户名,这样做会更安全。如果主机名为空,MYSQL将引用host表,找到匹配的user和host对。
 
  1. 请求验证:当建立一个连接之后,对于所发送的每一个请求,MYSQL都会检查是否有执行该请求的权限级别。系统首先将检查全局权限(在user表中),如果这些还不够,系统将再检查db表和host表。如果仍然没有足够的权限,MYSQL将检查tables_priv表,如果权限还不够,最后将检查columns_priv表。
 

更新权限:修改GRANT授权表什么时候生效

MYSQL服务器启动的时候以及使用GRANT和REVOKE语句的时候,服务器会自动读取GRANT表。但是,既然我们知道这些权限保存在什么地方以及它们是如何保存的,就可以手动修改它们。
 
当手动更新它们的时候,MYSQL服务器将不会注意到它们已经修改了。我们必须向服务器指出已经对权限进行了修改,有3种方法可以实现了这个任务。
 
可以在MYSQL提示符(必须以管理员的身份登录进入)输入:Flush privileges;这是更新权限最常用的方法。或者,还可以在操作系统中运行:
Mysqladmin flush-privileges或者mysqlamin reload
 
此后,当用户下次再连接的时候,系统将检查全局级别权限;当下一个命令被执行时,将检查数据库级别的权限;而表级别和列级别权限将在用户下次请求的时候被检查。
 

分享到:

  • Copyright © 2014-2026 深腾网 版权所有:静岳互联网咨询工作室
  • 冀ICP备16020878-1