只是想知道是否有可能在MongoDB 3.4+中的system.users数据中设置TTL。 我们需要实现一个例程,该例程可以在定义的日期之后删除用户,但是TTL提示听起来更好。
此刻我没有任何环境可以对其进行测试。
答案 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秒运行一次,因此可能会有延迟。