Zarządzanie użytkownikami bazy danych jest szczególnie ważną częścią bezpieczeństwa danych, ponieważ musimy zrozumieć, kto ma dostęp do bazy danych i ustawić prawa dostępu dla każdego użytkownika. Jeśli baza danych nie ma odpowiedniego zarządzania użytkownikami, dostęp użytkowników będzie bardzo nieuporządkowany i trudny w utrzymaniu w miarę upływu czasu.
MongoDB to baza danych i magazyn dokumentów NoSQL. Zastosowanie koncepcji RBAC (Kontrola dostępu oparta na rolach) jest kluczem do wdrożenia odpowiedniego zarządzania użytkownikami w celu zarządzania danymi uwierzytelniającymi użytkownika.
Co to jest kontrola dostępu oparta na rolach (RBAC)?
RBAC to podejście, które ogranicza system tylko do autoryzowanych użytkowników. W organizacji tworzone są role dla różnych funkcji zawodowych, w bazie danych tworzymy następnie prawa dostępu do wykonywania niektórych operacji przypisanych do określonej roli.
Członkom personelu (lub innym użytkownikom systemu) przypisuje się określone role, a za ich pośrednictwem przypisuje się uprawnienia do wykonywania funkcji systemu komputerowego. Użytkownicy nie otrzymują uprawnień bezpośrednio, a jedynie uzyskują je poprzez swoją rolę (lub role). Zarządzanie indywidualnymi uprawnieniami użytkownika sprowadza się do prostego umieszczenia odpowiedniej roli na koncie użytkownika; upraszcza to ogólne operacje (takie jak dodawanie użytkowników lub zmiana działów użytkowników).
Trzy główne zasady są ustawione dla RBAC:
- Przypisanie ról :Podmiot może wykonywać uprawnienia tylko wtedy, gdy podmiot został wybrany lub ma przypisaną rolę.
- Rola autoryzacji :aktywna rola podmiotu musi być autoryzowana dla podmiotu. Zgodnie z regułą 1 powyżej, ta reguła zapewnia, że użytkownicy mogą pełnić role tylko dla tych, którzy są upoważnieni.
- Autoryzacja uprawnień :Podmiot może wykonywać zezwolenia tylko wtedy, gdy zezwolenie na aktywną rolę podmiotu jest autoryzowane. W przypadku reguł 1 i 2 ta reguła zapewnia, że użytkownicy mogą korzystać z uprawnień tylko dla tych, którzy są upoważnieni.
Ten blog zawiera krótki przegląd kontroli dostępu opartej na rolach w bazie danych MongoDB.
Role użytkownika MongoDB
MongoDB ma kilka rodzajów ról w bazie danych, są to...
Wbudowane role
Zapewnia dostęp do danych i działań do MongoDB poprzez autoryzację opartą na rolach i ma wbudowane role, które zapewniają kilka poziomów dostępu do bazy danych.
Rola daje kilka uprawnień do zrobienia czegoś na utworzonym zasobie. Wbudowane role MongoDB mają kilka kategorii:
- Baza danych użytkowników :Role Użytkownicy bazy danych mają rolę do manipulowania danymi w kolekcji niesystemowej. Przykłady ról bazy danych użytkowników to:odczyt, odczyt, zapis.
- Administracja bazą danych :Roles Database Administration zajmuje się administracyjnym zarządzaniem bazami danych, takimi jak administracja użytkownikami, schematem i zawartymi w nim obiektami.
- Przykłady ról administratora bazy danych to:dbAdmin, userAdmin, dbWner.
- Administracja klastra :Rolą administracji klastra jest administrowanie całym systemem MongoDB, w tym jego replikami i fragmentami. Przykładami ról administracyjnych klastra są:clusterAdmin, clusterManager.
- Kopia zapasowa i przywracanie :Ta rola jest specyficzna dla funkcji związanych z tworzeniem kopii zapasowych bazy danych w MongoDB. Przykładami ról są:kopia zapasowa, przywracanie.
- Role we wszystkich bazach danych :Role znajdują się w administratorze bazy danych i mają dostęp do wszystkich baz danych z wyjątkiem lokalnych i konfiguracyjnych. Przykładami są:readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase.
- Superużytkownik :Roles mają możliwość przyznania dostępu każdemu użytkownikowi, każdemu przywilejowi, we wszystkich bazach danych. Przykład tej roli:root
Role zdefiniowane przez użytkownika
Oprócz wbudowanych ról możemy tworzyć własne role zgodnie z naszymi potrzebami, jakie uprawnienia nadajemy tym rolom. Aby utworzyć role, możesz użyć polecenia funkcji db.createRole(). Oprócz możliwości tworzenia ról, istnieje kilka innych funkcji do zarządzania istniejącymi rolami, takich jak:db.dropRole(), która jest przydatna do usuwania istniejących ról w bazie danych, funkcje db.getRole(), aby uzyskać wszystkie informacje z określonych ról.
Działania uprawnień w MongoDB
Akcje związane z uprawnieniami w MongoDB to akcje, które użytkownik może wykonać na zasobie. MongoDB ma kilka kategorii działań, a mianowicie:
- Akcje zarządzania bazą danych, akcje związane z poleceniami związanymi z administrowaniem bazą danych, takie jak changePassword, createCollection, createIndex.
- Akcje zapytań i zapisu, czynności związane z wykonywaniem manipulacji danymi w kolekcji. Na przykład w akcji wstawiania poleceniem, które można wykonać w tej akcji, jest polecenie wstawiania, które można wstawić do dokumentów.
- Akcje zarządzania wdrażaniem, akcje związane ze zmianami w konfiguracji bazy danych. Niektóre akcje należące do kategorii Deployment Management to cpuProfiler, storageDetails, killOp.
- Akcje replikacji, akcje związane z wykonywaniem zasobów replikacji bazy danych, takich jak replSetConfigure, replSetHeartbeat.
- Akcje administrowania serwerem, akcje związane z poleceniami z zasobów administracyjnych serwera w mongoDB, takie jak akcje logrotate, które są używane do obracania baz danych dzienników na poziomie systemu operacyjnego.
- Akcje shardingu, akcje związane z poleceniami z baz danych shardingu, takich jak addShard, aby dodać nowe węzły shard.
- Akcje sesji, akcje związane z sesjami zasobów w bazie danych, takie jak listSessions, killAnySession.
- Akcje diagnostyczne, akcje związane z diagnozą zasobów, takich jak dbStats, aby znaleźć najnowsze warunki w bazie danych.
- Bezpłatne akcje monitorowania, akcje związane z monitorowaniem w bazie danych.
Zarządzanie użytkownikami i rolami MongoDB
Możesz utworzyć użytkownika, a następnie przypisać go do wbudowanych ról, na przykład w następujący sposób:
db.createUser( {
user: "admin",
pwd: "thisIspasswordforAdmin",
roles: [ { role: "root", db: "admin" } ]
} );
W powyższym skrypcie, co oznacza, że administrator zostanie utworzony z hasłem, które zostało zdefiniowane za pomocą wbudowanych ról root, gdzie rola jest zawarta w kategorii Superuser.
Poza tym możesz przypisać użytkownikowi więcej niż jedną rolę, oto przykład:
db.createUser(
{user:'businessintelligence',
pwd:'BIpassw0rd',
roles:[{'role':'read', 'db':'oltp'}, { 'role':'readWrite', 'db':'olapdb'}]
});
Użytkownicy Business Intelligence mają 2 role, najpierw role odczytu w bazie danych oltp i role readWrite w bazie danych olapdb.
Do tworzenia ról zdefiniowanych przez użytkownika można użyć polecenia db.createRole(). Musisz określić cel tworzenia roli, aby móc określić, jakie działania będą w tej roli. Poniżej znajduje się przykład tworzenia roli do monitorowania bazy danych Mongodb:
use admin
db.createRole(
{
role: "RoleMonitoring",
privileges: [
{ resource: { cluster: true }, actions: [ "serverStatus" ] }
],
roles: []
}
)
Następnie możemy przypisać zdefiniowaną przez użytkownika rolę do użytkownika, którego utworzymy, możemy użyć następującego polecenia:
db.createUser( {
user: "monuser",
pwd: "thisIspasswordforMonitoring",
roles: [ { role: "RoleMonitoring", db: "admin" } ]
} );
Tymczasem, aby przypisać rolę do istniejącego użytkownika, możesz użyć następującego polecenia:
db.grantRolesToUser(
"existingmonuser",
[
{ role: "RoleMonitoring", db: "admin" }
]
)
Aby odwołać istniejącego użytkownika roli, możesz użyć następującego polecenia:
db.revokeRolesFromUser(
"oldmonguser",
[
{ role: "RoleMonitoring", db: "admin" }
]
)
Korzystając z ról zdefiniowanych przez użytkownika, możemy tworzyć role według własnego uznania, zgodnie z działaniami, które podejmiemy na tych rolach, na przykład role ograniczające użytkowników mogą usuwać wiersze tylko z niektórych baz danych.
Wnioski
Stosowanie praw dostępu może poprawić bezpieczeństwo. Mapowanie ról i użytkowników w bazie danych ułatwia zarządzanie dostępem użytkowników.
Upewnij się, że wszystkie te informacje dotyczące ról i praw są odpowiednio udokumentowane przy ograniczonym dostępie do dokumentu. Ułatwia to udostępnianie informacji innym administratorom baz danych lub personelowi pomocy technicznej i jest przydatne podczas audytów i rozwiązywania problemów.