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

步骤总结:
1.先正常启动
2.创建用户,创建数据库病授权用户
3.关闭程序,开启安全,然后启动
4.使用账号和密码连接

  1. 按未开启认证的方式(配置文件中没开启安全选项并且启动命令中不添加 --auth 参数,)来启动MongoDB服务
  2. 使用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:""}

  1. 认证测试
# 切换到admin
> use admin
# 密码输错
> db.auth("myroot","12345")
Error: Authentication failed.
0
# 密码正确
> db.auth("myroot","123456")
1
  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)关闭已经启动的服务
    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
  1. 配置文件方式
    在mongod.conf配置文件中加入:
vim mongod.conf
security:
  #开启授权认证
  authorization: enabled

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

mongod -f mongod.conf
  1. 客户端连接登录
    有两种认证方式,一种是先登录,在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 :指定连接到哪个库。当登录是指定用户名密码时,必须指定对应的数据库!
posted @ 2020-11-12 12:15  哈喽哈喽111111  阅读(305)  评论(0编辑  收藏  举报