MySQL 从入门到项目实践(超值版)
上QQ阅读APP看书,第一时间看更新

第3章
MySQL常用管理工具的使用

◎本章教学微视频:11个 40分钟

学习指引

在安装完MySQL数据库之后,读者会发现该软件并没有提供图形化管理工具,对于初学者来说有一定的难度,所以本章介绍目前最为流行的图形化管理工具,包括phpMyAdmin、Navicat for MySQL、MySQL Workbench等工具,另外还介绍了访问权限、用户账户管理等基本的设置维护。通过本章的学习,读者能够掌握几种常用的MySQL管理工具并能熟练应用。

重点导读

• 了解phpMyAdmin的基本功能。

• 掌握phpMyAdmin的基本操作。

• 了解Navicat for MySQL的基本功能。

• 掌握Navicat for MySQL的基本操作。

• 了解MySQL Workbench的基本功能。

• 掌握MySQL Workbench的基本操作。

• 掌握MySQL用户账户管理。

• 掌握MySQL权限系统。

• 掌握解决MySQL安全性问题的方法。

3.1 phpMyAdmin

phpMyAdmin是一款使用PHP开发的B/S模式的MySQL管理软件,该工具是基于Web跨平台的管理程序,并且支持简体中文。有了该工具,PHP开发者就不必通过命令来操作MySQL数据库,可以像SQLServer那样通过可视化的图形来操作数据库。

3.1.1 基本功能介绍

在浏览器中输入phpMyAdmin的官方网站地址https://www.phpmyadmin.net/即可下载最新版本的phpMyAdmin,如图3-1所示。

下载并完成安装后即可启动phpMyAdmin,输入phpMyAdmin访问地址http://localhost:8088/phpmyadmin/即可打开登录界面,如图3-2所示。

图3-1 下载页面

图3-2 登录界面

输入正确的用户名和密码即可进入phpMyAdmin的主界面,用户只需要单击New链接即可创建新的数据库,如图3-3所示。

图3-3 phpMyAdmin的主界面

phpMyAdmin可以运行在各种版本的PHP及MySQL下,可以对数据库进行操作,例如创建、修改和删除数据库、数据表及数据等。

3.1.2 管理数据库

phpMyAdmin是一套使用PHP程序语言开发的管理程序,它采用网页形式的管理界面。如果要正确地执行这个管理程序,必须要在网站服务器上安装PHP与MySQL数据库。

在MySQL数据库安装完毕之后会有4个内置数据库,即information_schema、mysql、performance_schema和test。

(1)mysql数据库是系统数据库,在24个数据表中保存了整个数据库的系统设置,十分重要。

(2)information_schema包括数据库系统中的库、表、字典、存储过程等所有对象信息和进程访问、状态信息。

(3)performance_schema新增一个存储引擎,主要用于收集数据库服务器性能参数,包括锁、互斥变量、文件信息;保存历史的事件汇总信息,为提供MySQL服务器性能做出详细的判断,对于新增和删除监控事件点非常容易,并可以随意改变MySQL服务器的监控周期。

(4)test数据库是让用户测试用的数据库,可以在里面添加数据表来测试。

这里以在MySQL中创建一个企业员工管理数据库company为例进行介绍,并添加一个员工信息表employee。在文本框中输入要创建数据库的名称company,然后单击“创建”按钮即可,如图3-4所示。

图3-4 创建数据库

提示:在一个数据库中可以保存多个数据表,这里以本页所举的范例来说明。在一个企业员工管理数据库中可以包含员工信息数据表、岗位工资数据表、销售业绩数据表等,因此这里需要创建数据库company,还需要创建数据表employee。

1.添加数据表

添加一个员工信息数据表,表3-1所示为这个数据表的字段规划。

表3-1 员工信息数据表

在其中有以下几个要注意的地方:

• 员工编号(cmID)为这个数据表的主索引字段,基本上它是数值类型保存的数据。在添加数据时数据库能自动为学生编号,所以在字段上加入了auto_increment(自动编号)的特性。

• 姓名(cmName)属于文本字段,一般不会超过10个中文字,也就是不会超过20 Bytes,所以这里设置为VARCHAR(20)。

