资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
深入学习 MySQL 授权表【IT168 文档】在本文中,我们将向读者详细介绍 MySQL 的授权表,并通过一些 实例来讲解MySQL是如何提高这些授权表来实现用户访问控制的。我们首先介绍 MySQL 访问控制过程,然后说明 tables_priv 和 columns_priv 授权表,我们会 给出与 MySQL 的 tables_priv 表有关的解释和范例。最后,我们介绍 columns_priv 授权表及其范例。一、MySQL授权表概述MySQL服务器的特点之一是,它在控制每个用户行为方面提供了极大的灵活 性。例如,我们既可以限制用户访问整个数据库,也可以限制用户访问数据库中 特定的表,或者禁止访问特定表中的特定列。由此看出MySQL服务器在用户授权 方面的灵活性。本文将向大家详细介绍MySQL服务器是如何处理用户权限的授与 /撤回的,尤其是MySQL的授权表tables_priv和columns_priv。MySQL的授权系统通常是通过MySQL数据库中的五个表来实现的,这些表有 user、db、host、tables_priv和columns_priv。这些表的用途各有不同,但是 有一点是一致的,那就是都能够检验用户要做的事情是否为被允许的。每个表的 字段都可分解为两类,一类为作用域字段,一类为权限字段。作用域字段用来标 识主机、用户或者数据库;而权限字段则用来确定对于给定主机、用户或者数据 库来说,哪些动作是允许的。下面,我们对这些表的作用做简单介绍: user表一一该表决定是否允许用户连接到服务器。如果允许连接,权限 字段则为该用户的全局权限。 db表用于决定哪些用户可以从哪些主机访问哪些数据库。包含在db 表中的权限适用于这个表标识的数据库。 host 表一一当您想在 db 表的范围之内扩展一个条目时,就会用到这个表。 举例来说,如果某个db允许通过多个主机访问的话,那么超级用户就可 以让db表内将host列为空,然后用必要的主机名填充host表。 tables_priv表该表与db表相似,不同之处是它用于表而不是数据库。这个表还包含一个其他字段类型,包括times tamp和gra ntor两个字 段,用于存储时间戳和授权方。在本文后面我们会对这个表做进一步的讲 解。 columns_priv该表作用几乎与db和tables_priv表一样,不同之处是它提供的是针对某些表的特定列的权限。这个表也多出了一个字段类 型,即其他字段,包括了一个times tamp列,用于存放时间戳。在本文 后面部分,我们还会对 columns_priv 表做进一步的说明。下面,我们通过如下几个方面对MySQL用户授权过程加以介绍:首先介绍 MySQL访问控制过程,解答MySQL授权表是如何工作的;然后,我们介绍 tables_priv 和 columns_priv 授权表,我们会给出与 MySQL 的 tables_priv 表 有关的解释和范例。最后,我们介绍与columns_priv授权表有关的解释和若干 范例。二、MySQL服务器的访问控制现在让我们来看看 MySQL 服务器是如何通过用户特权来控制用户访问的。虽 然这乍听起来好像挺吓人的,但是通过一个例子的演示,您就会发现其实事情没 有我们想象的那么难以理解。首先,对用户的访问进行控制的时候,系统需要查看作为过滤器的一些授权表,这些表的使用过程是从一般到特殊,这些表包括: User 表 Db表 Host 表 Tables_priv 表 Columns_priv 表此外,一旦连接到了服务器,一个用户可以使用两种类型的请求:管理请求(shutdown,reload,等)数据库相关的请求(insert, delete,等)当用户提交管理请求时,服务器只需查看user表,这是因为user表是唯一 包含与管理工作有关的权限的一个表。然而,当用户提交数据库请求时,要查看 的表就要更多了。您可能已经注意到了,这些授权表的内容好像有些重复,例如 user 表中有 select权限,同时host和user表中也有同样的权限。但是,这样做自有其道 理。我们可以考虑一下user表中全局性的与数据库相关的权限,也就是说,在 这个表中授予用户的权限对服务器上的所有数据库都有效。这些权限可以被认为 是超级用户权限。相反,包含在host和db表之内的与数据库相关的权限则是特 定于主机或者数据库的。因此,让这个表内所有的权限保持为“N”不失为一个 明智的选择。让我们假定我们的 user 和 db 表如下所示:User TableHost%.pi.comUserWjPassword34ghyTSelect, privNInsert privY1Update privlNJDelete privN1IndexprivN1Alter privNCreate priv即Drop privGrant privN1Reload privN1Shutdown, privNProcess privFile privN1情景 1:失败的连接尝试Db TableHost%.pi.comDboatsUserwjSelect privInsert privY1Update privDelete, priv曾Index privAlter privCreate privNrDrop privNrGrant privY1用户“alessia”连接服务器时将被拒绝。因为,主机、用户和/或密码与保 持在user表中的不匹配,所以会拒绝用户的请求。情景2: user表中数据库权限为N,db表中数据库权限为Y1. 用户 wj 尝试连接时将会成功。2. 用户wj试图在数据库oats上执行Select命令。3. 服务器查看user表,对应于Select命令的条目的值为N,即表示拒绝。4. 服务器然后查看db表,对应于Select命令的表项的值为Y,即表示允 许。5. 该请求将成功执行,因为该用户的db表中的SELECT字段的值为Y。情景3: user表中数据库权限为Y,db表中数据库权限为N1. 用户 wj 尝试连接时将会成功。2. 用户 wj 试图在数据库 oats 上执行 Select 命令。3. 服务器查看user表,对应于Select命令的表项的值为Y,即表示允许。 因为在user表之内授与的权限是全局性的,所以该请求会成功执行。情景4: user表中数据库权限为N,db表中数据库权限为N1. 用户 wj 尝试连接时将会成功。2. 用户 wj 试图在数据库 oats 上执行 Select 命令。3. 服务器查看user表,对应于Select命令的表项的值为N,即表示拒绝。4. 服务器现在会查看db表,对应于Select命令的表项的值为N,即表示 拒绝。5. 服务器现在将查找tables_priv和columns_priv表。如果用户的请求符 合表中赋予的权限,则准予访问。 否则,访问就会被拒绝。对于 tables_priv 和 columns_priv 表,后面会进一步加以详述。情景 5:让我们假定下列情况为真: user表中用户wj的host字段的值为。 db表中用户wj对应的host字段的值为空。这时会发生什么情况呢?1. 用户 wj 尝试通过一个给定主机进行连接。2. 假设密码是正确的,那么就会连接成功,因为user表指出只要是通过用 户名 wj 和有关密码进行连接的话,任何(字符%所代表的含义)主机都是允许的。3. MySQL服务器将查找db表,不过,这里没有指定主机。4. MySQL 服务器现在将查看 host 表。如果该用户要连接的数据库以及用户 建立连接时所在主机的名称都位于 host 表中,那么该用户就能够按照 host 表中 所列出的权限来执行命令。 否则的话,用户将无法执行命令,实际上更本就无 法连接。通过了解上述情形,读者就应该对授权系统有一定了解了。下面,我们再来 仔细聊聊 tables_priv 表和 columns_priv 表。三、Tables_priv 表与 columns_priv 表在上面介绍的五种授权表中,tables_priv和columns_priv是后来加入进 来的,它们的主要目的是提供细粒度的用户控制。这两个表与授权表db非常类 似,但是其控制的范围更加细致,即特定数据库中的特定的表。前面说过,超级 用户可以通过授权表db来限制用户在一个数据库中的行为,有了这两个授权表, 超级用户可以进一步控制用户针对每个表和每个字段的动作。所以,这给超级用 户提供了更加灵活的控制选项。在深入学习对数据表的访问控制之前,首先让我们了解一下下列特性:通配符可以用于这两个表的host字段,但是不允许在Db、Table_name 和 Column_name 字段使用通配符。权限字段被声明为SET字段。 tables_priv和columns_priv表只应当通过GRANT/REVOKE命令进行修 改。通过INSERT命令向这两个表插入数据会导致服务器不稳定! tables_priv表中的table_priv字段可以允许下列命令:Select、Insert、 Update、 Delete、 Create、 Drop、 Grant、 References、 Index 和 Alter。 tables_priv 表中的 column_priv 字段允许下列命令:Select、Insert、 Update 和 References。 columns_priv 表中的 type 字段允许下列命令: Select、 Insert、 Update 和 References。授权表 tables_priv下列是一个tables_priv表的示意图:面简要介绍各字段的含义: Host适用于那些主机? Db适用于从上面的主机所连接的哪些数据库? User适用于来自上述主机的哪些用户? Table_name适用于上述数据库中的哪些表? Table_priv为这个表赋予哪些权限? Column_priv为这个表中的个字段赋予哪些权限? Timestamp这个权限是何时赋予的? Grantor谁授与该用户的这个权限?要想真正弄懂tables_priv表,最好的办法就是通过实例进行学习,下面我们就 给出一些例子。例 1:%GRANT SELECT ON italy TO wj314interactive.com;这条命令的作用是什么?以上命令允许来自主机314interactive.com的用 户wj在表italy上至下一个SELECT语句。请记住,只有当给定数据库/主机和 用户名对应的db或者host表中的SELECT字段的值为N时,才需要访问这个表。 如果给定数据库/主机和用户名对应的db或者host表中的SELECT字段中有一个 值为Y的话,那么就无需控制该tables_priv表。例 2:%GRANT SELECT, INSERT ON oats.italy TO wj314interactive.com;这条命令的作用是什么?以上命令允许来自主机314interactive.com的用 户wj对数据库oats中的数据表
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号