我正在尝试删除local
副本集中的数据库,以便可以重命名副本集,但我不断收到以下错误
errmsg" : "not authorized on local to execute command { dropDatabase: 1.0, lsid: { id: UUID(\"4a92bd75-2e25-4fab-abd7-2d72f65050c7\") }, $db: \"local\" }"
我正在使用具有权限的用户root
,并且正在使用 MongoDB 4.0。有人知道为什么会发生这种情况吗?
答案1
这些建议在 Mongo 5.0.8 中对我不起作用,将授权设置为未启用不允许我删除本地数据库,向我的用户添加 root 角色不允许我删除数据库,但这是解决方案
use admin;
db.grantRolesToUser("adminUser", ["__system"]);
use local
db.dropDatabase()
use admin;
db.revokeRolesFromUser("adminUser", ["__system"]);
然后运行看起来像这样
local> use admin;
switched to db admin
admin> db.grantRolesToUser("adminUser", ["__system"]);
{ ok: 1 }
admin> use local
switched to db local
local> db.dropDatabase()
{ ok: 1, dropped: 'local' }
local> use admin;
switched to db admin
admin> db.revokeRolesFromUser("adminUser", ["__system"]);
{ ok: 1 }
答案2
从Mongo 文档,尽管您的用户具有root
角色,但您无法与数据库交互local
。config
您需要dbAdmin
在数据库中创建一个具有角色的新用户local
。此更改是从 Mongo 3.4 开始实施的
另一种方法是禁用安全部分的授权/etc/mongod.conf
security:
authorization: disabled
local
这样,匿名用户可以对任何数据库执行任何操作。除非您是唯一有权访问 Mongo 节点的人,否则不推荐使用这种方法。删除数据库后,请务必重新激活它。