19.11 安全顾问

本节介绍安全顾问。

笔记

MySQL Enterprise Firewall 和 MySQL Enterprise Audit Plug-in 顾问在 MySQL Enterprise FirewallMySQL Enterprise Audit Plugin中进行了描述。

帐户有旧的不安全密码哈希

在 MySQL 4.1 之前,由 PASSWORD() 函数计算的密码哈希长度为 16 个字节。从 MySQL 4.1(及更高版本)开始,PASSWORD() 被修改为生成更长的 41 字节哈希值以提供增强的安全性。

默认频率06:00:00

默认自动关闭是否启用

帐户需要不可用的身份验证插件

从 5.5 版本开始,MySQL 支持多种形式的身份验证,包括使用 PAM 的外部身份验证机制,或 MySQL 5.5.16 或更高版本的商业版本的 Windows 本机身份验证。如果用户配置为使用身份验证插件,并且该插件不会在服务器启动时加载,这会阻止这些用户访问数据库。

默认频率06:00:00

默认自动关闭启用

不安全的密码验证选项已启用

笔记

此顾问不会针对 MySQL 8 或更高版本进行评估。

在 MySQL 4.1 之前,由 PASSWORD() 函数计算的密码哈希长度为 16 个字节。从 MySQL 4.1(及更高版本)开始,PASSWORD() 被修改为生成更长的 41 字节哈希值以提供增强的安全性。但是,为了允许向后兼容从 4.1 之前的系统迁移的用户表,您可以将 MySQL 配置为接受具有使用旧的、安全性较低的 PASSWORD() 函数创建的密码哈希的帐户的登录,但这不推荐。

默认频率06:00:00

默认自动关闭是否启用

不安全的密码生成选项已启用

在 MySQL 4.1 之前,由 PASSWORD() 函数计算的密码哈希长度为 16 个字节。从 MySQL 4.1(及更高版本)开始,PASSWORD() 被修改为生成更长的 41 字节哈希值以提供增强的安全性。为了允许与旧的客户端程序向后兼容,您可以配置 MySQL 为新密码生成短的(4.1 之前的)密码哈希,但是,不推荐这样做。

默认频率06:00:00

默认自动关闭是否启用

启用 LOAD DATA 语句的 LOCAL 选项

LOAD DATA语句可以加载位于服务器主机上的文件,也可以在LOCAL 指定关键字时加载位于客户端主机上的文件。

支持语句 LOCAL版本 有两个潜在的安全问题 :LOAD DATA

  • 文件从客户端主机到服务器主机的传输是由 MySQL 服务器发起的。理论上,可以构建一个补丁服务器,告诉客户端程序传输服务器选择的文件,而不是客户端在LOAD DATA声明中指定的文件。这样的服务器可以访问客户端用户具有读取权限的客户端主机上的任何文件。

  • 在客户端从单独的 Web 服务器连接的 Web 环境中,用户可以LOAD DATA LOCAL用来读取 Web 服务器进程具有读取权限的任何文件(假设用户可以对 SQL 服务器运行任何语句)。在这种环境下,MySQL服务器的客户端实际上是Web服务器,而不是连接到Web服务器的用户正在运行的远程程序。

有关详细信息,请参阅加载数据语句

默认频率00:05:00

默认自动关闭是否启用

基于策略的密码验证不执行字典检查

如果用户创建弱密码,则会危及服务器的安全性,使未经授权的人更容易猜出密码并访问服务器。从 MySQL Server 5.6 开始,MySQL 提供了 validate_password可用于测试密码和提高安全性的插件。使用此插件,您可以实施和强制执行密码强度策略(例如,密码必须至少有 8 个字符长,同时包含小写和大写字母,至少包含一个特殊的非字母数字字符,并且不匹配常用字符字)。

有关validate_password 插件的更多信息,请参阅密码验证组件

默认频率06:00:00

默认自动关闭是否启用

基于策略的密码验证很弱

如果用户创建弱密码,就会危及服务器的安全性,使未经授权的人更容易猜出密码并访问服务器。从 MySQL Server 5.6 开始,MySQL 提供了 validate_password可用于测试密码和提高安全性的插件。使用此插件,您可以实施和强制执行密码强度策略(例如,密码必须至少有 8 个字符长,同时包含小写和大写字母,并且至少包含一个特殊的非字母数字字符)。

有关validate_password 插件的更多信息,请参阅密码验证组件

默认频率06:00:00

默认自动关闭是否启用

未启用基于策略的密码验证

如果用户创建弱密码,就会危及服务器的安全性,使未经授权的人更容易猜出密码并访问服务器。从 MySQL Server 5.6 开始,MySQL 提供了 validate_password可用于测试密码和提高安全性的插件。使用此插件,您可以实施和强制执行密码强度策略(例如,密码必须至少有 8 个字符长,同时包含小写和大写字母,并且至少包含一个特殊的非字母数字字符)。

有关validate_password 插件的更多信息,请参阅密码验证组件

默认频率06:00:00

默认自动关闭是否启用

检测到权限更改:授予权限

