https://www.jianshu.com/p/79caa1cc49a5
https://blog.csdn.net/somehow1002/article/details/79394580
1.创建user administrator
> use admin
> db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
2. 重启mongo
停止: mongod -shutdown -dbpath=/data/mongod/data
启动: mongod --dbpath=/data/mongod/data --logpath=/data/mongod/log/mongodb.log --logappend --port=27017 --fork --auth
增加--auth 参数
3. 登录
现在有两种方式进行用户身份的验证
第一种 (类似 MySql)
客户端连接时,指定用户名,密码,db名称
mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"
第二种
客户端连接后,再进行验证
mongo --port 27017
use admin
db.auth("adminUser", "adminPass")
4.创建普通用户
过程类似创建管理员账户,只是 role 有所不同
use foo
db.createUser(
{
user: "simpleUser",
pwd: "simplePass",
roles: [ { role: "readWrite", db: "foo" },
{ role: "read", db: "bar" } ]
}
)
5 URI 形式的访问
生产中常用 URI 形式对数据库进行连接
mongodb://your.db.ip.address:27017/foo
添加用户名密码验证
mongodb://simpleUser:[email protected]:27017/foo
6 内建角色
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
关于roles
官方文档:https://docs.mongodb.com/manual/reference/built-in-roles/
常用的有:
-
数据库普通用户角色
- read
- readWrite
-
数据库管理者角色
- dbAdmin
- dbOwner:
- userAdmin
-
集群管理角色
- clusterAdmin
- clusterManager
- clusterMonitor
- hostManager
-
备份与还原角色
- backup
- restore
-
所有数据库角色(对所有数据库有效)
- readAnyDatabase
- readWriteAnyDatabase
- userAdminAnyDatabase
- dbAdminAnyDatabase
-
超级角色
- root
-
内部角色
- __system