我可以为mongoDB用户设置TTL吗?
只是想知道是否可以在MongoDB 3.4+中的system.users数据中设置TTL。 我们需要实现一个例程,在定义的日期之后删除用户,但是TTL的想法听起来更好我可以为mongoDB用户设置TTL吗?,mongodb,Mongodb,只是想知道是否可以在MongoDB 3.4+中的system.users数据中设置TTL。 我们需要实现一个例程,在定义的日期之后删除用户,但是TTL的想法听起来更好 目前我还没有任何环境来测试它。所以我在MongoDB 4.0上尝试了这个,它成功了!小心!您不想删除根用户。为了保护自己,我在一个不存在的字段上创建了一个TTL索引。然后我添加了我的用户,然后通过设置这个额外字段更新了我的用户。这样,我的根用户就没有这个字段,而且永远不会被TTL索引自动删除 以root用户身份登录: 创建索引:
目前我还没有任何环境来测试它。所以我在MongoDB 4.0上尝试了这个,它成功了!小心!您不想删除根用户。为了保护自己,我在一个不存在的字段上创建了一个TTL索引。然后我添加了我的用户,然后通过设置这个额外字段更新了我的用户。这样,我的根用户就没有这个字段,而且永远不会被TTL索引自动删除 以root用户身份登录: 创建索引: 创建新用户: 更新用户的TTL字段: 作为新用户进行身份验证: 运行管理命令: 如果您最终重复此命令,您将收到一个错误:
> db.serverStatus()
{
"ok" : 0,
"errmsg" : "command serverStatus requires authentication",
"code" : 13,
"codeName" : "Unauthorized"
}
注:
<>您可能想考虑在后台创建索引以避免锁定。另外,值得一提的是,我的示例显示了10秒的过期时间,但我相信处理TTL过期的线程每60秒运行一次,因此可能会有延迟。听起来不错,感谢@barrypicker测试它!在我的场景中,用户将获得大约六个月的到期日。很高兴知道它是有效的!
db.system.users.createIndex({ "expirationCreateDate": 1}, { expireAfterSeconds: 10 })
db.createUser({user: "johndoe", pwd: "mysecret", roles: [{role: "root", db: "admin"}]})
db.system.users.update({_id: "admin.johndoe"}, {$set: {expirationCreateDate: new Date()}})
db.auth("johndoe", "mysecret")
db.serverStatus()
> db.serverStatus()
{
"ok" : 0,
"errmsg" : "command serverStatus requires authentication",
"code" : 13,
"codeName" : "Unauthorized"
}