当执行命令db.serverStatus()
时,可能会出现“unauthorized”错误,提示当前用户没有足够的权限执行该命令。下面是解决该问题的完整攻略:
步骤一:确认当前用户角色权限
首先需要确认当前用户拥有的权限是否具备执行serverStatus
命令所需的权限。可以执行以下命令查看当前用户的角色和权限:
db.runCommand({usersInfo: {user: '当前用户名', db: 'admin'}})
执行该命令后,会返回一个结果,其中包含了用户的角色和角色具备的权限。需要确认该用户是否具备执行serverStatus
命令所需的权限,如果没有,则需要为该用户添加相应的角色。
步骤二:为用户添加相应的角色权限
如果当前用户没有足够的权限执行serverStatus
,就需要为该用户添加相应的角色权限。可以执行以下命令为用户添加clusterMonitor
角色:
db.grantRolesToUser('当前用户名', [{role: 'clusterMonitor', db: 'admin'}])
执行该命令后,当前用户就拥有了执行serverStatus
命令所需的clusterMonitor
角色权限。
需要注意的是,clusterMonitor
角色是MongoDB内置的一个角色,拥有的权限包括:
- 运行
serverStatus
命令 - 运行
replSetGetStatus
和replSetGetConfig
命令 - 访问
system.replset
和local.oplog.rs
集合
示例一:确认当前用户拥有的角色和权限
假设当前用户为admin
,可以执行以下命令确认该用户的角色和权限:
db.runCommand({usersInfo: {user: 'admin', db: 'admin'}})
执行命令后,可以查看到该用户的角色为"role":"root"
,该角色拥有数据库的最高权限,可以操作任意数据库和集合。但是该角色不具备执行serverStatus
命令所需的权限。
示例二:为用户添加clusterMonitor
角色权限
可以执行以下命令为该用户添加clusterMonitor
角色权限:
db.grantRolesToUser('admin', [{role: 'clusterMonitor', db: 'admin'}])
执行命令后,再执行db.serverStatus()
命令就不会出现“unauthorized”错误了,该用户已经具备了执行serverStatus
命令所需的权限。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:db.serverStatus()命名执行时报无权限问题的解决方法 - Python技术站