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 } )
  • 相关阅读:
    POJ 3268 Silver Cow Party (Dijkstra)
    怒学三算法 POJ 2387 Til the Cows Come Home (Bellman_Ford || Dijkstra || SPFA)
    CF Amr and Music (贪心)
    CF Amr and Pins (数学)
    POJ 3253 Fence Repair (贪心)
    POJ 3069 Saruman's Army(贪心)
    POJ 3617 Best Cow Line (贪心)
    CF Anya and Ghosts (贪心)
    CF Fox And Names (拓扑排序)
    mysql8.0的新特性
  • 原文地址:https://www.cnblogs.com/oDoraemon/p/9397701.html
Copyright © 2011-2022 走看看