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

时间:2019-10-24 14:23:28

标签: mongodb

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

此刻我没有任何环境可以对其进行测试。

1 个答案:

答案 0 :(得分:1)

因此,我在MongoDB 4.0上尝试了此方法,并成功了!小心!您不想删除您的root用户。为了保护自己,我在一个不存在的字段上创建了一个TTL索引。然后,我添加了我的用户,然后通过设置此额外字段来更新我的用户。这样,我的root用户将没有此字段,并且永远不会被TTL索引自动删除。

以root用户身份登录:

use admin
db.auth("rootuser", "mypassword")

创建索引:

db.system.users.createIndex({ "expirationCreateDate": 1}, { expireAfterSeconds: 10 })

创建新用户:

db.createUser({user: "johndoe", pwd: "mysecret", roles: [{role: "root", db: "admin"}]})

更新用户的TTL字段:

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"
}

注释:

您可能要考虑在后台创建索引以避免锁定。另外,值得注意的是,我的示例显示了10秒的过期时间,但是我认为处理TTL过期的线程每60秒运行一次,因此可能会有延迟。