14.21.4 InnoDB 内存缓存插件的安全注意事项
Caution
如果将daemon_memcached
插件部署到生产服务器或 MySQL 服务器上包含敏感数据的测试服务器上,请查阅本节。
由于 memcached 默认情况下不使用身份验证机制,并且可选的 SASL 身份验证不如传统的 DBMS 安全措施那么强,因此只能将非敏感数据保留在使用daemon_memcached
插件的 MySQL 实例中,并关闭所有来自潜在入侵者的使用此配置的服务器。不允许 memcached 从 Internet 访问这些服务器;仅允许从受防火墙保护的 Intranet 内部访问,最好是允许您限制其成员资格的子网的访问。
使用 SASL 保护密码的内存缓存
SASL 支持提供了保护您的 MySQL 数据库免受通过 memcached Client 端未经身份验证的访问的功能。本节说明如何使用daemon_memcached
插件启用 SASL。这些步骤几乎与为传统 memcached 服务器启用 SASL 所执行的步骤相同。
SASL 代 table“简单身份验证和安全层”,该标准用于向基于连接的协议添加身份验证支持。 memcached 在 1.4.3 版中添加了 SASL 支持。
仅二进制协议支持 SASL 身份验证。
memcached Client 端只能访问在innodb_memcache.containers
table 中注册的InnoDB
table。即使 DBA 可以在此类 table 上设置访问限制,也无法控制通过 memcached 应用程序的访问。因此,提供了 SASL 支持来控制对与daemon_memcached
插件关联的InnoDB
table 的访问。
以下部分显示了如何构建,启用和测试启用了 SASL 的daemon_memcached
插件。
使用 InnoDB memcached 插件构建和启用 SASL
默认情况下,MySQL 发行包中不包括启用 SASL 的daemon_memcached
插件,因为启用 SASL 的daemon_memcached
插件需要使用 SASL 库构建 memcached 。要启用 SASL 支持,请在下载 SASL 库后下载 MySQL 源并重建daemon_memcached
插件:
- 安装 SASL 开发和 Util 库。例如,在 Ubuntu 上,使用 apt-get 获取库:
sudo apt-get -f install libsasl2-2 sasl2-bin libsasl2-2 libsasl2-dev libsasl2-modules
- 通过将
ENABLE_MEMCACHED_SASL=1
添加到您的 cmake 选项中,构建具有 SASL 功能的daemon_memcached
插件共享库。 memcached 还提供简单的明文密码支持,从而简化了测试。要启用简单的明文密码支持,请指定ENABLE_MEMCACHED_SASL_PWDB=1
cmake 选项。
总之,添加以下三个 cmake 选项:
cmake ... -DWITH_INNODB_MEMCACHED=1 -DENABLE_MEMCACHED_SASL=1 -DENABLE_MEMCACHED_SASL_PWDB=1
-
按照第 14.21.3 节“设置 InnoDB memcached 插件”所述安装
daemon_memcached
插件。 -
配置用户名和密码文件。 (此示例使用 memcached 简单明文密码支持.)
-
在文件中,创建一个名为
testname
的用户,并将密码定义为testpasswd
:
echo "testname:testpasswd:::::::" >/home/jy/memcached-sasl-db
- 配置
MEMCACHED_SASL_PWDB
环境变量以通知memcached
用户名和密码文件:
export MEMCACHED_SASL_PWDB=/home/jy/memcached-sasl-db
- 通知
memcached
使用了明文密码:
echo "mech_list: plain" > /home/jy/work2/msasl/clients/memcached.conf
export SASL_CONF_PATH=/home/jy/work2/msasl/clients
- 通过使用daemon_memcached_option配置参数中编码的 memcached
-S
选项重新启动 MySQL 服务器来启用 SASL:
mysqld ... --daemon_memcached_option="-S"
- 要测试设置,请使用启用了 SASL 的 Client 端,例如SASL-enabled libmemcached。
memcp --servers=localhost:11211 --binary --username=testname
--password=password myfile.txt
memcat --servers=localhost:11211 --binary --username=testname
--password=password myfile.txt
如果您指定了错误的用户名或密码,该操作将被一条memcache error AUTHENTICATION FAILURE
消息拒绝。在这种情况下,请检查memcached-sasl-db
文件中设置的明文密码,以验证您提供的凭据是否正确。
还有其他方法可以通过 memcached 测试 SASL 身份验证,但是上述方法是最简单的方法。