MongoDB用户使用

创建DB管理用户

mongodb有一个用户管理机制,简单描述为,有一个管理用户组,这个组的用户是专门为管理普通用户而设的,暂且称之为管理员。

管理员通常没有数据库的读写权限,只有操作用户的权限, 因此我们只需要赋予管理员userAdminAnyDatabase角色即可。

另外管理员账户必须在admin数据库下创建。

小技巧:

  1. 由于用户被创建在哪个数据库下,就只能在哪个数据库登录,应该把所有的用户都创建在admin数据库下。先use admin数据库,进行登录,登录后use其他数据库进行操作,其中第二次的use就不需要在登录。MongoDB设定use第二个数据库时如果登录用户权限比较高就可以操作第二个数据库,而不需要登录。例如:root、userAdminAnyDatabase、dbAdminAnyDatabase 等。
    1. 切换到Admin库

刚通过./mongo进入到客户端工具时,是没有使用数据库的。可以使用use切换数据库。

管理员需要在admin数据库下创建,所以我们需要切换到admin数据库。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PujEg44R-1611573489635)(https://uploader.shimo.im/f/8ybQWXgFjAH6Hu3t.png!thumbnail?fileGuid=TVXCXINSEMcmZvkf)]

查看admin中的用户

我们可以通过db.system.users.find()函数来查看admin库中的所有用户信息。

数据库MongoDB-用户使用_客户端

目前在admin库中没有用户,所以查无结果。

db.createUser函数

在MongoDB中可以使用db.createUser({用户信息})函数创建用户。

db.createUser({ 
    user: "<name>",
    pwd: "<cleartext password>",
    customData: { <any information> },
    roles: [
        { role: "<role>", db: "<database>" } | "<role>",
        ...
    ]
});

1)user:新建用户名。

2)pwd:新建用户密码。

3)customData:存放一些用户相关的自定义数据,该属性也可忽略。

4)roles:数组类型,配置用户的权限。

创建管理员用户

我们现在需要在admin库中创建一个名为bjsxt的管理员用户,密码为bjsxtpwd。

db.createUser({user:'bjsxt',pwd:'bjsxtpwd',roles:[{role:'userAdminAnyDatabase',db:'admin'}]})

也可以直接赋予root角色

db.createUser({user:'jinken',pwd:'jinken',roles:[{role:'root',db:'admin'}]})

创建成功后会看到如下提示:

数据库MongoDB-用户使用_客户端_02

5. 关闭MongoDB

在管理员账户创建完成后,我们需要重新启动MongoDB,并开启验证。

重新启动函数:db.shutdownServer()。必须在./mongodb客户端命令行中才能输入
数据库MongoDB-用户使用_数据库_03

使用权限方式启动MongoDB

数据库MongoDB-用户使用_数据库_04

在默认的情况下MongoDB是不开启用户认证的。如果我们添加用户,那么需要开启用户认证机制。通过修改mongodb.conf配置文件,在文件中添加auth=true即可。

数据库MongoDB-用户使用_数据库_05

修改完成后启动MongoDB。

用户认证

创建管理员后,需要认证方可使用该用户,否则会提示需要认证。

数据库MongoDB-用户使用_客户端_06

认证函数:db.auth(‘用户名’,’密码’)
数据库MongoDB-用户使用_客户端_07

如果结果返回1,则表示认证成功,返回0则表示认证失败。

登录成功后可查询用户
数据库MongoDB-用户使用_用户认证_08

创建账号后向新数据库插入document的流程

重点:必须理解使用admin登录,登录后切换到对应数据库。和后面使用Navicat是一样的。

启动客户端

# ./mongo

使用admin数据库

# use admin

登录

# db.auth("bjsxt","bjsxtpwd")

切换到sxt数据库下。在MongoDB中如果数据库不存在use时会新建数据库。

# use sxt

切换到admin下

# use admin

注意:一定要在admin下创建,否则无法登录。

# db.createUser({user:"sxt",pwd:"sxtpwd",roles:[{role:"readWrite",db:"sxt"}]});

退出客户端,Ctrl+C

# ./mongo

使用admin数据库

use admin

登录

# db.auth("bjsxt","bjsxtpwd")

切换

# use sxt

新增数据。其中sxt为collection名。

# db.sxt.insert({key:"value"});

查看数据

# db.sxt.find()

更新用户角色

如果我们需要对已存在的用户的角色做修改,那么我们可以使用db.updateUser()函数来更新用户角色。注意,该函数需要当前用户具有userAdminAnyDatabase或者更高的权限。

更新角色语法格式

db.updateUser("用户名", {"roles":[{"role":"角色名称",db:"数据库"},{"更新项2":"更新内容"}]})

流程

# use admin

使用高权限用户登录

# db.auth("bjsxt","bjsxtpwd")

修改

# db.updateUser("sxt",{"roles":[{role:"readWriteAnyDatabase",db:"sxt"}]});

更新用户密码

更新用户密码有两种方式:

1)使用db.updateUser()函数更新密码。

2)使用db.changeUserPassword()函数更新密码

更新密码方式一

使用db.upateUser()函数将bjsxt用户的密码修改为sxt。

注意:执行此命令的用户需要具有userAdmin或root权限

语法格式

db.updateUser(“用户名”,{“pwd”:“新密码”})

数据库MongoDB-用户使用_mongodb_09

如果未提示任何信息则表示更新成功。退出当前客户端重新连接认证即可。

重新使用bjsxt用户登录

数据库MongoDB-用户使用_mongodb_10

更新密码方式二

使用db.changeUserPassword()函数将bjsxt用户的密码修改为sxtpwd。

删除用户

通过db.dropUser()函数可删除指定用户。删除成功后会返回true。在删除用户时需要切换到执行创建用户命令所在数据库。注意:需要使用具有userAdminAnyDatabse角色管理员用户才可以删除其他用户。

流程

sxt用户在admin数据库下创建,所以需要先切换到admin下

# use admin

删除.打印true表示删除成功

# db.dropUser("sxt")