Cześć, zacząłem trochę bawić się z MongoDB. Założyłem sobie użytkownika i nadałem mu uprawnienia na utworzoną dla niego bazę ale zauważyłem, że użytkownik pomimo uprawnień do jednej bazy danych może wykonywać operacje na innych bazach, kroki które wykonałem:

  1. Uruchamiam MongoDB poleceniem 'mongo' w bin
  2. Tworzę bazę 'use testdb'
  3. Tworzę użytkownika będąc przyłączonym na bazie testdb:
db.createUser(
	{
		user:"testdbadmin",
		pwd:"testdbadmin123",
		roles: 
			[
				{role:"dbAdmin", db:"testdb"}
			]
	}
)

Dostaję komunikat że użytkownik został założony poprawnie
4. Loguje się utworzonym użytkownikiem db.auth('testdbadmin','testdbadmin123'), dostaje odp 1(sukces)
5. Po wykonaniu show databases; widzę inne bazy i mogę się na nie przełączać i tworzyć na nich kolekcje, dodawać dokumenty

Czy ktoś może mi wyjaśnić dlaczego tak się dzieje? Być może źle tworzę tego użytkownika ale skoro dałem mu uprawnienia do testdb to chyba powinien mieć tylko dostęp do tej bazy.
Dodam że jak wykonam polecenie: db.runCommand( { connectionStatus: 1} ) to w wyniku dostaje

{                                                      
        "authInfo" : {                                 
                "authenticatedUsers" : [               
                        {                              
                                "user" : "testdbadmin",
                                "db" : "testdb"        
                        }                              
                ],                                     
                "authenticatedUserRoles" : [           
                        {                              
                                "role" : "dbAdmin",    
                                "db" : "testdb"        
                        }                              
                ]                                      
        },                                             
        "ok" : 1                                       
}         

Czyli tak jak bym był zalogowany na mojego usera, pomimo to on widzi inne bazy i może wykonywać na nich operacje.