Jak zabezpieczyć MongoDB nazwą użytkownika i hasłem

Chcę skonfigurować uwierzytelnianie nazwy użytkownika i hasła dla mojej instancji MongoDB, tak aby każdy zdalny dostęp pytał o nazwę użytkownika i hasło. Wypróbowałem samouczek ze strony MongoDB i zrobiłem:

use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');
Po tym, wyszedłem i ponownie uruchomiłem mongo. I nie potrzebuję hasła, żeby się do niego dostać. Nawet jeśli połączę się zdalnie z bazą danych, nie pojawi się monit o nazwę użytkownika i hasło.

UPDATE Oto rozwiązanie, które znalazłem using

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

Nazwa użytkownika i hasło będą działać w ten sam sposób dla mongodump i mongoexport.

Author: Prashant Pokhriyal, 2011-02-03

12 answers

Musisz uruchomić {[0] } z opcją --auth Po skonfigurowaniu użytkownika.

Ze strony MongoDB:

Uruchom bazę danych (proces mongod) z opcją --auth, aby włączyć Ochrona. Musisz albo dodać użytkownika do db admin przed uruchomienie serwera z --auth, lub dodanie pierwszego użytkownika z interfejs localhost.

MongoDB

 98
Author: Alexandru Petrescu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-10 18:57:07

Najpierw Usuń komentarz linii zaczynającej się od #auth=true w pliku konfiguracyjnym mongod(domyślna ścieżka /etc/mongo.conf). Umożliwi to uwierzytelnianie dla mongodb.

Następnie uruchom ponownie mongodb: sudo service mongod restart

 53
Author: Shnkc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-26 10:35:57

Ta odpowiedź jest dla Mongo 3.2.1 odniesienie

Terminal 1:

$ mongod --auth

Terminal 2:

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

Jeśli chcesz dodać bez ról (opcjonalnie):

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

Aby sprawdzić, czy uwierzytelnione czy nie:

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

Powinno dać:

1

Else:

Error: Authentication failed.
0
 41
Author: Sdembla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-10 01:14:38

Wow tyle skomplikowanych / mylących odpowiedzi tutaj.

To jest od v3.4 .

Krótka odpowiedź.

1) Uruchom MongoDB bez kontroli dostępu.

mongod --dbpath /data/db

2) Połącz się z instancją.

mongo

3) Utwórz użytkownika.

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

4) Zatrzymaj instancję MongoDB i uruchom ją ponownie za pomocą kontroli dostępu.

mongod --auth --dbpath /data/db

5) Połącz się i Uwierzytelnij jako użytkownik.

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

Długa odpowiedź: przeczytaj to, jeśli chcesz prawidłowo Rozumiem.

To naprawdę proste. I ' ll dumb the following down https://docs.mongodb.com/manual/tutorial/enable-authentication/

jeśli chcesz dowiedzieć się więcej o rolach, przeczytaj więcej tutaj: https://docs.mongodb.com/manual/reference/built-in-roles/

1) Uruchom MongoDB bez kontroli dostępu.

mongod --dbpath /data/db

2) Połącz się z instancją.

mongo

3) Utwórz administratora użytkownika. następujące tworzy administratora użytkownika w bazie danych uwierzytelniania admin. Użytkownik jest dbOwner nad bazą danych some_db, A nie nad bazą danych admin, jest to ważne do zapamiętania.

use admin
db.createUser(
  {
    user: "myDbOwner",
    pwd: "abc123",
    roles: [ { role: "dbOwner", db: "some_db" } ]
  }
)
Jeśli chcesz utworzyć admina, który będzie adminem nad dowolną bazą danych:]}
use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

4) Zatrzymaj instancję MongoDB i uruchom ją ponownie za pomocą kontroli dostępu.

mongod --auth --dbpath /data/db

5) Połącz się i Uwierzytelnij jako administrator użytkownika w bazie danych uwierzytelniania admin, a nie w some_db baza danych uwierzytelniania. użytkownik administrator został utworzony w bazie uwierzytelniania admin, użytkownik nie istnieje w bazie uwierzytelniania some_db.

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

jesteś teraz uwierzytelniony jako dbOwner w bazie danych some_db. Więc teraz, jeśli chcesz czytać/pisać / robić rzeczy bezpośrednio do bazy some_db, możesz ją zmienić.

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.

