MongoDB 单实例节点主机的用户和权限一般操作步骤

2022-11-09,,,,

步骤总结:

1.先正常启动

2.创建用户,创建数据库病授权用户

3.关闭程序,开启安全,然后启动

4.使用账号和密码连接

    按未开启认证的方式(配置文件中没开启安全选项并且启动命令中不添加 --auth 参数,)来启动MongoDB服务
    使用Mongo客户端登录,然后创建管理用户:
# 切换到admin库
> use admin # 创建系统超级用户 myroot,设置密码12345,设置角色root
> db.createUser({user:"myroot",pwd:"12345",roles:[{"role":"root","db":"admin"}]})
# 或者 db.createUser({user:"myroot",pwd:"12345",roles:["root"]}) # 创建专门用来管理admin库的账号myadmin,只用来作为用户权限的管理
> db.createUser({user:"myadmin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) # 查看已经创建了的用户的情况:
> db.system.users.find() # 删除用户
> db.dropUser("myadmin") # 修改密码
> db.changeUserPassword("myroot", "123456")

提示:

1)本案例创建了两个用户,分别对应超管和专门用来管理用户的角色,事实上,你只需要一个用户即可。如果你对安全要求很高,防止超管泄漏,则不要创建超管用户。

2)和其它数据库(MySQL)一样,权限的管理都差不多一样,也是将用户和权限信息保存到数据库对应的表中。Mongodb存储所有的用户信息在admin 数据库的集合system.users中,保存用户名、密码和数据库信息。

3)如果不指定数据库,则创建的指定的权限的用户在所有的数据库上有效,如 {role:"userAdminAnyDatabase", db:""}

    认证测试
# 切换到admin
> use admin
# 密码输错
> db.auth("myroot","12345")
Error: Authentication failed.
0
# 密码正确
> db.auth("myroot","123456")
1
    创建普通用户

    创建普通用户可以在没有开启认证的时候添加,也可以在开启认证之后添加,但开启认证之后,必须使用有操作admin库的用户登录认证后才能操作。

    底层都是将用户信息保存在了admin数据库的集合system.users中。

# 创建(切换)将来要操作的数据库articledb,
> use articledb
switched to db articledb
# 创建用户,拥有articledb数据库的读写权限readWrite,密码是123456
> db.createUser({user:"bobo", pwd: "123456", roles: [{role:"readWrite",db:"articledb"}]})
# 或者 db.createUser({user: "bobo", pwd: "123456", roles: ["readWrite"]}) # 测试是否可用
> db.auth("bobo","123456")
1

提示:

如果开启了认证后,登录的客户端的用户必须使用admin库的角色,如拥有root角色的myadmin用户,再通过myadmin用户去创建其他角色的用户

    服务端开启认证

    (1)关闭已经启动的服务

    1)使用linux命令杀死进程

    2)在mongo客户端中使用shutdownServer命令来关闭

> use admin
switched to db admin > db.shutdownServer()

需要几个条件:

必须是在 admin库下执行该关闭服务命令。
如果没有开启认证,必须是从 localhost登陆的,才能执行关闭服务命令。
非 localhost的、通过远程登录的,必须有登录且必须登录用户有对admin操作权限才可以。

(2)以开启认证的方式启动服务

有两种方式开启权限认证启动服务:一种是参数方式,一种是配置文件方式。

1)参数方式

在启动时指定参数 --auth ,如:

mongod -f mongod.conf --auth
    配置文件方式

    在mongod.conf配置文件中加入:

vim mongod.conf
security:
  #开启授权认证
authorization: enabled

此时启动就不指定参数 --auth了 ,如:

mongod -f mongod.conf
    客户端连接登录

    有两种认证方式,一种是先登录,在mongo shell中认证;一种是登录时直接认证。

    1)先连接再认证

# mongo --host 192.168.0.253 --port 27017

> use articledb
switched to db articledb
> db.auth("bobo","123456")
1
> db.comment.find()
>

2)连接时直接认证

# 对admin数据库进行登录认证和相关操作:
mongo --host 192.168.0.253 --port 27017 --authenticationDatabase admin -u myroot -p 123456 # 对articledb数据库进行登录认证和相关操作:
mongo --host 192.168.0.253 --port 27017 --authenticationDatabase articledb -u bobo -p 123456

提示:

-u :用户名
-p :密码
--authenticationDatabase :指定连接到哪个库。当登录是指定用户名密码时,必须指定对应的数据库!

MongoDB 单实例节点主机的用户和权限一般操作步骤的相关教程结束。

《MongoDB 单实例节点主机的用户和权限一般操作步骤.doc》

下载本文的Word格式文档,以方便收藏与打印。