首页 文章

如何使用用户名和密码保护MongoDB

提问于
浏览
332

我想为我的MongoDB实例设置用户名和密码身份验证,以便任何远程访问都会要求输入用户名和密码 . 我尝试了MongoDB网站上的教程并做了以下事情:

use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');

在那之后,我退出并再次运行mongo . 我不需要密码来访问它 . 即使我远程连接到数据库,也不会提示我输入用户名和密码 .


UPDATE 这是我最终使用的解决方案

1) At the mongo command line, set the administrator:

    use admin;
    db.addUser('admin','123456');

2) Shutdown the server and exit

    db.shutdownServer();
    exit

3) Restart mongod with --auth

  $ sudo ./mongodb/bin/mongod --auth --dbpath /mnt/db/

4) Run mongo again in 2 ways:

   i) run mongo first then login:

        $ ./mongodb/bin/mongo localhost:27017
        use admin
        db.auth('admin','123456');

  ii) run & login to mongo in command line.

        $ ./mongodb/bin/mongo localhost:27017/admin -u admin -p 123456

用户名和密码对 mongodumpmongoexport 的工作方式相同 .

12 回答

  • 55

    首先,在您的mongod配置文件(默认路径 /etc/mongo.conf )中取消注释以 #auth=true 开头的行 . 这将启用mongodb的身份验证 .

    然后,重启mongodb: sudo service mongod restart

  • 45

    https://docs.mongodb.com/manual/reference/configuration-options/#security.authorization

    编辑mongo设置文件;

    sudo nano /etc/mongod.conf
    

    添加行:

    security.authorization : enabled
    

    重启服务

    sudo service mongod restart
    

    问候

  • 26

    设置用户后,需要使用 --auth 选项启动 mongod .

    来自MongoDB网站:

    使用--auth选项运行数据库(mongod进程)以启用安全性 . 在使用--auth启动服务器之前,您必须已将用户添加到admin db,或者从localhost接口添加第一个用户 .

    MongoDB Authentication

  • 2

    User creation with password for a specific database to secure database access :

    use dbName
    
    db.createUser(
       {
         user: "dbUser",
         pwd: "dbPassword",
         roles: [ "readWrite", "dbAdmin" ]
       }
    )
    
  • 3

    这个答案是针对Mongo 3.2.1 Reference

    Terminal 1:

    $ mongod --auth
    

    Terminal 2:

    db.createUser({user:"admin_name", pwd:"1234",roles:["readWrite","dbAdmin"]})
    

    如果你想添加没有角色(可选):

    db.createUser({user:"admin_name", pwd:"1234", roles:[]})
    

    检查是否经过身份验证:

    db.auth("admin_name", "1234")
    

    它应该给你:

    1
    

    否则:

    Error: Authentication failed.
    0
    
  • 11

    这些步骤对我有用:

    • 在cmd上写mongod --port 27017

    • 然后连接到mongo shell:mongo --port 27017

    • 创建用户admin:使用admin db.createUser({user:"myUserAdmin",pwd:"abc123",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})

    • 断开mongo shell

    • 重启mongodb:mongod --auth --port 27017

    • start mongo shell:mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

    • 要在连接后进行身份验证,请将mongo shell连接到mongod:mongo --port 27017

    • 切换到认证数据库:使用admin db.auth("myUserAdmin","abc123"

  • 41

    首先使用终端在终端上运行mongoDB

    mongod
    

    现在运行mongo shell使用以下命令

    use admin
    db.createUser(
      {
        user: "myUserAdmin",
        pwd: "abc123",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
      }
    )
    

    使用访问控制重新启动MongoDB实例 .

    mongod --auth
    

    现在使用命令行对自己进行身份验证

    mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
    

    我是从中读到的

    https://docs.mongodb.com/manual/tutorial/enable-authentication/

  • 100

    您需要切换到您希望用户使用的数据库(而不是admin db)...

    use mydatabase

    请参阅此帖子以获取更多帮助...... https://web.archive.org/web/20140316031938/http://learnmongo.com/posts/quick-tip-mongodb-users/

  • 5

    连接到mongoDB的最佳实践如下:

    • 初始安装后,

    use admin

    • 然后运行以下脚本以创建管理员用户

    db.createUser( { user: "YourUserName", pwd: "YourPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "clusterAdmin", db: "admin" } ] })

    以下脚本将为DB创建admin用户 .

    • 使用登录db.admin

    mongo -u YourUserName -p YourPassword admin

    • 登录后,您可以通过重复1到3来创建具有相同管理员凭证或不同数据库的N个数据库 .

    这允许您为在MongoDB中创建的不同集合创建不同的用户和密码

  • 3

    在您创建新用户后,请不要忘记对用户的 grant read/write/root 权限 . 你可以尝试一下

    cmd: db.grantRolesToUser('yourNewUsername',[{ role: "root", db: "admin" }])

  • 0

    Wow so many complicated/confusing answers here.

    这是 v3.4 的结尾 .

    简答 .

    1)启动没有访问控制的MongoDB .

    mongod --dbpath /data/db
    

    2)连接到实例 .

    mongo
    

    3)创建用户 .

    use some_db
    db.createUser(
      {
        user: "myNormalUser",
        pwd: "xyz123",
        roles: [ { role: "readWrite", db: "some_db" },
                 { role: "read", db: "some_other_db" } ]
      }
    )
    

    4)停止MongoDB实例并使用访问控制再次启动它 .

    mongod --auth --dbpath /data/db
    

    5)以用户身份连接和验证 .

    use some_db
    db.auth("myNormalUser", "xyz123")
    db.foo.insert({x:1})
    use some_other_db
    db.foo.find({})
    

    完整答案:如果您想正确理解,请阅读此内容 .

    它's really simple. I' ll愚蠢的下面https://docs.mongodb.com/manual/tutorial/enable-authentication/

    如果您想了解更多关于角色的实际内容,请在此处阅读更多内容:https://docs.mongodb.com/manual/reference/built-in-roles/

    1)启动没有访问控制的MongoDB .

    mongod --dbpath /data/db
    

    2)连接到实例 .

    mongo
    

    3)创建用户管理员 . 以下内容在 admin 身份验证数据库中创建用户管理员 . 用户是 some_db 数据库上的 dbOwner 而不是 admin 数据库,这一点很重要 .

    use admin
    db.createUser(
      {
        user: "myDbOwner",
        pwd: "abc123",
        roles: [ { role: "dbOwner", db: "some_db" } ]
      }
    )
    

    或者,如果您要创建一个管理员,该管理员是任何数据库的管理员:

    use admin
    db.createUser(
      {
        user: "myUserAdmin",
        pwd: "abc123",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
      }
    )
    

    4)停止MongoDB实例并使用访问控制再次启动它 .

    mongod --auth --dbpath /data/db
    

    5)以 admin 认证数据库的用户管理员身份进行连接和身份验证,而不是向 some_db 身份验证数据库进行身份验证 . 用户管理员是在 admin 身份验证数据库中创建的,该用户不存在于 some_db 身份验证数据库中 .

    use admin
    db.auth("myDbOwner", "abc123")
    

    您现在通过 some_db 数据库身份验证为 dbOwner . 所以,现在如果您希望直接读取/写入/执行 some_db 数据库,您可以更改它 .

    use some_db
    //...do stuff like db.foo.insert({x:1})
    // remember that the user administrator had dbOwner rights so the user may write/read, if you create a user with userAdmin they will not be able to read/write for example.
    

    更多关于角色:https://docs.mongodb.com/manual/reference/built-in-roles/

    如果您希望使其他用户不是用户管理员而且只是普通用户,请继续阅读下面的内容 .

    6)创建普通用户 . 此用户将在下面的 some_db 身份验证数据库中创建 .

    use some_db
    db.createUser(
      {
        user: "myNormalUser",
        pwd: "xyz123",
        roles: [ { role: "readWrite", db: "some_db" },
                 { role: "read", db: "some_other_db" } ]
      }
    )
    

    7)退出mongo shell,重新连接,以用户身份进行身份验证 .

    use some_db
    db.auth("myNormalUser", "xyz123")
    db.foo.insert({x:1})
    use some_other_db
    db.foo.find({})
    
  • 1

    这是一个添加用户的JavaScript代码 .

    • --auth = true 开始 mongod

    • 从mongo shell访问admin数据库并传递javascript文件 .

    mongo admin“Filename.js”

    “Filename.js”

    // Adding admin user
    db.addUser("admin_username", " admin_password");
    // Authenticate admin user
    db.auth("admin_username ", " admin_password ");
    // use  database code from java script
    db = db.getSiblingDB("newDatabase");
    // Adding newDatabase database user  
    db.addUser("database_username ", " database_ password ");
    
    • 现在用户添加完成,我们可以验证从mongo shell访问数据库

相关问题