• 性别(cmSex)属于文本字段,因为只保存一个中文字(男或女),所以设置为CHAR(2),其默认值为“男”。

• 生日(cmBirthday)属于日期时间格式,设置为DATE。

• 电子邮件(cmEmail)和住址(cmAddress)都是文本字段,设置为VARCHAR(100),最多可保存100个英文字符,50个中文字。

• 电话(cmPhone)设置为VARCHAR(50)。

因为每个人不一定有电子邮件、电话和住址,所以这3个字段允许为空。

接着回到phpMyAdmin的管理界面,为MySQL中的company数据库添加数据表。在左侧列表中选择创建的company数据库,输入添加的数据表名称和字段数,然后单击“执行”按钮,如图3-5所示。

图3-5 添加数据表

按照表3-1中的内容设置数据表,图3-6所示为添加的数据表字段。

图3-6 添加数据表字段

在设置的过程中要注意以下4点:

• 设置cmID为整数;

• 设置cmID为自动编号;

• 设置cmID为主键列;

• 允许cmEmail、cmPhone、cmAddress为空。

在设置完毕之后单击“保存”按钮,在打开的界面中可以查看完成的employee数据表,如图3-7所示。

图3-7 完成数据表的创建

2.添加数据

在添加数据表后还需要添加具体的数据,操作步骤如下。

步骤1:选择employee数据表,单击“插入”链接,然后依照字段顺序将对应的数值依次输入,再单击“执行”按钮,即可插入数据,如图3-8所示。

图3-8 添加数据

步骤2:按照图3-9所示的数据,重复执行上一步操作,将数据输入到数据表中。

图3-9 添加数据到数据表

3.数据库的备份

用户可以使用phpMyAdmin的管理程序将数据库中的所有数据表导出成一个单独的文本文件。当数据库受到损坏或者要在新的MySQL数据库中加入这些数据时,只要将这个文本文件插入即可。

以本章所使用的文件为例,先进入phpMyAdmin的管理界面,接下来就可以备份数据库了,具体的操作步骤如下。

步骤1:选择需要导出的数据库,单击“导出”链接,进入下一页,如图3-10所示。

图3-10 导出备份数据库

步骤2:选择导出方式为“快速-显示最少的选项”,单击“执行”按钮,如图3-11所示。

图3-11 执行导出数据库的操作

步骤3:打开“另存为”对话框,在其中输入保存文件的名称,并设置保存的类型及位置,如图3-12所示。

4.数据库的还原

还原数据库的操作步骤如下。

步骤1:在执行数据库的还原之前必须将原来的数据表删除,单击employee数据表右侧的“删除”链接,如图3-13所示。

图3-12 设置数据库导出位置及名称

步骤2:此时会显示一个询问对话框,单击“确定”按钮,如图3-14所示。

图3-13 执行删除原数据库表

图3-14 确认删除原数据库表

步骤3:回到原界面,可以发现该数据表已经被删除了,如图3-15所示。

步骤4:导入刚才备份的company.sql文件,还原该数据表。单击“导入”链接,打开要导入文件的页面,如图3-16所示。

图3-15 原数据库表已被删除

图3-16 数据库导入页面

步骤5:单击“浏览”按钮,打开“选择要加载的文件”对话框,然后选择上面保存的文本文件company.sql,单击“打开”按钮,如图3-17所示。

图3-17 选择要导入的数据库

步骤6:单击“执行”按钮,系统即会读取company.sql文件中所记录的指令与数据,将数据表恢复,如图3-18所示。

图3-18 执行数据库恢复命令

步骤7:在执行完毕后company数据库中又出现了一个数据表employee,如图3-19所示。

图3-19 完成数据库的恢复

3.2 Navicat for MySQL

Navicat for MySQL是一款强大的MySQL数据库管理和开发工具,它为专业开发者提供了一套强大的足够尖端的工具,但新用户仍然易于学习。

3.2.1 基本功能介绍

Navicat Premium是一个可多重连接的数据库管理工具,它可以让用户以单一程序同时连接到MySQL、Oracle、PostgreSQL、SQLite及SQLServer数据库,让管理不同类型的数据库更加方便。Navicat Premium结合了其他Navicat成员的功能。有了不同数据库类型的连接能力,Navicat Premium支持在MySQL、Oracle、PostgreSQL、SQLite及SQLServer之间传输数据。它支持MySQL、Oracle、PostgreSQL、SQLite及SQLServer的大部分功能。

