mongodb采用基于角色的访问控制(rbac)来确定用户的访问。 授予用户一个或多个角色,确定用户对mongodb资源的访问权限和用户可以执行哪些操作。 用户应该只有最小权限集才能确保最小权限的系统。
mongodb系统的每个应用程序和用户都应该映射到不同的用户。 这种访问隔离便于访问撤销和持续的用户维护。
如果启用了部署的访问控制,则可以使用localhost异常来创建系统中的第一个用户。 此第一个用户必须具有创建其他用户的权限。 对于mongodb 3.0,使用localhost异常只能在admin
数据库上创建用户。 创建第一个用户后,必须使用该用户进行身份验证以添加后续用户。 启用auth提供有关在启用部署访问控制时添加用户的更多详细信息。
对于常规用户创建,必须拥有以下权限:
grantrole
操作。useradmin和useradminanydatabase内置角色在其各自的资源上提供createuser
和grantrole
操作。
要在mongodb部署中创建用户,请连接到部署,然后使用db.createuser()
方法或createuser
命令添加用户。
mongodb是一个nosql数据库服务器。 默认安装提供使用mongo命令通过命令行访问数据库而不进行身份验证。下面我们来学习如何在具有适当身份验证的mongodb服务器中创建用户。
创建管理员用户
可以使用以下命令在mongodb服务器中创建具有管理员权限的用户。
$ mongo
> use admin
> db.createuser(
{
user:"maxsu",
pwd:"pwd123",
roles:[{role:"root",db:"admin"}]
}
)
> exit
现在尝试通过命令行使用上述用户凭据登录 -
d:\program files\mongodb\server\3.4\bin>mongo -u maxsu -p --authenticationdatabase admin
mongodb shell version v3.4.5
enter password:
connecting to: mongodb://127.0.0.1:27017
mongodb server version: 3.4.5
server has startup warnings:
2017-07-05t21:16:55.901+0800 i control [initandlisten]
2017-07-05t21:16:55.902+0800 i control [initandlisten] ** warning: access control is not enabled for the database.
2017-07-05t21:16:55.905+0800 i control [initandlisten] ** read and write access to data and configuration is unrestricted.
2017-07-05t21:16:55.908+0800 i control [initandlisten]
>
添加数据库用户
您还可以创建指定数据库的用户,该用户只能访问该数据库。也可以为此数据库上的用户指定访问级别。 例如,创建一个在mydb
数据库上具有读写访问权限的用户帐户。
> use mydb
> db.createuser(
{
user: "user01",
pwd: "pwd123",
roles: ["readwrite"]
}
)
> exit
验证身份验证使用以下命令。 返回结果为1
,表示认证成功。
> db.auth('user01','pwd123')
1
>
要列出数据库的所有用户,请使用以下命令。
> db.getusers()
上面语句,返回结果如下所示 -
> db.getusers()
[
{
"_id" : "mydb.user01",
"user" : "user01",
"db" : "mydb",
"roles" : [
{
"role" : "readwrite",
"db" : "mydb"
}
]
},
{
"_id" : "mydb.user02",
"user" : "user02",
"db" : "mydb",
"roles" : [
{
"role" : "readwrite",
"db" : "mydb"
}
]
}
]
>
删除数据库用户
也可以使用以下命令从数据库中删除用户。
> use mydb
> db.dropuser('user02')
创建带角色的用户
以下操作在test
数据库中创建用户:mynewuser
,并向用户提供readwrite
和dbadmin
角色。
use test
db.createuser(
{
user: "mynewuser",
pwd: "myuser123",
roles: [ "readwrite", "dbadmin" ]
}
);
创建没有角色的用户
以下操作在test
数据库中创建一个名为mynewuser1
的用户,但尚未分配角色:
use test
db.createuser(
{
user: "mynewuser1",
pwd: "myuser1123",
roles: [ ]
}
);
创建具有角色的管理用户
以下操作在管理数据库中创建一个名为 myadmin1
的用户,并给予用户对config
数据库的 readwrite
访问权限,这样可以让用户更改分片分区的某些设置,例如平衡器设置。
use admin
db.createuser(
{
user: "myadmin1",
pwd: "myadmin123",
roles:
[
{ role: "readwrite", db: "config" },
"clusteradmin"
]
}
);