|
一 必须了解的
1 mongodb本身启动是无认证的,是不安全的。
2 mongodb的版本是3.X,3.X以前的版本授权方式不一样,请注意
3 monogdb的admin库默认是为空的
二 如何创建用户认证
1 mongodb启动参数添加auth
2 函数介绍
1 函数 createUser
语法 · user文档,定义了用户的以下形式:
{ user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
]
}
2 user文档字段介绍:
user字段,为新用户的名字;
pwd字段,用户的密码;
cusomData字段,为任意内容,例如可以为用户全名介绍;
roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色;
在roles字段,可以指定内置角色和用户定义的角色。
3 Built-In Roles(内置角色):
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
3 创建超级用户 库(admin) 通过这个角色来创建、删除用户
db.createUser(
... {
... user: "dba",
... pwd: "dba",
... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
4 创建普通具有读写权限的用户
db.createUser(
{
user: "dxy",
pwd: "dxy",
roles: [
{ role: "readWrite", db: "testdb" },
{ role: "readWrite", db: "abcdb" }
]
}
)
由此可见,可以添加对于多个库的权限,很方便
三 常用命令
admin下进行
show users;//查看当前库所有用户
db.auth("user","password");//指定账号密码登录
db.system.users.find();//查看实例的所有用户
db.system.users.remove({user:"java1"});//删除用户
db.changeUserPassword("username", "xxx");//更改密码
db.dropAllUsers();//删除所有用户
db.dropUser('username');//删除单一用户
db.getUser('username');//查看某一用户
db.removeUser('username');//删除某一用户
四 建议
1对于线上mongo最好还是要指定用户连接,防止研发误操作其他库。
2创建一个超级用户由DBA自行管理。 |
|