Navicat for MySQL是一套专为MySQL设计的高性能数据库管理及开发工具。它可以用于3.21或以上的MySQL数据库服务器,并支持MySQL最新版本的大部分功能,包括触发器、存储过程、函数、事件、视图、管理用户等。

Navicat for MySQL使用了极好的图形用户界面(GUI),可以用一种安全且更加容易的方式快速地创建、组织、存取和共享信息。用户可以完全控制MySQL数据库和显示不同的管理资料,包括一个多功能的图形化管理用户和访问权限的管理工具,方便将数据从一个数据库转移到另一个数据库中(Local to Remote、Remote to Remote、Remote to Local),进行数据备份。Navicat for MySQL支持Unicode,以及本地或远程MySQL服务器的连接,用户可浏览数据库、建立和删除数据库、编辑数据、建立或执行SQLQueries、管理用户权限(安全设定)、将数据库备份/还原、导入/导出数据(支持CSV、TXT、DBF和XML数据格式)等。软件与任何MySQL 5.0.x服务器版本兼容,支持Triggers,以及binary varbinary/bit数据格式等的规范。

3.2.2 基本应用

本节继续学习Navicat for MySQL的基本操作。

1.下载与安装Navicat for MySQL

Navicat for MySQL的官方下载地址为http://www.navicat.com.cn/download/navicat-for-mysql,如图3-20所示。

下载完成后即可进行安装,具体操作步骤如下:

步骤1:双击安装程序,打开欢迎安装窗口,然后单击“下一步”按钮,如图3-21所示。

图3-20 Navicat for MySQL下载页面

图3-21 欢迎安装窗口

步骤2:进入“许可证”窗口,选中“我同意”单选按钮,单击“下一步”按钮,如图3-22所示。

图3-22 “许可证”窗口

步骤3:进入“选择安装文件夹”窗口,如果需要更改安装路径,可以单击“浏览”按钮,然后选择新的安装路径。这里采用默认的安装路径,直接单击“下一步”按钮,如图3-23所示。

图3-23 “选择安装文件夹”窗口

步骤4:进入“选择开始目录”窗口,选择在哪里创建快捷方式。这里采用默认的路径,单击“下一步”按钮,如图3-24所示。

图3-24 设置在哪里创建快捷方式

步骤5:进入“选择额外任务”窗口,选中Create a desktop icon复选框,单击“下一步”按钮,如图3-25所示。

图3-25 设置桌面快捷方式

步骤6:进入“准备安装”窗口,单击“安装”按钮,如图3-26所示。

图3-26 开始安装软件

步骤7:安装完成后单击“完成”按钮即可,如图3-27所示。

图3-27 完成软件安装

2.连接MySQL服务器

步骤1:打开Navicat for MySQL,选择“文件”→“新建连接”→MySQL命令,如图3-28所示。

图3-28 连接数据库

步骤2:打开“MySQL-新建连接”对话框,输入连接名,然后使用root连接到本机的MySQL即可执行相关数据库的操作,如图3-29所示。

图3-29 设置数据库连接参数

步骤3:单击“确定”按钮,即可连接到MySQL服务器,如图3-30所示。

图3-30 完成数据库连接

连接成功后,在左边的树形目录中会出现此连接。注意,在Navicat中每个数据库的信息是单独获取的,没有获取的数据库的图标会显示为灰色。一旦Navicat执行了某些操作,获取了数据库信息之后,相应的图标就会显示成彩色。

3.创建数据库

在连接到MySQL服务器之后即可创建数据库,具体操作步骤如下。

步骤1:右击mysql选项,在弹出的快捷菜单中选择“打开连接”命令,如图3-31所示。

图3-31 选择“打开连接”命令

步骤2:这里只是获取了MySQL服务器的信息,数据库并没有获取,所以显示为灰度。这样做可以提高Navicat的运行速度,因为它只打开需要使用的内容。例如这里单击world数据库后显示为彩色,如图3-32所示。

