Jednym z pierwszych zadań po uruchomieniu serwera bazy danych MongoDB jest skonfigurowanie użytkowników i baz danych. W tym poście omówimy niektóre z typowych scenariuszy tworzenia i konfigurowania użytkowników w MongoDB. Zarządzanie użytkownikami MongoDB znacznie się poprawiło w porównaniu z poprzednimi dwiema wersjami i jest teraz wydajnym i funkcjonalnym modelem zarządzania użytkownikami. Użytkownikom można przypisać różne role, a role można skonfigurować z żądanymi uprawnieniami. Dostępnych jest kilka wbudowanych ról użytkownika lub możesz utworzyć własne role niestandardowe.
Przykłady w tym poście używają klienta 2.6.4 i serwera 2.6.4. W modelu zarządzania użytkownikami wprowadzono znaczne zmiany z 2,4 na 2,6. Tak więc, jeśli używasz klienta 2.4, wiele przykładów w tym poście nie będzie dla ciebie działać. Możesz sprawdzić wersję klienta yoMongoDBodb za pomocą następującej składni:
mongo --version
Dodawanie użytkownika do bazy danych
Pierwszym krokiem po utworzeniu użytkownika jest utworzenie bazy danych aplikacji:
use applicationdb;
Po utworzeniu tej bazy danych chcemy utworzyć użytkownika, który będzie używany przez aplikację do zapisu do tej bazy danych. Chcemy, aby ten użytkownik miał uprawnienia do odczytu i zapisu w bazie danych:
db.createUser({'user':'appuser', 'pwd':'', roles:['readWrite']});
Czasami chcemy również dodać użytkowników, którzy mają dostęp tylko do odczytu do bazy danych. Na przykład możemy chcieć dodać użytkownika analitycznego, który ma dostęp tylko do odczytu do bazy danych:
db.createUser({'user':'analyticsuser', 'pwd':'', roles:['read']});
Po utworzeniu użytkowników spróbujmy połączyć się jako ten użytkownik z konsoli MongoDB:
mongo -u 'appuser' -p <servername>/applicationdb MongoDB shell version: 2.6.4 connecting to: <servername>/applicationdb >
Powinno się połączyć! Zwróć uwagę, że „/applicationdb” na końcu składni mówi MongoDB, aby uwierzytelnił „appuser” w bazie danych „applicationdb”.
Dodawanie użytkownika do wielu baz danych
W wielu scenariuszach musimy utworzyć wiele baz danych na serwerze. Na przykład w tym scenariuszu może być konieczne utworzenie innej bazy danych „analyticsdb” do przechowywania wyników analiz. Użytkownik „analytics” potrzebuje teraz dostępu „tylko do odczytu” w „applicationdb” i „readWrite” w „analyticsdb”.
Jak więc to osiągnąć? Czy powinniśmy dodać „użytkownika analityki” do każdej bazy danych? Stwarza to koszmar zarządzania w dłuższej perspektywie, ponieważ dodawanych jest wielu użytkowników i bazy danych. Na szczęście istnieje proste rozwiązanie. Możemy scentralizować przypisania ról dla użytkownika i przechowywać je w jednej bazie danych. W tym scenariuszu wolę przechowywać te przypisania w bazie danych „administratora”, ponieważ jest to centrum centralnej administracji na serwerze, ale można je również przechowywać w oddzielnej bazie danych:
use admin db.createUser({user:'analyticsuser', pwd:'<pass>', roles:[{'role':'read', 'db':'applicationdb'}, { 'role':'readWrite', 'db':'analyticsdb'}]});
Po dodaniu możesz użyć „pokaż użytkowników”, aby wyświetlić szczegóły swoich użytkowników. Oto jak wygląda moja baza danych administratora:
use admin > show users { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "roles" : [{ "role" : "root","db" : "admin"},{"role" : "restore","db" : "admin"}] } {"_id" : "admin.analyticsuser", "user" : "analyticsuser", "db" : "admin", "roles" : [{"role" : "read","db" : "applicationdb"},{"role" : "readWrite","db" : 'analyticsdb"}] } >
Teraz, gdy nasz użytkownik został dodany, spróbujmy połączyć się z konsoli, aby zweryfikować uwierzytelnianie, używając składni, której użyliśmy powyżej:
mongo -u 'analyticsuser' -p <pass> <servername>/applicationdb
Jednak uwierzytelnianie kończy się niepowodzeniem:
2014-10-06T23:11:42.616+0000 Error: 18 { ok: 0.0, errmsg: "auth failed", code: 18 } at src/mongo/shell/db.js:1210 exception: login failed
Powodem jest to, że „użytkownik analityki” jest zdefiniowany w bazie danych „admin”, a nie w „applicationdb”. Sposobem na określenie tego jest użycie parametru „–authenticationDatabase”.
mongo -u 'analyticsuser' -p <pass> <servername>/applicationdb --authenticationDatabase 'admin'
Tym razem logowanie powiodło się:
MongoDB shell version: 2.6.4 connecting to: <servername>/applicationdb
Aby lepiej zrozumieć różne inne wbudowane role dostępne w MongoDB, zapoznaj się z dokumentacją MongoDB dotyczącą ról wbudowanych. Jak zawsze, jeśli masz dodatkowe pytania, możesz skontaktować się z nami pod adresem [email protected].