2015-10-02 31 views
6

sto cercando di attuare alcune restrizioni sul mio server MongoDB:permessi MongoDB: limitare l'accesso a due database

Due basi di dati sul mio server dovrebbe essere limitato per quanto riguarda le operazioni di eliminazione/drop - solo un account utente speciale dovrebbe essere consentito di fare così. Tutti gli altri database dovrebbe essere totalmente libero (ovviamente escludendo il database admin):

ho cercato di modellare questa situazione utilizzando due utenti:

 | database A & B | all the other databases | 
--------------------------------------------------------- 
user a | read & write |  read & write  | 
user b |  read-only  |  read & write  | 

Fare tutti leggere tutti i database è facile utilizzando il ruolo readAnyDatabase. Tuttavia, modellando che l'utente b può leggere solo il database A & B ma ha letto & l'accesso in scrittura a tutti gli altri database (compresi i database creati in seguito) mi dà fastidio.

Come può essere implementato questo modello di sicurezza in MongoDB?

+1

Così, in breve si vuole 'B' utente di avere il funzionamento limitata che si legge solo su specifico DB? –

+0

Sì. Ma allo stesso tempo questo utente dovrebbe avere le autorizzazioni complete su tutti gli altri database attualmente esistenti e che esisteranno in futuro (compresi quelli creati dall'utente b). – Robert

risposta

0

Prima di tutto abilitare l'autenticazione nel file di mongodb.conf

auth = true 

Creare un database perm per lo svolgimento di autorizzazioni utente che stiamo andando a creare sotto.

use perm 

quindi creare userb con autorizzazioni di sola lettura per i DatabaseA e DatabaseB

db.createUser(
    { 
     user: "userb", 
     pwd: "12345", 
     roles: [ 
     { role: "read", db: "DatabaseA" }, 
     { role: "read", db: "DatabaseB" } 
     ] 
    } 
) 

userb sarà consentito solo per leggere DatabaseA e DatabaseB resto tutti i database accesso a UtenteB sarà read-write

Ora userb può accedere con il comando sottostante

mongo --port 27017 -u userb -p 12345 --authenticationDatabase perm 
+0

Ha funzionato per me. Grazie. –

+1

userb ha accesso in lettura a DatabaseA e DatabaseB, ma che dire degli altri database? Nella mia domanda ho scritto che ho bisogno di userb per poter accedere agli altri database in lettura e scrittura. Usando l'utenteb come creato dal comando mostrato questo non funziona come utenteb non ha accesso a nessun altro database. – Robert

2

Non è possibile.

È possibile combinare più ruoli e di ereditare da più database, ma:

Quando concesso un ruolo, un utente riceve tutti i privilegi di quel ruolo. Un utente può avere più ruoli contemporaneamente, nel qual caso l'utente riceve l'unione di tutti i privilegi dei rispettivi ruoli.

-

ruoli garantire sempre privilegi e mai limitare l'accesso. Ad esempio, se un utente ha sia letto e readWriteAnyDatabase ruoli su un database, l'accesso maggiore è .

È possibile trovare questi paragrafi in mongodb authorization doc.

Per poter scrivere in lettura su tutti i database futuri, è necessario impostare il ruolo readWriteAnyDatabase in userb. Ciò significa che non è possibile eseguire il downgrade al ruolo read per i database A e B.

Ho paura che sia necessario impostare manualmente i ruoli per il nuovo dbs.