图3-32 展开数据库表

提示:Navicat的界面与SQLServer的数据库管理工具非常相似,左边是树形目录,用于查看数据库中的对象。每一个数据库的树形目录下都有表、视图、存储过程、查询、报表、备份和计划任务等节点,单击节点可以对该对象进行管理。

步骤3:在左边列表中的空白处右击,并在弹出的快捷菜单中选择“新建数据库”命令,如图3-33所示。

图3-33 选择“新建数据库”命令

步骤4:打开“新建数据库”对话框,输入数据库的名称test,然后单击“确定”按钮,如图3-34所示。

图3-34 命名新建数据库

步骤5:至此成功创建一个数据库,接下来可以在该数据库中创建表、视图等,如图3-35所示。

图3-35 完成新数据库的创建

4.创建数据表

在数据库创建完成后即可创建数据表,具体操作步骤如下。

步骤1:在窗口上方的工具栏中选择“表”,然后单击“新建表”按钮,或者在右侧列表中右击“表”选项,在弹出的快捷菜单中选择“新建表”命令,如图3-36所示。

图3-36 执行“新建表”命令

步骤2:进入创建数据表的页面。在创建表的过程中有一个地方需要特别注意,那就是“栏位”,对于栏位,初次使用Navicat的新手比较陌生,其含义是我们通常所说的“字段”,工具栏中的“添加栏位”即添加字段,在添加完所有的字段以后要根据需求设置相应的“主键”。

用户可以使用工具栏中的工具进行栏位的添加、主键的设置、栏位的顺序调整等操作,如图3-37所示。

图3-37 数据表工具栏

步骤3:在这里创建的数据表包含3个栏位的表,其中id为主键,如图3-38所示。

图3-38 添加数据表栏位

步骤4:单击“保存”按钮,打开“表名”对话框,输入数据表的名称为student,然后单击“确定”按钮,如图3-39所示。

如果数据库比较复杂,可以根据需要重复前面的相关设置,在“栏位”选项卡右侧还有“索引”“外键”“触发器”等选项卡供用户使用,在“SQL预览”选项卡中是SQL语句。如果需要对表结构进行修改,在工具栏中选择“表”,然后选中要修改的表并右击,在弹出的快捷菜单中选择“设计表”命令,如图3-40所示。

图3-39 命名数据表

图3-40 修改数据表

5.添加数据

在左边的结构树中单击“表”,找到要添加数据的表,例如test,然后双击;或者在工具栏中选择“表”,然后选中要插入数据的表,单击“打开表”按钮。在窗口右边将打开添加数据的页面,可以在其中直接输入相关数据,如图3-41所示。

图3-41 添加数据到数据表

6.数据库的备份和还原

备份和还原数据库的具体操作步骤如下。

步骤1:在窗口上方的工具栏中单击“备份”按钮,或者在左边的结构树中单击要备份数据库下的“备份”选项,打开备份页面,如图3-42所示。

图3-42 数据库备份页面

步骤2:单击“新建备份”按钮,打开“新建备份”窗口,在其中设置备份数据库的相关信息,例如在“常规”选项卡中添加注释信息,在“对象选择”选项卡中选择要备份的表,在“高级”选项卡中选择是否压缩、是否使用指定文件名等,在“信息日志”选项卡中显示备份过程,如图3-43所示。

步骤3:设置完成后单击“开始”按钮,即可开始备份并显示备份的结果,如图3-44所示。

图3-43 “新建备份”窗口

图3-44 开始备份数据库

步骤4:单击“保存”按钮,命名并保存备份数据库,如图3-45所示。

步骤5:在备份结束之后产生备份文件,若数据库发生新的变化需要再次备份,经过多次备份后会产生多个不同时间的备份文件,如图3-46所示。

图3-45 设置文件名

图3-46 数据库备份记录

步骤6:当需要将数据库还原到某个时间点时选择相应时间,单击“还原备份”按钮,进入“还原备份”窗口,如图3-47所示。

步骤7:单击“开始”按钮,弹出警告对话框,在其中单击“确定”按钮,如图3-48所示。

图3-47 还原备份

图3-48 还原数据库时的警告