Więcej o rolach: https://docs.mongodb.com/manual/reference/built-in-roles/

jeśli chcesz dodać dodatkowych użytkowników, którzy nie są administratorami użytkowników, a którzy są tylko zwykłymi użytkownikami Czytaj dalej poniżej.

6) Utwórz normalnego użytkownika. ten użytkownik zostanie utworzony w bazie danych uwierzytelniania some_db poniżej.

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

7) Wyjdź z powłoki mongo, ponownie połącz się, Uwierzytelnij jako użytkownik.

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
 41
Author: Karl Morrison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-31 09:33:02

Oto kod javascript do dodawania użytkowników.

  1. Start mongod z --auth = true

  2. Uzyskaj dostęp do bazy danych Administratora z powłoki mongo i przekaż plik javascript.

    Mongo admin " nazwa pliku.js "

    " Nazwa pliku.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 ");
    
  3. Teraz dodanie użytkownika jest zakończone, możemy zweryfikować dostęp do bazy danych z powłoki mongo

 26
Author: Bharadvaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-23 00:10:01

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

Edytuj plik ustawień mongo;

sudo nano /etc/mongod.conf

Dodaj wiersz:

security.authorization : enabled

Uruchom ponownie usługę

sudo service mongod restart

Pozdrawiam

 10
Author: alicanozkara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-23 11:33:26

Najpierw uruchom mongoDB na terminalu używając

mongod

Teraz uruchom powłokę mongo użyj następujących poleceń

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

Uruchom ponownie instancję MongoDB z kontrolą dostępu.

mongod --auth

Teraz Uwierzytelnij się z linii poleceń za pomocą

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

Przeczytałem z

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

 5
Author: PRAVESH kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-11 19:19:35

Musisz przełączyć się do bazy danych, w której ma być umieszczony użytkownik (nie administrator db) ...

use mydatabase

Zobacz ten post, aby uzyskać więcej pomocy ... http://learnmongo.com/posts/quick-tip-mongodb-users/

 3
Author: Justin Jenkins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-04 21:29:38

Utworzenie użytkownika z hasłem do określonej bazy danych w celu zabezpieczenia dostępu do bazy danych:

use dbName

db.createUser(
   {
     user: "dbUser",
     pwd: "dbPassword",
     roles: [ "readWrite", "dbAdmin" ]
   }
)
 3
Author: Hasib Kamal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-13 11:55:04

Te kroki zadziałały na mnie:

  1. Zapisz mongod --port 27017 na cmd
  2. następnie podłącz do powłoki mongo: mongo --port 27017
  3. Utwórz użytkownika admin : użyj admina db.createUser( { użytkownik: "myUserAdmin", "abc123", roles: [{role: "userAdminAnyDatabase", db: "admin" } ] } )
  4. Odłącz muszlę mongo
  5. Uruchom ponownie mongodb: mongod --auth --port 27017
  6. start Mongo shell : mongo --port 27017-u "myUserAdmin" - p "abc123" --authenticationDatabase "admin"
  7. aby uwierzytelnić po podłączeniu, podłącz powłokę mongo do mongod: mongo -- port 27017
  8. Przełącz do bazy danych uwierzytelniania : użyj admina db.auth ("myUserAdmin"," abc123 "
 2
Author: Kevin Niasta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-18 08:58:03

Po utworzeniu nowego użytkownika, nie zapomnij grant read/write/root uprawnienia dla użytkownika. możesz spróbować

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

 0
Author: Haisheng Yu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-08 09:05:23

Najlepsza praktyka łączenia się z mongoDB w następujący sposób:

  1. Po wstępnej instalacji,

    use admin

  2. Następnie uruchom następujący skrypt, aby utworzyć użytkownika admin

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

Następujący skrypt utworzy użytkownika admin dla DB.

  1. Zaloguj się do db.admin using

    mongo -u YourUserName -p YourPassword admin

  2. Po zalogowaniu można utworzyć N numer bazy danych z tym samym poświadczeniem administratora lub innym powtarzając od 1 do 3.

Pozwala to na utworzenie różnych użytkowników i haseł dla różnych kolekcji, które tworzysz w MongoDB

 0
Author: Balaji.J.B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-22 08:29:58