MySQL8 中文参考(二十三)(3)https://developer.aliyun.com/article/1566147
以下表描述了允许的标志字符。未识别的标志字符会被静默忽略。
标志 | 描述 |
d |
启用当前状态下 DBUG_* XXX* 宏的输出。可以跟随一个关键字列表,仅为具有该关键字的 DBUG 宏启用输出。空关键字列表为所有宏启用输出。在 MySQL 中,常见的调试宏关键字包括 enter 、exit 、error 、warning 、info 和 loop 。 |
D |
每个调试器输出行后延迟。参数是延迟时间,以秒为单位,取决于机器能力。例如,D,20 指定了两秒的延迟。 |
f |
将调试、跟踪和性能分析限制为命名函数列表。空列表启用所有函数。仍然必须给出适当的d 或t 标志;此标志仅限制它们的操作(如果它们已启用)。 |
F |
为每行调试或跟踪输出标识源文件名。 |
i |
为每行调试或跟踪输出标识具有 PID 或线程 ID 的进程。 |
L |
为每行调试或跟踪输出标识源文件行号。 |
n |
为每行调试或跟踪输出打印当前函数嵌套深度。 |
N |
为每行调试输出编号。 |
o |
重定向调试器输出流到指定文件。默认输出为stderr 。 |
O |
类似于o ,但文件在每次写入之间真正刷新。在需要时,文件在每次写入之间关闭并重新打开。 |
a |
类似于o ,但用于追加打开。 |
A |
类似于O ,但用于追加打开。 |
p |
将调试器操作限制为指定的进程。必须使用DBUG_PROCESS 宏标识进程,并且匹配列表中的一个进程才会发生调试器操作。 |
P |
为每行调试或跟踪输出打印当前进程名称。 |
r |
推送新状态时,不继承先前状态的函数嵌套级别。当输出从左边距开始时很有用。 |
t |
启用函数调用/退出跟踪行。可以跟随一个列表(仅包含一个修饰符),给出一个数字最大跟踪级别,超过该级别,不会发生任何输出,无论是调试还是跟踪宏。默认是编译时选项。 |
T |
为每行输出打印当前时间戳。 |
标志 | 描述 |
前导的+
或-
字符和修饰符列表用于像d
或f
这样的标志字符,可以为所有适用的修饰符启用调试操作或仅为其中一些启用:
- 没有前导的
+
或-
,标志值将准确设置为给定的修饰符列表。 - 以前导的
+
或-
,列表中的修饰符将被添加到或从当前修饰符列表中减去。
以下示例展示了d
标志的工作原理。空的d
列表启用了所有调试宏的输出。非空列表仅启用列表中的宏关键字的输出。
这些语句将d
值设置为给定的修饰符列表:
mysql> SET debug = 'd'; mysql> SELECT @@debug; +---------+ | @@debug | +---------+ | d | +---------+ mysql> SET debug = 'd,error,warning'; mysql> SELECT @@debug; +-----------------+ | @@debug | +-----------------+ | d,error,warning | +-----------------+
前导的+
或-
会增加或减去当前d
值:
mysql> SET debug = '+d,loop'; mysql> SELECT @@debug; +----------------------+ | @@debug | +----------------------+ | d,error,warning,loop | +----------------------+ mysql> SET debug = '-d,error,loop'; mysql> SELECT @@debug; +-----------+ | @@debug | +-----------+ | d,warning | +-----------+
添加到“启用所有宏”会导致没有变化:
mysql> SET debug = 'd'; mysql> SELECT @@debug; +---------+ | @@debug | +---------+ | d | +---------+ mysql> SET debug = '+d,loop'; mysql> SELECT @@debug; +---------+ | @@debug | +---------+ | d | +---------+
禁用所有已启用的宏会完全禁用d
标志:
mysql> SET debug = 'd,error,loop'; mysql> SELECT @@debug; +--------------+ | @@debug | +--------------+ | d,error,loop | +--------------+ mysql> SET debug = '-d,error,loop'; mysql> SELECT @@debug; +---------+ | @@debug | +---------+ | | +---------+
第八章 安全
目录
8.1 一般安全问题
8.1.1 安全指南
8.1.2 保持密码安全
8.1.3 使 MySQL 免受攻击者攻击
8.1.4 与安全相关的 mysqld 选项和变量
8.1.5 如何以普通用户身份运行 MySQL
8.1.6 LOAD DATA LOCAL 的安全注意事项
8.1.7 客户端编程安全指南
8.2 访问控制和帐户管理
8.2.1 帐户用户名和密码
8.2.2 MySQL 提供的权限
8.2.3 授权表
8.2.4 指定帐户名称
8.2.5 指定角色名称
8.2.6 访问控制,第一阶段:连接验证
8.2.7 访问控制,第二阶段:请求验证
8.2.8 添加帐户,分配权限和删除帐户
8.2.9 保留帐户
8.2.10 使用角色
8.2.11 帐户类别
8.2.12 使用部分撤销进行权限限制
8.2.13 权限更改何时生效
8.2.14 分配帐户密码
8.2.15 密码管理
8.2.16 服务器处理过期密码
8.2.17 可插拔认证
8.2.18 多因素认证
8.2.19 代理用户
8.2.20 帐户锁定
8.2.21 设置帐户资源限制
8.2.22 解决连接到 MySQL 的问题
8.2.23 基于 SQL 的帐户活动审计
8.3 使用加密连接
8.3.1 配置 MySQL 使用加密连接
8.3.2 加密连接 TLS 协议和密码
8.3.3 创建 SSL 和 RSA 证书和密钥
8.3.4 通过 SSH 从 Windows 远程连接到 MySQL
8.3.5 重用 SSL 会话
8.4 安全组件和插件
8.4.1 认证插件
8.4.2 连接控制插件
8.4.3 密码验证组件
8.4.4 MySQL 密钥环
8.4.5 MySQL 企业审计
8.4.6 审计消息组件
8.4.7 MySQL 企业防火墙
8.5 MySQL 企业数据脱敏和去标识化
8.5.1 数据脱敏组件与数据脱敏插件
8.5.2 MySQL 企业数据脱敏和去标识化组件
8.5.3 MySQL 企业数据脱敏和去标识化插件
8.6 MySQL 企业加密
8.6.1 MySQL 企业加密安装和升级
8.6.2 配置 MySQL 企业加密
8.6.3 MySQL 企业加密用法和示例
8.6.4 MySQL 企业加密函数参考
8.6.5 MySQL 企业加密组件功能描述
8.6.6 MySQL 企业加密传统功能描述
8.7 SELinux
8.7.1 检查 SELinux 是否已启用
8.7.2 更改 SELinux 模式
8.7.3 MySQL 服务器 SELinux 策略
8.7.4 SELinux 文件上下文
8.7.5 SELinux TCP 端口上下文
8.7.6 SELinux 故障排除
8.8 FIPS 支持
在考虑 MySQL 安装中的安全性时,您应该考虑一系列可能的主题以及它们如何影响您的 MySQL 服务器和相关应用程序的安全性:
- 影响安全性的一般因素。这些包括选择强密码,不向用户授予不必要的特权,通过防止 SQL 注入和数据损坏来确保应用程序安全,等等。请参阅第 8.1 节,“一般安全问题”。
- 安装本身的安全性。您的安装的数据文件、日志文件和所有应用程序文件应受保护,以确保未经授权的方可读取或写入。更多信息,请参阅第 2.9 节,“安装后设置和测试”。
- 数据库系统本身的访问控制和安全性,包括授予对数据库、视图和存储过程的访问权限的用户和数据库,在数据库中使用的视图和存储过程。更多信息,请参阅第 8.2 节,“访问控制和账户管理”。
- 安全相关插件提供的功能。请参阅第 8.4 节,“安全组件和插件”。
- MySQL 和您系统的网络安全。安全性与为个别用户授予权限有关,但您可能还希望限制 MySQL 仅在 MySQL 服务器主机上本地可用,或者仅在有限的其他主机上可用。
- 确保您对数据库文件、配置文件和日志文件进行了充分和适当的备份。同时确保您有一个恢复解决方案,并测试您能够成功从备份中恢复信息。参见第九章,备份和恢复。
注意
本章中的几个主题也在安全部署指南中有所涉及,该指南提供了部署 MySQL 企业版服务器通用二进制分发版的程序,具有管理 MySQL 安装安全性功能的特点。
8.1 一般安全问题
原文:
dev.mysql.com/doc/refman/8.0/en/general-security-issues.html
8.1.1 安全指南
8.1.2 保护密码安全
8.1.3 使 MySQL 免受攻击的安全措施
8.1.4 与安全相关的 mysqld 选项和变量
8.1.5 如何以普通用户身份运行 MySQL
8.1.6 LOAD DATA LOCAL 的安全注意事项
8.1.7 客户端编程安全指南
本节描述了需要注意的一般安全问题,以及您可以采取哪些措施使您的 MySQL 安装更加安全,以防止遭受攻击或滥用。有关 MySQL 用于设置用户帐户和检查数据库访问权限的访问控制系统的具体信息,请参见第 2.9 节,“安装后设置和测试”。
有关 MySQL 服务器安全问题经常被问到的一些问题的答案,请参见第 A.9 节,“MySQL 8.0 FAQ:安全”。
8.1.1 安全指南
任何在连接到互联网的计算机上使用 MySQL 的人都应该阅读本节,以避免最常见的安全错误。
在讨论安全性时,有必要全面保护整个服务器主机(不仅仅是 MySQL 服务器)免受所有类型的适用攻击:窃听、篡改、回放和拒绝服务。我们在这里不涵盖可用性和容错性的所有方面。
MySQL 基于访问控制列表(ACL)的安全性用于所有用户可能尝试执行的连接、查询和其他操作。还支持 MySQL 客户端和服务器之间的 SSL 加密连接。这里讨论的许多概念并不特定于 MySQL;相同的一般思想适用于几乎所有应用程序。
运行 MySQL 时,请遵循以下准则:
- 绝对不要让任何人(除了 MySQL
root
帐户)访问mysql
系统数据库中的user
表! 这是至关重要的。 - 了解 MySQL 访问权限系统的工作原理(参见 Section 8.2, “Access Control and Account Management”)。使用
GRANT
和REVOKE
语句控制对 MySQL 的访问。不要授予比必要更多的权限。永远不要向所有主机授予权限。检查清单:
- 尝试
mysql -u root
。如果您能够成功连接到服务器而不需要输入密码,任何人都可以以 MySQLroot
用户的身份连接到您的 MySQL 服务器并具有完全权限!查看 MySQL 安装说明,特别注意有关设置root
密码的信息。参见 Section 2.9.4, “Securing the Initial MySQL Account”。 - 使用
SHOW GRANTS
语句检查哪些帐户具有访问权限。然后使用REVOKE
语句删除那些不必要的权限。
- 不要在数据库中存储明文密码。如果您的计算机受到入侵,入侵者可以获取完整的密码列表并使用它们。相反,使用
SHA2()
或其他单向哈希函数并存储哈希值。
为了防止使用彩虹表进行密码恢复,不要在明文密码上使用这些函数;相反,选择一些字符串作为盐,并使用哈希(hash(password)+salt)值。 - 假设所有密码都将受到使用已知密码列表进行自动破解尝试以及使用关于您的公开信息进行有针对性猜测的影响。不要选择由容易破解或猜测的项目组成的密码,如字典词、专有名词、体育队名、首字母缩写或众所周知的短语,特别是如果它们与您相关。如果这些以可预测方式使用,则大写字母、数字替换和添加以及特殊字符也无济于事。也不要选择您在任何地方看到过的密码或其变体,即使它被作为强密码的示例呈现。
相反,选择尽可能长且不可预测的密码。这并不意味着组合需要是难以记住和重现的随机字符串,尽管如果您有例如可以生成和填充这样的密码并安全存储它们的密码管理软件,这是一个很好的方法。包含多个单词的短语易于创建、记住和重现,并且比典型用户选择的由单个修改过的单词或可预测字符序列组成的密码安全得多。要创建一个安全的短语密码,请确保其中的单词和其他项目不是已知短语或引语,不按可预测顺序出现,并且最好彼此之间没有任何先前关系。 - 投资于防火墙。这可以保护您免受任何软件中至少 50%的各种利用。将 MySQL 放在防火墙后面或者在一个非军事区(DMZ)中。检查清单:
- 尝试使用诸如
nmap
之类的工具从互联网扫描您的端口。MySQL 默认使用端口 3306。这个端口不应该从不受信任的主机访问。作为检查您的 MySQL 端口是否开放的简单方法,尝试在某个远程机器上运行以下命令,其中*server_host
*是您的 MySQL 服务器运行的主机的主机名或 IP 地址:
$> telnet *server_host* 3306
- 如果telnet挂起或连接被拒绝,则端口被阻止,这正是您希望的。如果您获得一个连接和一些垃圾字符,则端口是开放的,并且应该在您的防火墙或路由器上关闭,除非您真的有充分理由保持其开放。
- 访问 MySQL 的应用程序不应信任用户输入的任何数据,并且应使用适当的防御性编程技术编写。参见第 8.1.7 节,“客户端编程安全指南”。
- 不要在互联网上传输明文(未加密)数据。这些信息对于所有有时间和能力拦截并将其用于自己目的的人都是可访问的。相反,使用诸如 SSL 或 SSH 之类的加密协议。MySQL 支持内部 SSL 连接。另一种技术是使用 SSH 端口转发来创建一个加密(和压缩)通信隧道。
- 学会使用tcpdump和strings工具。在大多数情况下,您可以通过发出类似以下命令的命令来检查 MySQL 数据流是否未加密:
$> tcpdump -l -i eth0 -w - src or dst port 3306 | strings
- 这在 Linux 下运行,并且应该在其他系统下进行小的修改后也能运行。
警告
如果您看不到明文数据,这并不总是意味着信息实际上是加密的。如果您需要高安全性,请咨询安全专家。
8.1.2 保持密码安全
8.1.2.1 最终用户密码安全指南
8.1.2.2 管理员密码安全指南
8.1.2.3 密码和日志记录
MySQL 中存在多种上下文中的密码。以下部分提供指南,使最终用户和管理员能够保持这些密码安全,并避免暴露它们。此外,validate_password
插件可用于强制执行有关可接受密码的策略。请参阅 Section 8.4.3, “密码验证组件”。
原文:
dev.mysql.com/doc/refman/8.0/en/password-security-user.html
MySQL8 中文参考(二十三)(5)https://developer.aliyun.com/article/1566149