zoukankan      html  css  js  c++  java
  • [Doc]MongoDB用户创建与启用access-control

    文档链接:https://docs.mongodb.com/manual/tutorial/enable-authentication/

    Pre

    个人总感觉数据库的文档结构不太友好, 不太解决问题。以下按照原文档结构翻译:


    下面的教程以一个使用了默认认证机制的standalone mongod实例为背景来演示启用认证。

    副本和集群分片的账户认证

    请参考:

    https://docs.mongodb.com/manual/core/security-internal-authentication/

    账户管理

    在启用access-control前,请先确认在admin数据库中,存在userAdmin或userAdminAnyDatabase角色的账户。

    该角色账户拥有以下权限:创建账户、赋予账户角色、废除账户角色、创建/修改账户角色。

    在启用access-control前后都可以创建账户。

    如果还未创建任何账户便启用access-control,则MongoDB会抛出一个localhost exception,允许用户在admin数据库中创建一个账户管理员账号。一旦管理员账号建立,用户以账户管理员账号登陆后,才能添加其他账户。

    步骤

    以下步骤演示在未启用access-control的MongoDB实例中首次添加用户,然后开启的操作。

    1.    不启用access-control启动MongoDB

    mongod --port 27017 --dbpath /data/db

    2.    连接到实例(本地)

    mongo --port 27017

    3.    创建用户管理员

    创建一个userAdminAnyDatabase角色的用户。

    > use admin
    
    > db.createUser(
      {
         user: "UserAdmin",
         pwd: "UserAdminPwd",
         roles: [{ role: 'userAdminAnyDatabase', db: 'admin' }]
      }
    )

    退出mongo shell

    4.    启用access-control,重启mongoDB

    使用--auth选项重启mongod实例

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

    启用access-control之后,用户需要先登陆才能进行操作。用户能够执行的操作由账户归属的角色决定。

    5.    以管理员账号登陆

    通过mongo shell,用户可以:

    • 在连接实例时认证
    • 进入shell, 通过db.auth()进行用户认证

    连接时认证

    mongo --port 27017 -u 'UserAdmin' -p 'UserAdminPwd' --authenticationDatabase "admin"

    连接后认证

    mongo --port 27017
    
    > use admin
    
    > db.auth('UserAdmin', 'UserAdminPwd')

    6.    创建其他账户

    一旦登陆了管理员账户之后,就可以通过db.createUser()来创建其他账户。账户可以赋予mongoDB内置的角色权限,也可以自定义角色权限。

    Mongo内置用户角色见:https://docs.mongodb.com/manual/core/security-built-in-roles/

    自定义用户角色见:https://docs.mongodb.com/manual/core/security-user-defined-roles/

    账户管理员账号UserAdmin只有管理账户和角色的权限。若UserAdmin企图执行其他操作,如从test数据库中的foo集合读取数据,MongoDB会返回一个error。

    以下是创建一个账户的操作

    > use test
    
    > db.createUser(
      {
        user: "myTester",
        pwd: "xyz123",
        roles: [ { role: "readWrite", db: "test" },
                 { role: "read", db: "reporting" } ]
      }
    )

    7.    使用myTester账户登陆

    连接时认证

    mongo --port 27017 -u "myTester" -p "xyz123" --authenticationDatabase "test"

    连接后认证

    mongo --port 27017
    
    > use test
    
    > db.auth("myTester", "xyz123" )

    myTester用户往集合插入数据

    > db.foo.insert( { x: 1, y: 1 } )
  • 相关阅读:
    Atlas学习手记(17):使用FilteredTextBox过滤字符
    Atlas学习手记(22):使用行为增强用户界面(二):Floating Behavior
    Atlas学习手记(27):JavaScript面向对象的扩展(一):命名空间Namespace
    Atlas学习手记(20):客户端简单控件示例
    Atlas学习手记(19):客户端简单控件介绍
    Atlas学习手记(15):使用RoundedCorners为控件加上圆角效果
    bootstraptable中的checkbox 操作事件
    Mysql: Table 'name' is specified twice, both as a target for 'UPDATE' and as a separate source for d
    ASP.NET配置KindEditor富文本编辑器
    js如何获取kindeditor的值
  • 原文地址:https://www.cnblogs.com/oDoraemon/p/9397701.html
Copyright © 2011-2022 走看看