Skip to content

Latest commit

 

History

History
151 lines (90 loc) · 12.9 KB

File metadata and controls

151 lines (90 loc) · 12.9 KB

五、数据库维护与安全管理

MySQL 是最流行的数据库平台之一,广泛用于为 Internet 上的数据库驱动网站供电,并且经常被用 PHP 编程的 web 应用程序使用。MySQL 提供了诸如高性能、易用性和易于安装等特性,同时也是一种非常高效的安全机制。然而,在 5.5 版之前,MySQL 的默认安装带有一个名为root且没有密码的用户,这一事实带来了一个相当令人担忧的安全漏洞。

虽然 MySQL 5.5 及更高版本需要一些基本配置,包括某些安全措施,不限制在安装后立即为root用户设置密码,但必须在新安装 MySQL 5.1 后,通过为root用户设置密码,采取初步措施尽早使用。Navicat 不仅使此类配置易于管理,而且还为安全管理和数据库维护提供了一些有用的工具。

本章重点介绍使用 Navicat 对 MySQL 进行安全和维护的基础数据库管理员DBA)功能。在本章结束时,您应该能够掌握如何在 Navicat for MySQL 中执行以下操作:

  • 创建和编辑 MySQL 用户
  • 管理用户权限
  • 执行维护任务,例如数据库分析、优化和修复

使用 Navicat 进行用户和权限管理

MySQL 数据库安全的第一个主题是用户和权限管理。Navicat 主窗口中带有图标的工具栏上的第二个按钮是用户按钮。激活它将在对象窗格中显示用户列表。连接窗格中属于所选 MySQL 服务器的所有用户都位于屏幕的左侧。

添加、编辑、复制和删除用户与在 Navicat 中管理任何其他数据库对象相同,因此,如果您发现自己迷路了,请快速回顾。下面的屏幕截图显示了属于所选 MySQL 服务器的所有用户:

User and privilege management with Navicat

在 Windows 版本的 Navicat 中,与用户管理上下文相关的辅助工具栏明确显示了用于编辑现有用户、添加新用户和删除现有用户的实用程序按钮,此外,您还会注意到另一个按钮,该按钮带有一个名为特权管理器的锁定图标。自版本 10 起,Navicat 中引入了权限管理器按钮,它就像一个命令中心,您可以在一个窗口内管理所有模式的所有用户,以及整个服务器或特定目录(数据库)的所有权限矩阵。