步骤8:系统开始自动还原数据,并显示还原后的结果,完成后单击“关闭”按钮即可,如图3-49所示。

图3-49 还原数据库日志

7.查询数据

这里简单介绍一下查询的命令行功能,单击窗口上方工具栏中的“查询”按钮,如图3-50所示。

图3-50 查询数据

单击“新建查询”按钮,在“查询编辑器”中输入要执行的SQL语句,然后单击“运行”按钮,在窗口下方将显示结果、概况、状态等信息,如图3-51所示。

图3-51 查询编辑器

3.3 MySQL Workbench

MySQL Workbench是MySQL图形界面管理工具,和其他数据库图形界面管理工具一样,该工具可以对数据库进行创建数据库表、增加数据库表、删除数据库和修改数据库等操作。

3.3.1 MySQL Workbench的概述

MySQL Workbench是一款为用户提供了用于创建、修改、执行和优化SQL的可视化工具,使用它开发人员可以很轻松地管理数据,并且该工具提供给开发者一整套可视化的用于创建、编辑和管理SQL查询以及管理数据库连接的操作。在可视化SQL编辑工作模式下,用户创建表、删除表、修改表信息等只需要使用简单的可编辑列表就能完成。

MySQL Workbench在数据库管理方面也提供了可视化的操作,例如管理用户、授予和收回用户权限,并且在数据库管理中可以查看到数据库的状态,其中包括数据库中开启了多少个客户端、数据库缓存的大小以及管理数据库日志等信息。

MySQL Workbench在数据库管理中导入、导出数据库信息方面提供了比较方便的操作。

另外,MySQL Workbench提供了数据库建模管理设计,可以说是著名的数据库设计工具DBDesigner4的继承者,用户可以使用该工具设计和创建新的数据库物理模型。该工具可以说是下一代数据库可视化设计管理工具的佼佼者,目前MySQL Workbench提供了开源和商业化两个版本,同时支持Windows和Linux系统。

3.3.2 MySQL Workbench的优势

目前流行的MySQLGUI Tools有很多,常见的有MySQL Query Brower、MySQL Administrator和MySQL System Tray Monitor等工具,MySQL Workbench和大部分MySQL管理工具一样,提供了MySQL语法校验,在可视化操作下创建数据Schema、表和视图等数据库对象。

除此之外,MySQL Workbench管理工具在MySQL管理方面独树一帜,提供了对数据库服务的启动/停止的管理,以及查看用户连接次数和数据库健康状况。

用户通常认为MySQL Workbench是一个MySQL数据库E-R模型设计的工具,可以说是专门为MySQL数据库提供的数据库设计工具,用户使用MySQL Workbench可以很容易地设计、编辑数据库E-R模型。这一功能可以说是MySQL Workbench的一大亮点。

3.3.3 SQL Development的基本操作

在MySQL Workbench工作空间的SQLDevelopment工作模式下可以创建一个新的数据库连接,编辑并运行SQL语句,和其他数据库管理软件一样,用户可以在图形化界面中管理数据库表的基本信息,本节将学习通过MySQL Workbench在图形化界面中如何创建并管理数据库信息。

1.创建数据库连接

在MySQL Workbench工作空间下对数据库数据进行管理之前需要先创建数据库连接,具体操作步骤如下。

步骤1:在MySQL Workbench工作空间中单击New Connection按钮,如图3-52所示。

图3-52 MySQL Workbench的工作空间

步骤2:在所打开对话框的Connection Name文本框中输入数据库连接的名称,然后输入MySQL服务器的IP地址、用户名和密码,如图3-53所示。

图3-53 设置连接数据库的信息

步骤3:单击OK按钮,即可连接到MySQL服务器,左侧展示的是test库中的Tables、Views以及Routines;Query 1窗口是用来执行SQL语句的窗口;右侧的SQLAdditions窗口是用来帮助用户写SQL语句的提示窗口,如图3-54所示。

图3-54 完成数据库连接

2.创建数据库

成功创建数据库连接之后,在左侧的SCHEMAS下面可以看到test数据库。用户可以创建新的数据库,具体操作步骤如下。

步骤1:单击工具栏上面创建数据库的小图标,如图3-55所示。

图3-55 新建数据库

