04-创建用户账户
4.2.1 创建用户账户
在MongoDB shell中创建数据库用户账户 现在该让您来创建用户账户了。安装MongoDB时,自动创建了两个数据库:admin和test。在本节中,您将在这两个数据库中添加用户。程序清单4.1显示了您将使用的命令。这些命令放在一个MongoDB shell脚本中,让您能够轻松地调整和重新执行。 请执行下面的步骤,在MongoDB数据库admin和test中创建用户账户。 1.确保启动了MongoDB服务器。 2.在文件夹code/hour04/中创建一个文件,并将其命名为add_users.js。 3.添加如下代码行,以登录本地主机中的MongoDB服务器: 4.添加下面的代码行,以获取一个表示数据库test的数据库对象: 5.添加程序清单4.1中第3~11行的代码,在数据库test中添加用户testAdmin、testWriter和testReader,它们的角色分别为dbAdmin、readWrite和read。 6.添加下面的代码行,以获取一个表示数据库admin的数据库对象: 7.添加程序清单4.1中第13~16行的代码,在数据库admin中添加用户testUser,它在admin数据库中的角色为read。用户账户testUser还在数据库test中为readWrite角色,这是使用otherDBRoles选项指定的。 8.将这个文件存盘。 9.在控制台窗口中,切换到目录code/hour04,并执行命令mongo add_users.js来运行这个脚本。 程序清单4.2显示了执行脚本add_users.js得到的输出。 程序清单4.1 add_users.js:在数据库test和admin中创建用户账户 程序清单4.2 add_users.js-output:在数据库test和admin中创建用户账户的输出 ▲
数据库管理的一个重要部分是创建能够管理用户和数据库以及读写数据库的用户账户。要添加用户账户,可在MongoDB shell中使用方法addUser()。addUser()将一个文档对象作为参数,让您能够指定用户名、角色和密码。表4.1列出了可在这个文档对象中指定的字段。
| 字段 | 格式 | 描述 |
| :----- | :----- | :----- | :----- | :----- |
| User | 字符串 | 独一无二的用户名 |
| Roles | 数组 | 一个用户角色数组。MongoDB提供了大量可分配给用户的角色,表4.2列出了一些常用的角色 |
| Pwd | 字符串 | 可选的用户密码。创建用户账户时,该字段可以是散列值或字符串;但将以散列值的方式存储在数据库中 |
| userSource |
MongoDB提供了多种可分配给用户账户的角色,这些角色让您能够赋予用户账户复杂的权限和限制。表4.2列出了一些可分配给用户的常见角色。
| 角色 | 描述 | | :----- | :----- | :----- | :----- | | read | 让用户能够读取当前数据库中任何集合的数据 | | readAnyDatabase | 与read相同,但指的是所有数据库 | | readWrite | 提供所有读取权限,并让用户能够写入当前数据库中任何集合,包括插入、删除、更新文档以及创建、重命名和删除集合 | | readWriteAnyDatabase | 与readWrite相同,但指的是所有数据库 | | dbAdmin | 让用户能够读写当前数据库以及清理、修改、压缩、获取统计信息和执行检查 | | dbAdminAnyDatabase | 与dbAdmin相同,但指的是所有数据库 | | clusterAdmin | 让用户能够管理MongoDB,包括连接、集群、复制、列出数据库、创建数据库和删除数据库 | | userAdmin | 让用户能够在当前数据库中创建和修改用户账户 | | userAdminAnyDatabase | 与userAdmin相同,但指的是所有数据库 |
mongo = new Mongo("localhost");
提示:
角色readAnyDatabase、readWriteAnyDatabase、dbAdminAnyDatabase和userAdminAnyDatabase只能分配给admin数据库中的用户账户,因为它们指定的是对所有数据库的权限。
db = mongo.getDB("test")
要创建用户账户,可切换到目标数据库,再使用方法addUser()创建用户账户。下面的MongoDB shell命令在数据库test中创建了一个基本的管理员账户:
use test
db.addUser( { user: "testUser",
pwd: "test",
roles: [ "readWrite", "dbAdmin" ] } )
来看一个更复杂的例子。下面的命令将前面的用户加入到数据库newDB中,它对该数据库只有read权限,但同时对数据库testDB2有readWrite权限:
db = mongo.getDB("admin")
use newDB
db.addUser( { user: "testUser",
userSource: "test",
roles: [ "read" ],
otherDBRoles: { testDB2: [ "readWrite" ] } } )
▼ Try It Yourself
01 mongo = new Mongo("localhost");
02 db = mongo.getDB("test")
03 db.addUser( { user: "testAdmin",
04 pwd: "test",
05 roles: [ "dbAdmin" ] } );
06 db.addUser( { user: "testWriter",
07 pwd: "test",
08 roles: [ "readWrite" ] } );
09 db.addUser( { user: "testReader",
10 pwd: "test",
11 roles: [ "read" ] } );
12 db = mongo.getDB("admin")
13 db.addUser( { user: "testUser",
14 userSource: "test",
15 roles: [ "read" ],
16 otherDBRoles: { test: [ "readWrite" ] } } );
MongoDB shell version: 2.4.8
connecting to: test
type "help" for help
{
"user" : "testAdmin",
"pwd" : "e3d019e161066bd0a872bfeba18e5afe",
"roles" : [
"dbAdmin"
],
"_id" : ObjectId("52d95218d0175d12afe4bfaa")
}
{
"user" : "testWriter",
"pwd" : "4b157b2aaefb2da1a682016569f19603",
"roles" : [
"readWrite"
],
"_id" : ObjectId("52d95218d0175d12afe4bfab")
}
{
"user" : "testReader",
"pwd" : "a74c659e8be6c97af8541d2ed2e33002",
"roles" : [
"read"
],
"_id" : ObjectId("52d95218d0175d12afe4bfac")
}
{
"user" : "testUser",
"userSource" : "test",
"roles" : [
"read"
],
"otherDBRoles" : {
"test" : [
"readWrite"
]
},
"_id" : ObjectId("52d95218d0175d12afe4bfad")
}