凡客的意思,seo网络优化招聘,天津市工程信息建设网,王也天与葛优本节书摘来自异步社区出版社《MySQL排错指南》一书中的第1章#xff0c;第1.9节#xff0c;作者#xff1a;【美】Sveta Smirnova#xff08;斯维特 斯米尔诺娃#xff09;#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.9 许可问题 MySQL有复杂的… 本节书摘来自异步社区出版社《MySQL排错指南》一书中的第1章第1.9节作者【美】Sveta Smirnova斯维特 斯米尔诺娃更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.9 许可问题 MySQL有复杂的权限方案这使得你可以精确地设置哪些用户和主机可以或不可以执行这个或那个操作。从5.5版本开始MySQL也有了可插拔式的身份验证模式。 尽管它有很多优势但是这个方案很复杂。例如让user1hostA、user2hostA和user1hostB不同会很容易混淆它们的权限。当用户名相同而主机名变化的时候更是如此。 MySQL允许在对象和连接层面设置访问规则。可以限制某个用户对于特定的表、列等的访问权限。 用户通常会遇到两类权限问题 应该有权限连接到服务器的用户无法连接或者没有权限的用户可以连接用户可以连接到服务器但是无法使用他们本应该可以访问的对象或者可以访问他们无权访问的对象。在解决这些问题之前应该确认你是否可以连接到服务器。 当你作为解决问题的用户成功连接到服务器之后后面的章节将讨论无法连接的情况执行以下查询 USER()函数会返回当用户连接到服务器时使用的连接参数。这些参数通常为指定的用户名和运行客户端的主机名。CURRENT_USER()函数会返回从权限表中选择的与访问权限相关的用户名和主机名对。mysqld用这些用户名和主机名对来检查数据库对象访问权限。通过比较这些函数的结果可以找到mysqld使用的权限和预期不同的原因。一个典型的问题是对主机名使用通配符% 如果此时我以sveta身份连接并尝试创建一个表我就会获得下面的错误 该问题在于MySQL服务器认为sveta是svetalocalhost而不是通配符 如果你不理解为什么选择一台或另一台主机可以进行如下查询 MySQL在表中按照从访问最多的主机到访问最少的主机的顺序对行进行排序然后使用第一个找到的值。因此它把我当作svetalocalhost用户进行连接此时该用户没有CREATE权限。 USER()、CURRENT_USER()函数和“SELECT user, host FROM mysql.user ORDER BY host DESE”查询语句是遇到权限问题时的首选。另一种权限问题是你无法作为指定用户进行连接。在这种情况下通常可以从错误消息中了解问题产生的原因错误消息一般如下所示 在看到这条消息以后你了解了用户凭证。作为root超级用户进行连接然后检查该用户是否存在以及是否拥有所需权限 在这个输出信息中你可以看到用户svetalocalhost仅仅对book数据库有权限而对books数据库没有权限。现在可以修复这个错误赋予svetalocalhost用户必要的权限。 前面的示例讨论用户缺失必要权限的情况。对于用户被授予过多权限的情况也可以同样处理仅需要移除不必要的权限。 警告 警告 MySQL的权限与其管控对象是分离的这意味着当你赋予某用户权限时mysqld 不会检查其是否存在同时当授权对象被删除时也不会移除相应权限。这样做的好处是允许我们预先授予必要的权限但同时也有可能在不经意的使用中带来潜在的问题。作为最佳实践我推荐你仔细学习MySQL的权限工作机制。尤其是在你想要在用户对象级别授予权限的时候因为你需要理解在一个级别授权是如何影响其他授权的。同样对于撤消权限情形也一样重要甚至更重要因为如果你以为已经撤消了某个权限但它依然存在这就会造成意外的访问。 [1] 版本5.6.3开始也可以在UPDATE和DELETE上使用EXPLAIN方法不过把语句转换成SELECT查询仍然有效因为你可以方便地检查和操作实际的结果集而不是仅使用EXPLAIN命令。这尤其适用于复杂的JOIN操作尤其是当EXPLAIN输出的检查的行比实际更新的行还要多的时候。 [2] 你可以在http://dev.mysql.com/doc/refman/5.5/en/c.html找到关于C API的详细描述。 [3] 第5章将详细介绍如何解决复制失败的问题因此这里不再详细解释。 [4] MySQL企业级备份MEB以前也称作InnoDB热备份是InnoDB表进行在线热备份和其他存储引擎的表进行在线备份的一个工具。第7章将讨论备份的方法。 本文仅用于学习和交流目的不代表异步社区观点。非商业转载请注明作译者、出处并保留本文的原始链接。