在 Mac 版本的 Navicat 上,界面非常不同,因为主工具栏下没有辅助工具栏;相反,您可以使用窗口底部的小图标(带加号、减号和铅笔形图标)来创建、编辑和删除用户。对于权限管理器按钮,需要选择设置权限命令。。。从菜单栏的连接菜单(当在连接窗格中选择服务器时)或数据库菜单(当选择服务器下的数据库时,该菜单替代连接菜单。以下屏幕截图显示 Mac 平台中的用户列表:

User and privilege management with Navicat

特权管理器按钮提供了到已定义服务器的所有连接、它们拥有的所有数据库以及为其中存在的所有用户定义和设置的各种特权的后台视图。

一开始它可能看起来有点复杂,因为它意味着从一个地方控制与特权相关的一切。但是,它不一定是管理特权的唯一方法。在后面的部分中,您将看到如何为给定用户逐步设置它们。事实上,特权管理器按钮在一个界面中简化了您将在后面部分中看到的编辑对象特权。

User and privilege management with Navicat

第一章入门中,您在设置第一次连接 MySQL 服务器时,还定义了root用户的设置。当您切换到用户视图时,根用户总是列在对象窗格中(当然,除非出于特定原因删除了根用户,我可能会添加一个好的根用户)。在用户名后添加一个@符号作为后缀,该后缀按照允许用户连接的服务器名称进行;在本例中,服务器名称为localhost。如果希望root用户从远程机器连接,则必须添加另一个同名用户;在本例中,用户名为root,但在标有主机名的字段中指定该远程计算机的域名或 IP 地址。例如,您可以看到myuser@workpc

MySQL 如何处理访问权限

Navicat 的 MySQL 在线手册中提供了以下信息:

  • MySQL 特权系统的主要功能是对从给定主机连接的用户进行身份验证,并将该用户与数据库上的权限关联,例如选择、插入、更新和删除。
  • 有关用户权限的信息存储在名为mysql数据库中的用户数据库主机procs表中。MySQL 服务器在启动时读取这些表的内容。
  • 当您运行连接到服务器的客户端程序时,MySQL 访问控制包括两个阶段,在本例中为 Navicat:
    • 阶段 1:服务器检查是否允许您连接。
    • 阶段 2:假设您可以连接,服务器将检查您发出的每个语句,以确定您是否有足够的权限执行它。例如,创建表权限、删除表权限或更改表权限。
  • 服务器使用mysql数据库中的用户db主机表进行两级访问控制。

在 Navicat 中深入创建和编辑用户

Navicat 的用户设计器提供了向任何用户授予或撤销服务器权限的灵活性,并采用了选择性方法,以便分别管理特定数据库、表、视图(甚至单个字段)、函数和过程的权限。

与任何其他对象一样,为了在 Navicat 中创建和编辑用户,您可以使用相关的工具栏按钮(如前一节所述)或右键单击用户列表,从弹出菜单中选择必要的操作,添加用户编辑用户删除用户

在打开的用户编辑器窗口中,也许不用说您必须在常规选项卡下填写用户名主机密码等基本用户属性。

完成后,您可以切换到高级选项卡,在这里您可以指定每小时分配给用户的查询和连接的数量(限制)。所有值均设置为0(默认值),在本例中表示无限制。

您想检查使用旧密码加密选项为任何需要连接到 4.1 版或更高版本 MySQL 服务器的 MySQL 4.1 之前的客户端设置密码。否则,服务器将生成长密码哈希。该选项不影响身份验证(MySQL 4.1 及更高版本仍然可以使用具有长密码散列的帐户),但它确实可以防止由于密码更改操作而在用户表中创建长密码散列。以下是高级选项卡的屏幕截图:

Diving deep into creating and editing a user in Navicat

SSL 窗格允许您指定与 SSL 相关的选项,例如身份验证类型和证书属性。有关配置 SSL 选项的更多信息,请参阅 Navicat 的联机手册。相关部分在服务器安全管理MySQL 安全管理MySQL 用户设计器****设置高级 MySQL 属性下。

服务器权限选项卡中,您可以向用户授予服务器范围的权限,然后用户应用于该服务器上的所有数据库。一旦授予,用户将对服务器上的所有数据库具有相同的已定义权限。由于特权列表是按字母顺序排列的,所以只需选中或取消选中与第二列中的列表项对应的小框。当您编辑root用户时,您会注意到所有权限都将显示为选中状态。要从列表中选择(或取消选择)所有项目,请右键单击列表中弹出菜单显示全部授予撤销所有命令的任何位置。

在 Mac 中,在对象权限选项卡下,您可以为任何选定的数据库对象添加个人权限,无论是整个数据库本身,还是特定的表、字段、视图或过程,如下图所示:

Diving deep into creating and editing a user in Navicat

在 Windows 中,单击权限选项卡添加权限。

要编辑用户的特定对象权限,点击添加权限打开二级模型窗口,按照以下步骤操作:

  1. 展开树视图中的节点,显示从数据库到各个对象(如表和字段)的层次结构,直到到达要定义权限的目标对象。
  2. 选中该对象以在右侧窗格中显示特权列表。
  3. 在列表中,对照特权列下列出的权限类型,选中授予选项,将其分配给用户。当然,可以授予多个特权。
  4. 完成后点击添加按钮,然后记得按保存按钮(用户编辑器窗口主工具栏上的软盘图标指示)。

SQL 预览选项卡生成自上次保存权限设置以来,需要在服务器上运行的 SQL 命令,以授予或撤销权限。因此,这些 SQL 命令在点击保存按钮后自动执行。

下面是一些通过编辑权限生成的 SQL 命令示例:

GRANT Alter, Create View, Grant Option, Create ON `sakila`.* TO `producer`@`localhost`;
GRANT Alter, Create View, Grant Option, Create ON TABLE `sakila`.`actor` TO `producer`@`localhost`;
GRANT Alter, Create View, Grant Option, Create ON TABLE `sakila`.`address` TO `producer`@`localhost`;
GRANT Alter, Create View, Grant Option, Create ON TABLE `sakila`.`city` TO `producer`@`localhost`;
GRANT Alter, Create View, Grant Option, Create ON TABLE `sakila`.`country` TO `producer`@`localhost`;
GRANT Create View, Select, Show View ON TABLE `sakila`.`customer` TO `producer`@`localhost`;

使用 Navicat 执行维护任务

Navicat 为数据库和表维护任务提供了一组图形工具,这些任务实际上是原生 MySQL 服务。为此,Navicat 支持四项主要任务,这些任务可以在 MySQL 数据库表上执行:

  • 分析
  • 检查
  • 优化
  • 修理

在编写本书时,Navicat 没有专门的菜单(在菜单栏中)或按钮来触发这些任务。基本上,您需要切换到 Navicat 主窗口中的视图,然后右键单击要执行其中一项任务的表或视图。然后,从弹出菜单中选择维护,然后选择相关任务作为子菜单项。现在,让我们更仔细地看看这些任务是什么,哪些是好的,如下面的截图所示:

Performing maintenance tasks with Navicat

使用 Navicat 分析 MySQL 表或视图

分析表命令分析并存储所选表的密钥分配。MySQL 使用存储的密钥分发来决定表的连接顺序。

启动分析时,如果表具有 MyISAM 或 BDB 作为底层数据库引擎,则会使用读锁锁定该表。对于 InnoDB,表是用写锁锁定的。目前,MySQL 仅支持 MyISAM、BDB 和 InnoDB 表的分析。对于 MyISAM 表,此操作相当于运行命令myisamchk --analyze

查看表格或视图

此维护任务检查表中的错误。在编写本书时,MySQL 只支持检查 MyISAM、InnoDB 和归档表。当检查MyISAM 表时,它们的关键统计信息也会更新。

下表总结了其他检查选项:

|

选择权

|

功能

| | --- | --- | | 快速 | 不扫描行以检查不正确的链接。这适用于 InnoDB 和 MyISAM 表和视图。 | | 快速 | 仅检查未正确关闭的表。这仅适用于 MyISAM 表和视图。 | | 变更 | 仅检查自上次检查以来已更改或未正确关闭的表。这仅适用于 MyISAM 表和视图。 | | 扩展 | 对每行的所有键执行完整键查找。这可以确保表格 100%一致,但需要很长时间。它仅适用于 MyISAM 表和视图。 |

优化变得简单

优化表的主要原因是回收未使用的空间并对与表关联的数据文件进行碎片整理。如果您从表中删除了大量行,或者频繁更新了具有可变长度行的表(具有varcharblobtext字段的表),则应优化该表。由于优化任务,删除的记录保存在链表中,后续的INSERT操作重用旧的行位置。

在编写本书时,MySQL 仅支持 MyISAM、InnoDB 和 BDB 表的优化。

对于 MyISAM 表,表优化工作如下:

  • 如果该表已删除或拆分行,请修复该表
  • 如果索引页未排序,请对其进行排序
  • 如果表统计信息不是最新的(并且无法通过对索引排序来完成修复),请更新它们

修桌子

标题的意思就是它所说的。如果您怀疑某个表已损坏或工作状态不太好,您可以执行修复表,在大多数情况下,它可以解决所有问题。可在两种模式下进行维修—快速扩展快速修复仅尝试修复表的索引树。在扩展模式下,MySQL 逐行创建索引,而不是一次创建一个索引。

总结

你刚刚读完这一章。现在,您应该能够在 Navicat 中创建、编辑和删除用户,为他们分配服务器范围的权限,甚至为特定数据库对象定义个人权限,并为给定用户分配这些权限。

当谈到故障排除时,您现在也知道了如何分析和检查 MySQL 表或视图的错误,并确保它们正常运行。您还学习了如何使用 Navicat 的一键式维护工具优化和修复 MySQL 表。