MongoDB权限配置与开启

617 阅读4分钟

MongoDB

MongoDB 查看所有用户账号信息

查看全局所有账户:

use admin
switched to db admin
db.auth('admin','123456')
1
db.system.users.find().pretty()

查看当前库下的账户:

#admin角色
> use admin
switched to db admin
> show users
#test角色
> use test
switched to db test
> show users

创建所有数据库管理用户

Built-In Roles(内置角色):
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root  
    // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system

具体角色的功能: 
1. Read:允许用户读取指定数据库
2. readWrite:允许用户读写指定数据库
3. dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
4. userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
5. clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
6. readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
7. readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
8. userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
9. dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
10. root:只在admin数据库中可用。超级账号,超级权限


user字段,为新用户的名字;

pwd字段,用户的密码;

cusomData字段,为任意内容,例如可以为用户全名介绍;

roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色。在roles字段,可以指定内置角色和用户定义的角色。

超级用户的role有两种,userAdmin或者userAdminAnyDatabase(比前一种多加了对所有数据库的访问,仅仅是访问而已)。

db是指定数据库的名字,admin是管理数据库。

不能用admin数据库中的用户登录其他数据库。注:只能查看当前数据库中的用户,哪怕当前数据库admin数据库,也只能查看admin数据库中创建的用户。
#(只负责某一个或几个数据库的増查改删)
> db.createUser({
    user:"xiaozhi",
    pwd:"123456",
    customData:{
        name:'jim',
        email:'jim@qq.com',
        age:18,
    },
    roles:[
        {role:"readWrite",db:"db001"},
        {role:"readWrite",db:"db002"},
        'read'// 对其他数据库有只读权限,对db001、db002是读写权限
    ]
})

查看创建的用户

show users 或 db.system.users.find() 或 db.runCommand({usersInfo:"userName"})

删除用户

1.首先,在命令行中启动mongodb服务;

net start MongoDB

2.mongodb服务启动后,在命令行中登录mongodb数据库;

mongo --host 127.0.0.1

3.登录到mongodb数据库后,在mongodb中选择使用一个数据库;

use text;

4.进入到数据库后,在数据库中执行命令查看所有用户;

show users

5.最后,查看到该数据库中所有的用户后,执行以下命令即可删除指定的用户;

1)删除指定用户名的用户

db.system.users.remove({user:"用户名"})

2)删除指定id的用户

db.system.users.remove({_id:"用户id"})

3)删除指定用户名的用户

db.dropUser("admin")

4)删除当前库所有的用户

db.dropAllUser()             删除当前库的所有用户

修改密码

use admin
db.changeUserPassword("xiaozhi", "xxx")

修改密码和用户信息

db.runCommand(
    {
        updateUser:"username",
        pwd:"xxx",
        customData:{title:"xxx"}
    }
)

重要的一步

启用权限验证(别TM的武装了大半天,大门还一直开着,还抱怨我方防御塔怎么一直被摧毁)
mongo --auth

或者修改mongo.conf,最后一行添加

#启用权限访问
auth=true

重新启动mongodb

#以管理员身份运行
net stop mongodb;
net start mongodb;
1. 和用户管理相关的操作基本都要在admin数据库下运行,要先use admin;
2. 如果在某个单一的数据库下,那只能对当前数据库的权限进行操作;
3. db.addUser是老版本的操作,现在版本也还能继续使用,创建出来的user是带有root role的超级管理员。

将MongoDB服务器作为Windows服务运行

mongod --dbpath "D:\Program Files\MongoDB\Server\5.0\data\db" --logpath "D:\Program Files\MongoDB\Server\5.0\log\mongod.log" --serviceName "mongodb" --serviceDisplayName "mongodb" --install

清除服务

sc delete mongodb

image.png

image.png