步骤2:输入新的数据库名,在这里输入的是crm,然后单击Apply按钮,如图3-56所示。

图3-56 命名数据库

步骤3:此时即可看到创建数据库的语句,单击Apply按钮,如图3-57所示。

图3-57 创建数据库的语句

步骤4:单击Finish按钮,完成创建数据库的操作,如图3-58所示。

图3-58 完成数据库的创建

步骤5:在SCHEMAS下面即可看到crm数据库。如果想删除该数据库,可以选中后右击,在弹出的快捷菜单中选择Drop Schema命令,如图3-59所示。

3.创建和删除新的数据表

在成功创建crm数据库之后即可创建、编辑和删除数据表,具体操作步骤如下。

步骤1:在左侧的SCHEMAS列表中展开crm节点,选择Tables选项并右击,在弹出的快捷菜单中选择Create Table命令,如图3-60所示。

图3-59 查看和删除新数据库

图3-60 创建数据表

步骤2:在弹出的products-Table窗口中可以添加表的信息,例如表的名称、表中各列的相关信息,如图3-61所示。

图3-61 设置数据表窗口

步骤3:在设置完数据表的基本信息后单击Apply按钮,弹出一个对话框,在该对话框上有自动生成的SQL语句,如图3-62所示。

图3-62 生成数据表的SQL语句

步骤4:确定无误后单击Apply按钮,然后在弹出的对话框中单击Finish按钮,即可完成创建数据表的操作,如图3-63所示。

图3-63 完成创建数据表的操作

步骤5:至此完成products表的创建,在Tables节点下面展现出来,如图3-64所示。

图3-64 展开数据表

步骤6:如果想删除表,可以右击需要删除的表,并在弹出的快捷菜单中选择Drop Table命令,如图3-65所示。

图3-65 删除表

4.添加、修改表记录

用户可以通过执行添加表记录的SQL语句来添加数据,也可以在Query 1窗口中执行SQL语句来添加,但这两种方法效率不高,下面介绍使用MySQL Workbench在图形界面下对数据库表进行维护,这种操作方式非常方便,具体操作步骤如下。

步骤1:右击Tables节点下面的products表,在弹出的快捷菜单中选择Edit Table Data命令,如图3-66所示。

步骤2:在弹出的窗口中编辑数据表中的数据,编辑完成后单击Apply按钮,如图3-67所示。

图3-66 编辑数据表

图3-67 数据表编辑窗口

5.查询表记录

以上添加了若干条记录到数据库的products表中,下面查询一下数据表中的数据,具体操作步骤如下。

步骤1:右击Tables节点下面的products表,在弹出的快捷菜单中选择Select Rows-Limit 1000命令,如图3-68所示。

步骤2:在右侧打开的窗口中查询数据表中的数据,如图3-69所示。

图3-68 查询数据表命令

图3-69 数据信息

6.修改表结构

用户可以根据工作的实际需求修改表结构,具体操作步骤如下。

步骤1:右击Tables节点下面的products表,在弹出的快捷菜单中选择Alter Table命令,如图3-70所示。

步骤2:在右侧打开的窗口中即可修改数据表的结构。在修改某列数据类型的时候,比如将VARCHAR(45)改成VARCHAR(200),可以直接在下面的框中修改成VARCHAR(200),如图3-71所示。

图3-70 修改数据表结构命令

图3-71 修改数据类型

3.4 MySQL用户账户管理

MySQL用户账户管理通常包括用户账户的创建和删除,下面以使用图形化管理工具phpMyAdmin为例进行讲解。

1.创建用户

其具体操作步骤如下。

步骤1:在phpMyAdmin主界面的工具栏中单击“账户”按钮,然后单击“新增用户账户”链接,如图3-72所示。

图3-72 新增用户账户

步骤2:在“新增用户账户”页面中输入用户名myroot。这里有两个选项——任意用户和使用文本域,它们之间没有明显区别,推荐选择“使用文本域”,如图3-73所示。

图3-73 设置用户账户名

步骤3:在Host name下拉列表框中选择“本地”选项。这里有4个选项,即任意主机、本地、使用主机表、Use text field(也就是使用文本域),如图3-74所示。

图3-74 设置主机信息