对于开发环境,数据库安全权限的更改可能很正常,但对于生产环境,明智的做法是了解何时发生与数据库权限相关的任何安全更改,并确保这些更改得到授权和要求。

默认频率00:05:00

默认自动关闭是否启用

检测到权限更改:权限已撤销

对于开发环境,数据库安全权限的更改可能很正常,但对于生产环境,明智的做法是了解何时发生与数据库权限相关的任何安全更改,并确保这些更改得到授权和要求。

默认频率00:05:00

默认自动关闭是否启用

检测到权限更改

对于开发环境,数据库安全权限的更改可能很正常,但对于生产环境,明智的做法是了解何时发生与数据库权限相关的任何安全更改,并确保这些更改得到授权和要求。

默认频率00:05:00

默认自动关闭是否启用

Root账号可以远程登录

默认情况下,MySQL 包含一个具有无限权限的根帐户,通常用于管理 MySQL 服务器。如果可能的话,拥有如此强大权限的帐户不应允许远程登录,以将访问权限限制为仅能够登录到运行 MySQL 的机器的用户。这有助于防止未经授权的用户访问和更改系统。

默认频率00:05:00

默认自动关闭是否启用

没有密码的根帐户

root 用户帐户具有无限权限,用于管理任务。特权帐户应具有强密码,以防止未经授权的用户访问和更改系统。

默认频率00:05:00

默认自动关闭启用

未启用 SHA-256 密码验证

为了帮助保持服务器安全,每个用户的密码都经过加密,加密方法越强,服务器越安全。从 MySQL Server 5.6 开始,MySQL 提供了一种新的加密算法,该算法使用 SHA-256 密码散列法执行身份验证。这是比本机身份验证可用的加密更强的加密。

默认频率06:00:00

默认自动关闭是否启用

服务器包含默认的“测试”数据库

默认情况下,MySQL 附带一个 test任何人都可以访问的数据库。此数据库仅用于测试,应在进入生产环境之前删除。因为默认 test数据库可以被任何用户访问并且具有宽松的权限,所以应该在安装过程中立即删除它。

默认频率00:05:00

默认自动关闭是否启用

服务器有没有密码的帐户

没有密码的帐户特别危险,因为攻击者只需要猜测用户名即可。为所有帐户分配密码有助于防止未经授权的用户访问系统。

默认频率00:05:00

默认自动关闭启用

服务器有匿名帐户未被用作代理

匿名 MySQL 帐户允许客户端在不指定用户名的情况下连接到服务器。由于匿名帐户在 MySQL 中众所周知,删除它们有助于防止未经授权的用户访问系统。

笔记

该顾问区分匿名帐户和代理用户。有关代理用户的更多信息,请参阅 代理用户

默认频率00:05:00

默认自动关闭启用

服务器没有本地认证的根用户

MySQL 5.5 支持内置身份验证和通过 PAM(LDAP,Unix 用户身份验证)和 Windows 本机身份验证等其他方法进行的外部身份验证。但是,如果所有“root”用户都配置为使用外部身份验证,如果此外部身份验证失败(例如 LDAP 服务器断电),则所有管理员对 MySQL 服务器的访问都会被拒绝。

默认频率06:00:00

默认自动关闭是否启用

服务器包含根用户帐户

默认情况下,MySQL 包含一个具有无限权限的根帐户,通常用于管理 MySQL 服务器。没有理由必须命名此帐户 root。拥有如此强大权限的帐户应该不会轻易被发现。由于 root 帐户在 MySQL 中众所周知,更改其名称有助于防止未经授权的用户访问和更改系统。

默认频率00:05:00

默认自动关闭是否启用

符号链接已启用

You can move tables and databases from the database directory to other locations and replace them with symbolic links to the new locations. You might want to do this, for example, to move a database to a file system with more free space or to increase the speed of your system by spreading your tables to different disks.

However, symlinks can compromise security. This is especially important if you run mysqld as root, because anyone who has write access to the server's data directory could then delete any file in the system!

Default frequency 06:00:00

Default auto-close enabled no

User Has Rights To Database That Does Not Exist

When a database is dropped, user privileges on the database are not automatically dropped. This has security implications as that user regains privileges if a database with the same name is created in the future, which may not be the intended result.

Default frequency 00:05:00

Default auto-close enabled no

User Has Rights To Table That Does Not Exist

When a table is dropped, user privileges on the table are not automatically dropped. This has security implications as that user regains privileges if a table with the same name in the same database is created in the future, which may not be the intended result.

Default frequency 00:05:00

Default auto-close enabled no

Users Can View All Databases On MySQL Server

The SHOW DATABASES privilege should be granted only to users who need to see all the databases on a MySQL Server. It is recommended that the MySQL Server be started with the --skip-show-database option enabled to prevent anyone from using the SHOW DATABASES statement unless they have been specifically granted the SHOW DATABASES privilege.

Note

If a user is granted any global privilege, such as CREATE TEMPORARY TABLES or LOCK TABLES, they are automatically given the ability to show databases unless the server is started with the --skip-show-database option enabled. DBAs should be aware of this fact, in the event that any applications make use of temporary tables.

Default frequency 00:05:00

默认自动关闭是否启用