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.containerstable 中注册的InnoDBtable。即使 DBA 可以在此类 table 上设置访问限制,也无法控制通过 memcached 应用程序的访问。因此,提供了 SASL 支持来控制对与daemon_memcached插件关联的InnoDBtable 的访问。

以下部分显示了如何构建,启用和测试启用了 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"
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 身份验证,但是上述方法是最简单的方法。