MySQL是最受欢迎的开源数据库管理系统,由Oracle公司研发、发行并提供支持。

MySQL是数据库管理系统

数据库是结构化的数据集合。它可以是简单的购物清单,或图片库,或者是公司网络中的海量信息。要添加,访问和处理存储在计算机数据库中的数据,您需要一个数据库管理系统,例如MySQL服务器。由于计算机非常擅长处理大量的数据,数据库管理系统在计算,独立工具或其他应用程序的一部分中起着核心作用。

MySQL是关系型数据库

关系数据库讲数据存储在单独的表中,而不是将所有的数据放到一个仓库内。

该数据库结构以物理文件的形式组织,以提升速度。使用对象如:数据库、表、视图、行、列来组织逻辑模型,提供了灵活的编程环境。您可以设置管理不同数据字段之间的关系,比如:1比1,1比N,或者唯一键。一个设计良好的数据库应该强制执行这些规则,以避免应用程序看到不一致,过期,乃至丢失的数据。

MySQL中的SQL代表结构化查询语言。SQL是访问数据库的最常用的标准化语言。根据您的编程环境,你可能会直接将SQL语句嵌入写在另一种语言中,输入SQL或者是使用特点语言的API,隐藏SQL的语法。

SQL由ANSI/ISO制定标准,自动1986年以来SQL标准就不会发展,至今存在数种版本。 在本手册中,SQL-92表示1992年发布的标准,SQL-99指的是1999年发布的标准,和SQL-2003指的是该标准的最新版本。

MySQL软件是开源的

开源意味着任何人都能使用和修改软件。任何人都可以从互联网上下载MySQL软件,无需支付任何费用。如果你愿意,你可以研究源代码并修改以满足您的需求。MySQL采用了GPL(GNU通用公共许可证)。

另外补充说明,MySQL的官方读音不是 my sequel 而是my SQL,SQL是 standard query language的首字母简写,不能视作单词。

MySQL的主要特征

内部和可移植性

基于C/C++编写

在广泛的编译器上测试通过

支持在多个平台上工作

多层次独立模块的服务器设计

内核被设计使用多线程调度,轻松利用多CPU

提供了事务性和非事务性存储引擎

使用B-tree磁盘索引表

存储引擎实现与规范分离,容易引入新的引擎实现

实现基于线程的内存分配系统

使用优化的嵌套循环连接

实现内存中的哈希表

数据类型

有符号、无符号整数1,2,3,4,8字节长

FLOAT,DOUBLE,CHAR,VARCHAR,BINARY,VARBINARY,TEXT,BLOB,DATE,TIME,DATETIME,TIMESTAMP,YEAR,SET,ENUM。请参考:数据类型。

语句和函数

全部操作和功能支持 SELECT列表和 WHERE 查询。

全面支持GROUP BY和ORDER BY,支持函数(COUNT,AVG,STD,SUM,MAX,MIN,GROUP_CONCAT)

支持 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 使用标准的SQL和ODBC语法。

支持标准SQL所需的表和列别名。

支持DELETE,INSERT,REPLACE,UPDATE。

支持MySQL特有 SHOW ,用于检索数据库,存储引擎,表和索引的信息报表。

支持EXPLAIN语法来显示优化器如何解析查询。

权限与密码管理系统

当你连接到服务器时,所有密码都加密传输

可伸缩性和限制

支持大型数据库。

支持多达每表64个索引。

一般安全问题

在考虑 mysql 安装中的安全性时, 应考虑范围广泛的可能主题以及它们如何影响 mysql 服务器和相关应用程序的安全性:

影响安全性的一般因素。其中包括选择好的密码, 仅授予用户必要的特权, 通过防止 SQL 注入和数据损坏等来确保应用程序的安全性。请参见6.1 节 "一般安全问题".

安装本身的安全性。应保护数据文件、日志文件和安装的所有应用程序文件, 以确保未经授权的当事方无法读取或写入。有关详细信息, 请参阅2.10 节 "安装后安装和测试".

访问控制和数据库系统内部的安全性, 包括授予访问数据库中使用的数据库、视图和存储程序的用户和数据库。有关详细信息, 请参阅6.2 节 "mysql 访问权限系统"和6.3 节 "mysql 用户帐户管理" 。.

与安全相关的插件提供的功能。请参阅6.5 节 "安全插件".

MySQL 和您的系统的网络安全。安全性与单个用户的授权相关, 但您可能还希望限制 mysql, 以便它仅在本地的 mysql 服务器主机上可用, 或仅在仅限于有限的其他主机上使用。

确保您对数据库文件、配置和日志文件有足够和适当的备份。还要确保有一个恢复解决方案到位并测试您是否能够成功地从备份中恢复信息。请参阅7 章备份和恢复.

在讨论安全性时, 必须考虑完全保护整个服务器主机 (而不仅仅是 MySQL 服务器), 以抵御所有类型的适用攻击: 窃听、更改、回放和拒绝服务。在这里, 我们不包括可用性和容错的所有方面。

MySQL 基于访问控制列表 (acl) 对用户可以尝试执行的所有连接、查询和其他操作使用安全性。还支持 MySQL 客户端和服务器之间的 SSL 加密连接。这里讨论的许多概念都不是针对 MySQL 的。同样的一般想法适用于几乎所有的应用程序。

运行MySQL时,请遵循以下守则:

不要给任何人(除了root)授予MySQL的user表的访问权限。

了解MySQL访问权限系统的工作原理。使用GRANT和REVOKE语句来控制对 MySQL 的访问。不要授予超出所需权限的特权。从不向所有主机授予特权。

尝试mysql -u root。如果您能够成功地连接到服务器而不被要求输入密码, 则任何人都可以以具有完全特权的 mysql root用户的权限连接到您的 mysql 服务器!查看 MySQL 安装说明, 特别注意有关设置root密码的信息。请参阅节 2.10.4, "确保初始 MySQL 帐户的安全".

使用SHOW GRANTS语句检查哪些帐户可以访问什么。然后使用REVOKE语句删除那些不必要的特权。

不要在数据库中存储明文密码。如果您的计算机已损坏, 入侵者可以使用完整的密码列表并将其应用。而是使用 SHA2() 或其他一些单向哈希函数并存储哈希值。要防止使用彩虹表进行密码恢复, 请不要在普通密码中使用这些功能;而是选择一些用作盐的字符串, 并使用哈希 (哈希 (口令) + salt) 值。

不要从字典中选择密码。

利用好防火墙

尝试使用诸如nmap这样的工具从 Internet 扫描端口。MySQL 默认使用端口3306。不能从不受信任的主机访问此端口。作为检查 mysql 端口是否打开的简单方法, 请从一些远程计算机上尝试以下命令, 其中 server_host 是您的 mysql 服务器运行的主机的主机名或 IP 地址:

访问 MySQL 的应用程序不应信任用户输入的任何数据, 应该使用适当的防御编程技术编写。请参阅节 6.1.7 "客户端编程安全指南".

不要在 Internet 上传输纯 (未加密) 数据。所有有时间和能力拦截并使用该信息的人都可以访问这些资料。而是使用加密的协议, 如 SSL 或 SSH。MySQL 支持内部 SSL 连接。另一种技术是使用 SSH 端口转发为通信创建加密 (和压缩) 隧道。