1.认识MongDB权限
MongoDB安装完成后,默认是没有权限验证的,默认是不需要输入用户名密码即可登录的,但是往往数据库方面我们会出于安全性的考虑而设置用户名密码。
在MongDB中内置了一些用户角色roles,可以用一个空数组给新用户设定空角色;在roles字段,可以指定内置角色和用户定义的角色。role里的角色可以选:
角色 | 说明 |
---|---|
Read | 允许用户读取指定数据库 |
readWrite | 允许用户读写指定数据库 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
userAdmin | 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 |
clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 |
readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 |
readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 |
root | 只在admin数据库中可用。超级账号,超级权限。 |
mongodb是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。添加账号需要使用use admin
切换到admin数据库,在admin数据库添加的账号才是管理员账号。
在MongDB中,用户只能在用户所在数据库登录,包括管理员账号
。mongo的用户是以数据库为单位来建立的,每个数据库有自己的管理员
。管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。
注:帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证
2.创建账号
2.1.创建管理用户
查看数据库
> show dbs
切换admin数据库
> use admin
查看用户
> show users
创建用户 , 文档 https://docs.mongodb.com/manual/tutorial/configure-scram-client-authentication/
> db.createUser( { user: "adminuser", pwd: "123456", roles: [ { role: "userAdminAnyDatabase", db: "admin"}]}) #创建用户
> show users #查看用户
- user : 用户名
- pwd : 密码
- roles : 角色
db : 数据库
开启认证,修改配置文件
bin/mongod.cfg
,增加如下内容
security:
authorization: enabled
修改之后,重启mongdb服务 ,重新连接mongdb
> D:\Program Files\MongoDB\Server\4.4\bin> mongo.exe
登录mongdb
> show admin
> db.auth("adminuser","123456")
2.2.创建普通账号
创建普通数据库, 先切到admin数据库,然后db.auth("用户","密码") 登录
> use admin #切到amdin数据库
> db.auth("adminuser","123456") #登录
通过 use 创建数据库 test,如果已经有该数据就会进行切换。如果数据库没有数据执行 show dbs 数据库不会被显示
> use test
在 test 数据库中 ,创建用户 ,可以通过 db 命令查看当前是哪个数据库
> db.createUser( { user: "testuser", pwd: "123456", roles: [ { role : "userAdmin", db : "test" },{ role: "dbAdmin", db: "test"},{ role : "readWrite", db : "test" }]})
> show users
登录test数据库
> use test #切到test数据库
> db.auth("testuser","123456") #登录
3.修改用户
3.1.修改用户权限
先进入数据库,然后使用db.updateuser修改 , 比如下面就给testuser用户新增了角色
> use admin
> db.updateUser( "testuser",{ roles : [ { role : "dbAdmin", db : "test" },{ role : "readWrite", db : "admin" } ]} )
最终的权限以修改的权限为主。
3.2.修改用户密码
下面案例是更新密码
> use admin
> db.updateUser("adminuser",{"pwd":"adminuser"})
或者使用下面命令
> db.changeUserPassword("adminuser","adminuser")
4.删除用户
删除用户需要切换到对应的数据库,然后使用db.dropUser进行删除,需要具备:userAdmin ,userAdminAnyDatabase或者root权限才可以删除用户。
> use admin
> db.auth("adminuser","adminuser")
> use test
> db.dropUser("testuser");