mongodb 3.X创建用户,密码,授权,查看,删除

栏目: 数据库 · 发布时间: 5年前

内容简介:首先,mongo默认登录不需要密码登录完之后,1.创建 admin

首先,mongo默认登录不需要密码

登录完之后,

1.创建 admin

角色:userAdminAnyDatabase (这是一个账号管理员的角色)

admin用户用于管理账号,不能进行关闭数据库等操作,目标数据库是admin

1.另起一个终端,运行下列命令

mongo --port 27017

use admin

db.createUser(
  {
    user: "adminUser",
    pwd: "adminPass",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

管理员创建成功,现在拥有了用户管理员

用户名:adminUser

密码:adminPass

2.创建root

创建完admin管理员,创建一个 超级管理员 root 角色:root

root角色用于 关闭数据库 db.shutdownServer()

db.createUser({user: “root”,pwd: “123456”,roles: [ { role: “root”, db: “admin” } ]})

3.创建用户自己的数据库的角色

当账号管理员和超级管理员,可以为自己的数据库创建用户了

(坑)这时候一定,一定要切换到所在数据库上去创建用户,不然创建的用户还是属于admin。

use position

db.createUser({user: “position”,pwd: “123456”,roles: [ { role: “dbOwner”, db: “position” } ]})

4.查看用户

创建完或者删完用户,可以查看当前的用户列表

db.system.users.find()

或者

show users

5.删除用户

删除用户必须由账号管理员来删,所以,切换到admin角色

use admin

db.auth(“admin”,”123456″)

删除单个用户

db.system.users.remove({user:”XXXXXX”})

删除所有用户

db.system.users.remove({})

2.2 Mongodb 用户验证登陆

启动带访问控制的 Mongodb

新建终端

mongod --auth --port 27017 --dbpath /data/db1

现在有两种方式进行用户身份的验证

第一种 (类似 MySql)

客户端连接时,指定用户名,密码,db名称

mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"

第二种

客户端连接后,再进行验证

mongo --port 27017

use admin
db.auth("adminUser", "adminPass")

// 输出 1 表示验证成功

2.3 创建普通用户

过程类似创建管理员账户,只是 role 有所不同

use foo

db.createUser(
  {
    user: "simpleUser",
    pwd: "simplePass",
    roles: [ { role: "readWrite", db: "foo" },
             { role: "read", db: "bar" } ]
  }
)

现在我们有了一个普通用户

用户名:simpleUser

密码:simplePass

权限:读写数据库 foo, 只读数据库 bar。

注意

NOTE

WARN

use foo 表示用户在 foo 库中创建,就一定要 foo 库验证身份,即用户的信息跟随随数据库。比如上述 simpleUser 虽然有 bar 库的读取权限,但是一定要先在 foo 库进行身份验证,直接访问会提示验证失败。

use foo
db.auth("simpleUser", "simplePass")

use bar
show collections

还有一点需要注意,如果 admin 库没有任何用户的话,即使在其他数据库中创建了用户,启用身份验证,默认的连接方式依然会有超级权限

2.4 内建角色

  • Read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  • root:只在admin数据库中可用。超级账号,超级权限

2.5 URI 形式的访问

生产中常用 URI 形式对数据库进行连接

mongodb://your.db.ip.address:27017/foo

添加用户名密码验证

mongodb://simpleUser:simplePass@your.db.ip.address:27017/foo

参考链接

结语

在使用数据库的过程中,一定要注意安全风险,由于 Mongodb 的默认配置,使得数据库有入侵风险,应该予以防范。

mongodb密码和传统数据如 mysql 等有些区别:

  1. mongodb的用户名和密码是基于特定数据库的,而不是基于整个系统的。所有所有数据库db都需要设置密码

mongodb设置管理用户和密码:

  1. show dbs
    在mongodb新版本里并没有admin数据库,但是并不妨碍第2步操作。
  2. use admin  进入admin数据库
  3. 创建管理员账户
    db.createUser({ user: "useradmin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
    mongodb中的用户是基于身份role的,该管理员账户的 role是 userAdminAnyDatabase。 ‘userAdmin’代表用户管理身份,’AnyDatabase’ 代表可以管理任何数据库。
  4. 验证第3步用户添加是否成功
    db.auth("useradmin", "adminpassword")  如果返回1,则表示成功。
    exit 退出系统
    db.auth() 方法理解为 用户的验证功能
  5. 修改配置
    sudo vi /etc/mongod.conf
    找到 #security:  取消注释,修改为:
    security:
    authorization: enabled #注意缩进,缩进参照配置文件其他配置。缩进错误可能第6步重启不成功。
    
  6. 重启mongodb  sudo service mongod restart
  7. 进入mongodb,用第3步的 管理员账户登录,用该账户创建其他数据库管理员账号
    use admin
    db.auth("useradmin", "adminpassword")
    
  8. use yourdatabase
    db.createUser({ user: "youruser", pwd: "yourpassword", roles: [{ role: "dbOwner", db: "yourdatabase" }] })
    

    rote:dbOwner 代表数据库所有者角色,拥有最高该数据库最高权限。比如新建索引等

  9. use yourdatabase
    db.createUser({ user: "youruser2", pwd: "yourpassword2", roles: [{ role: "readWrite", db: "yourdatabase" }] })
    

    该用户用于该数据的读写,只拥有读写权限。

  10. 现在数据的用户名和密码就建好了。
    可以使用: mongodb://youruser2:yourpassword2 @localhost /yourdatabase 来链接

以上所述就是小编给大家介绍的《mongodb 3.X创建用户,密码,授权,查看,删除》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

SRE

SRE

贝特西 拜尔 (Betsy Beyer)、等 / 孙宇聪 / 电子工业出版社 / 2016-10-1 / CNY 108.00

大型软件系统生命周期的绝大部分都处于“使用”阶段,而非“设计”或“实现”阶段。那么为什么我们却总是认为软件工程应该首要关注设计和实现呢?在《SRE:Google运维解密》中,Google SRE的关键成员解释了他们是如何对软件进行生命周期的整体性关注的,以及为什么这样做能够帮助Google成功地构建、部署、监控和运维世界上现存最大的软件系统。通过阅读《SRE:Google运维解密》,读者可以学习到......一起来看看 《SRE》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具