Mongo Sharding - 配置服务器和 Mongo 身份验证

Mongo Sharding - 配置服务器和 Mongo 身份验证

我很快就需要对数据库进行分片,但不清楚在mongosconfig服务器上启用身份验证的最佳做法是什么。

我希望一切都用密码保护。

  1. 每个配置服务器是否都应auth启用?
  2. 如果是,那么在每个数据库中都设置相同的用户吗?只针对管理数据库?还是需要为配置数据库创建一个?
  3. 我猜你不需要在 mongos 上创建任何用户,因为它应该从配置和分片本身继承,这是正确的吗?
  4. 添加新分片时,是否需要为新分片上的每个分片数据库设置相同的用户?

谢谢!

答案1

我将逐一讨论这些问题:

每个配置服务器是否都应启用身份验证?

是的,基本上你运行的每个 mongod 实例都应该启用 auth(和密钥文件,这意味着授权)。

如果是,那么在每个数据库中都设置相同的用户吗?只针对管理数据库?还是需要为配置数据库创建一个?

分片环境中的管理数据库实际上将存在于配置服务器上。因此,您将在所有三个服务器上拥有管理数据库的副本(它们彼此相同)。您应该始终通过连接到配置数据库,mongos并且您不会在那里创建其他数据库,因此无需添加特定用户。

我猜你不需要在 mongos 上创建任何用户,因为它应该从配置和分片本身继承,这是正确的吗?

如果您添加的第一个分片有现有数据库,则它将是这些数据库的主分片(永远)。该主分片将包含这些数据库的身份验证记录,即使您随后将集合分片到多个分片中。分片后创建的任何后续数据库可能位于另一个分片上,并且它们的凭据将存储在那里。基本经验法则是:mongos在分片环境中管理您的用户。

笔记:以上内容在 MongoDB 2.4 及以下版本中适用。2.6 中的计划更改将把所有凭据集中到分片环境中的配置数据库中,并消除一些复杂性。但是,经验法则仍然适用,使用mongos

添加新分片时,是否需要为新分片上的每个分片数据库设置相同的用户?

正如上一个问题的答案所暗示的,这没有必要只要你总是通过mongos(推荐 - 它知道每个数据库的主分片是什么,并将适当地路由您的身份验证请求)。在某些极端情况下,您可能需要在所有分片上拥有用户,在这种情况下,您必须在每个分片上添加(和维护)它们,但对于一般用途来说,这不是必需的。

答案2

看看这里找到答案。建议您使用 keyFile 以及网络级访问控制(通常是防火墙)来保证服务器的安全。

MongoDB 的最新版本也支持 Kerberos 身份验证。您可以找到信息这里

相关内容