步骤4:密码类型选择为“使用文本域”,然后输入两次相同的密码,如图3-75所示。

图3-75 设置用户密码

步骤5:单击“执行”按钮,即可创建一个新用户,如图3-76所示。

图3-76 完成用户的添加

步骤6:在工具栏中单击“账户”按钮,即可看到新添加的用户myroot,如图3-77所示。

图3-77 查看新添加的用户

2.删除用户

对于不再需要的账户,可以直接删除。在phpMyAdmin主界面的工具栏中单击“账户”按钮,然后选择需要删除的账户。如果需要删除和用户名称一样的数据库,可以选中“删除与用户同名的数据库”复选框,然后单击“执行”按钮完成删除用户的操作,如图3-78所示。

图3-78 删除用户及数据库

3.5 MySQL权限系统

1.MySQL权限系统的作用

MySQL权限系统用于对用户执行的操作进行限制。用户的身份由用户用于连接的主机名和使用的用户名来决定。在连接后,对于用户的每一个操作,系统都会根据用户的身份判断该用户是否有执行该操作的权限,例如SELECT、INSERT、UPDATE和DELETE权限。其附加的功能包括匿名用户对于MySQL特定功能(例如LOAD DATA INFILE)进行授权及管理操作的能力。

2.MySQL权限系统的工作原理

MySQL存取控制包括下面两个阶段。

(1)阶段1:服务器检查是否允许连接。

(2)阶段2:假定允许连接,服务器需要检查用户发出的每个请求,判断是否有足够的权限。例如,如果用户从数据表中选择行或从数据库中删除表,服务器需要确定用户对表有SELECT权限或对数据库有DROP权限。

服务器在存取控制的两个阶段使用MySQL数据库中的user、db和host表。user表中的范围列决定是否允许或拒绝到来的连接,对于允许的连接,user表授予的权限指出用户的全局(超级用户)权限,这些权限适用于服务器上的all数据库。db表中的范围列决定用户能从哪个主机存取哪个数据库,权限列决定允许哪个操作,授予的数据库级别的权限适用于数据库和它的表。

除了user、db和host授权表,如果请求涉及表,服务器还可以参考tables_priv和columns_priv表。tables_priv和columns_priv表类似于db表,但是更精致。它们是在表和列级应用而非在数据库级,授予表级别的权限适用于表和它的所有列,授予列级别的权限只适用于专用列。另外,为了对涉及保存程序的请求进行验证,服务器将查阅procs_priv表。procs_priv表适用于保存的程序,授予程序级别的权限只适用于单个程序。

3.MySQL权限系统提供的权限

GRANT和REVOKE语句所用的涉及权限的名称、在授权表中每个权限的表列名称以及每个权限相关的对象如表3-2所示。

表3-2 MySQL权限系统提供的权限

在MySQL图形化管理工具中都有权限管理模块,下面以phpMyAdmin为例简单介绍如何给用户账号授权,具体操作步骤如下。

步骤1:在phpMyAdmin主界面的工具栏中单击“账户”按钮,然后选择需要授权账户右侧的“修改权限”链接,如图3-79所示。

图3-79 修改账户权限

步骤2:进入Global界面,在这里可以设置具体的权限,也可以直接选中“全局权限”复选框,该权限包括数据、结构和管理3个方面的权限,如图3-80所示。

图3-80 权限设置

步骤3:选择“数据库”选项,进入“数据库”界面,然后选择需要的数据库,这里选择company数据库,如图3-81所示。

图3-81 选择数据库

步骤4:单击“执行”按钮,即可完成为用户myroot添加权限的操作,如图3-82所示。

图3-82 确认数据库权限修改

注意:在授权时必须非常谨慎,因为权限越多,安全性越低,必须对每个用户都实行控制。

3.6 MySQL的安全性问题

本节介绍MySQL数据库的高级应用,主要包括MySQL数据库的安全、MySQL数据库的加密等内容。

3.6.1 加强MySQL数据库的安全

MySQL数据库是存在于网络上的数据库系统,只要是网络用户,都可以连接到这个资源,如果没有权限或其他措施,任何人都可以对MySQL数据库进行存取。MySQL数据库在安装完成后默认是完全不设防的,也就是任何人都可以不使用密码就连接到MySQL数据库,这是一个相当危险的安全漏洞。

