【MySQL精通之路】安全(1)-安全指南

任何在连接到Internet的计算机上使用MySQL的人都应该阅读本节,以避免最常见的安全错误。

在讨论安全性时,有必要考虑充分保护整个服务器主机(而不仅仅是MySQL服务器)免受所有类型的适用攻击:窃听、更改、播放和拒绝服务。我们在这里没有涵盖可用性和容错的所有方面。

MySQL对用户可以尝试执行的所有连接、查询和其他操作使用基于访问控制列表(ACL)的安全性。

MySQL客户端和服务器之间还支持SSL加密连接

这里讨论的许多概念根本不是MySQL特有的;相同的一般思想适用于几乎所有的应用程序

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

永远不要让任何人(MySQL根帐户除外)访问MySQL系统数据库中的用户表!这一点至关重要。
了解MySQL访问权限系统的工作原理(请参阅"访问控制和帐户管理")。

使用GRANT和REVOKE语句来控制对MySQL的访问。

不要授予超过必要权限的权限。

从不向所有主机授予特权。

清单:

试试mysql-u root。如果您能够在不需要密码的情况下成功连接到服务器,任何人都可以作为MySQL根用户以完全权限连接到您的MySQL服务器!查看MySQL的安装说明,特别注意有关设置根密码的信息。请参阅"保护初始MySQL帐户"。
使用SHOW GRANTS语句检查哪些帐户可以访问什么。然后使用REVOKE语句删除那些不必要的特权。

不要在数据库中存储明文密码。如果你的电脑遭到破坏,入侵者可以获取完整的密码列表并使用它们。相反,使用SHA2()或其他单向哈希函数并存储哈希值。

为了防止使用彩虹表恢复密码,请不要在普通密码上使用这些功能;相反,选择一些字符串用作salt,并使用hash(hash(password)+salt)值


假设所有密码都将使用已知密码列表进行自动破解,并使用有关您的公开信息(如社交媒体帖子)进行有针对性的猜测。

**不要选择由容易破解或猜测的项目组成的密码,**如字典单词、正确名称、运动队名称、首字母缩写或常见短语,尤其是与您相关的密码。

如果以可预测的方式使用大写字母、数字替换和添加以及特殊字符,则这些都没有帮助。此外,不要选择您在任何地方看到的用作示例的任何密码,或其变体,即使它是作为强密码的示例出现的。

相反,**请选择尽可能长且不可预测的密码。**这并不意味着组合需要是一个难以记忆和复制的随机字符串,尽管这是一个很好的方法,例如,如果你有密码管理软件,可以生成和填充这些密码并安全存储。

**包含多个单词的密码短语易于创建、记忆和复制,并且比由单个修改的单词或可预测的字符序列组成的典型用户选择的密码安全得多。**要创建安全的密码短语,请确保其中的单词和其他项目不是已知的短语或引号,不会以可预测的顺序出现,并且最好彼此之间没有以前的关系。


建立防火墙。这可以保护您免受任何软件中至少50%的所有类型的漏洞攻击。将MySQL放在防火墙后面或非军事区(DMZ)中。

尝试使用nmap等工具从Internet扫描端口。

MySQL默认使用端口3306。不应从不受信任的主机访问此端口。作为检查MySQL端口是否打开的一种简单方法,请在某台远程计算机上尝试以下命令,其中server_host是运行MySQL服务器的主机的主机名或IP地址:

$> telnet server_host 3306

如果telnet挂起或连接被拒绝,端口将被阻止,这就是OK的。

如果你得到一个连接和一些垃圾字符,端口是打开的,应该在防火墙或路由器上关闭,除非你真的有充分的理由保持它打开。


访问MySQL的应用程序不应该信任用户输入的任何数据,并且应该使用适当的防御编程技术来编写。

参见"客户端编程安全指南"。


不要在互联网上传输纯(未加密)数据。

每个有时间和能力拦截这些信息并将其用于自己的目的的人都可以访问这些信息。

相反,请使用加密协议,如SSL或SSH。MySQL支持内部SSL连接。

另一种技术是使用SSH端口转发 来创建用于通信的加密(和压缩)隧道


学习使用tcpdump和字符串实用程序。在大多数情况下,您可以通过发出如下命令来检查MySQL数据流是否未加密:

$> tcpdump -l -i eth0 -w - src or dst port 3306 | strings

这在Linux下可以工作,在其他系统下应该可以进行小的修改。

警告:

如果您没有看到明文数据 ,这并不总是意味着信息实际上是加密的。如果您需要高度安全性,请咨询安全专家。

相关推荐
EasyNVR3 分钟前
NVR管理平台EasyNVR多个NVR同时管理:全方位安防监控视频融合云平台方案
安全·音视频·监控·视频监控
工业甲酰苯胺28 分钟前
Redis性能优化的18招
数据库·redis·性能优化
没书读了1 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
i道i2 小时前
MySQL win安装 和 pymysql使用示例
数据库·mysql
小怪兽ysl2 小时前
【PostgreSQL使用pg_filedump工具解析数据文件以恢复数据】
数据库·postgresql
wqq_9922502772 小时前
springboot基于微信小程序的食堂预约点餐系统
数据库·微信小程序·小程序
爱上口袋的天空3 小时前
09 - Clickhouse的SQL操作
数据库·sql·clickhouse
黑客Ash3 小时前
【D01】网络安全概论
网络·安全·web安全·php
Oak Zhang3 小时前
sharding-jdbc自定义分片算法,表对应关系存储在mysql中,缓存到redis或者本地
redis·mysql·缓存
聂 可 以4 小时前
Windows环境安装MongoDB
数据库·mongodb