我可以为mongoDB用户设置TTL吗?

我可以为mongoDB用户设置TTL吗?,mongodb,Mongodb,只是想知道是否可以在MongoDB 3.4+中的system.users数据中设置TTL。 我们需要实现一个例程,在定义的日期之后删除用户,但是TTL的想法听起来更好 目前我还没有任何环境来测试它。所以我在MongoDB 4.0上尝试了这个,它成功了!小心!您不想删除根用户。为了保护自己,我在一个不存在的字段上创建了一个TTL索引。然后我添加了我的用户,然后通过设置这个额外字段更新了我的用户。这样,我的根用户就没有这个字段,而且永远不会被TTL索引自动删除 以root用户身份登录: 创建索引:

只是想知道是否可以在MongoDB 3.4+中的system.users数据中设置TTL。 我们需要实现一个例程,在定义的日期之后删除用户,但是TTL的想法听起来更好


目前我还没有任何环境来测试它。

所以我在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"
}