1.phpMyAdmin管理程序的安全考虑

phpMyAdmin是一套网页界面的MySQL管理程序,有许多PHP的程序设计师都会将这套工具直接上传到他的PHP网站文件夹里,管理员只能从远端通过浏览器登录phpMyAdmin来管理数据库。

这个方便的管理工具是否也是方便的入侵工具呢?没错,只要是对phpMyAdmin管理较为熟悉的朋友,看到该网站是使用PHP+MySQL的互动架构,都会去测试该网站的phpMyAdmin文件夹是否安装了phpMyAdmin管理程序,若是网站管理员一时疏忽,很容易让人猜中,进入该网站的数据库。

2.防堵安全漏洞的建议

无论是MySQL数据库本身的权限设置,还是phpMyAdmin管理程序的安全漏洞,为了避免他人通过网络入侵数据库,必须要先做以下几件事。

(1)修改phpMyAdmin管理程序的文件夹名称。这个做法虽然简单,但至少已经挡掉一大半非法入侵者了。最好是修改成不容易猜到,与管理或MySQL、phpMyAdmin等关键字无关的文件夹名称。

(2)为MySQL数据库的管理账号加上密码。MySQL数据库的管理账号root默认是不设任何密码的,这就好像装了安全系统却没打开电源开关一样,所以替root加上密码是相当重要的。

(3)养成备份MySQL数据库的习惯。一旦用户的所有安全措施都失效了,若平时就有备份的习惯,即使数据被删除了,也能很轻松地恢复。

3.6.2 为MySQL管理账号加上密码

在MySQL数据库中管理员账号为root,为了保障数据库账号的安全,可以为管理员账号加密,具体操作步骤如下。

步骤1:进入phpMyAdmin的主界面,单击“权限”链接,然后设置管理员账号的权限,如图3-83所示。

图3-83 设置管理员账号的权限

步骤2:这里有两个root账号,分别为由本机(localhost)进入和所有主机(::1)进入的管理账号,默认没有密码。首先修改所有主机的密码,单击“编辑权限”链接,进入下一页,如图3-84所示。

图3-84 编辑权限

步骤3:在所打开界面的“密码”文本框中输入要使用的密码,单击“执行”按钮即可添加密码,如图3-85所示。

图3-85 添加密码

3.7 就业面试技巧与解析

3.7.1 面试技巧与解析(一)

面试官:在MySQL数据库中有几种加密类型?

应聘者:在MySQL数据库中一般可以使用3种不同类型的安全检查。

(1)登录验证:也就是最常用的用户名和密码验证。一旦输入了正确的用户名和密码,这个验证就可以通过。

(2)授权:在登录成功后要求对这个用户设置具体权限,例如是否可以删除数据库中的表等。

(3)访问控制:这个安全类型更具体,它涉及这个用户可以对数据表进行什么操作,例如是否可以编辑数据库、是否可以查询数据等。访问控制由一些特权组成,这些特权涉及如何操作MySQL中的数据。它们都是布尔型,即要么允许,要么不允许。

3.7.2 面试技巧与解析(二)

面试官:敏感数据如何加密?

应聘者:如果数据库中保存了敏感数据,例如银行卡密码、客户信息等,你可能想将这些数据以加密的形式保存在数据库中,这样即使有人进入了你的数据库并看到了这些数据,也很难获得其中的真实信息。

在应用程序的大量信息中,也许你只想让很小的一部分进行加密,例如用户的密码等。这些密码不应该以明文的形式保存,它们应该以加密的形式保存在数据库中。一般情况下,大多数系统(包括MySQL本身)都是使用哈希算法对敏感数据进行加密的。

哈希加密是单向加密,也就是说被加密的字符串是无法得到原字符串的。这种方法的使用很有限,一般只使用在密码验证或其他需要验证的地方。在比较时并不是将加密字符串进行解密,而是将输入的字符串也使用同样的方法进行加密,再和数据库中的加密字符串进行比较。这样即使有人知道了算法并得到了加密字符串,也无法还原最初的字符串,银行卡密码就是采用这种方式进行加密的。