I ruoli "speciali" dovrebbero esistere in un sistema ARO?

0

In questo momento stiamo implementando un sistema di autorizzazioni basato sui ruoli (onestamente eccessivamente complesso) in cui gli utenti verranno assegnati ai ruoli e a quei ruoli verranno concesse le autorizzazioni su alcune combinazioni di risorse. Abbastanza tradizionale, e penso che sia abbastanza semplice implementare il database collegando una tabella di users con una tabella di roles collegata a una tabella di permissions , che hanno un riferimento al tipo di risorsa che sono un'autorizzazione per e una semplice maschera di bit che identifica le autorizzazioni CRUD che sono state concesse.

Detto questo, abbiamo coinvolto due casi limite:

  • Innanzitutto, ci sono utenti amministratori che dispongono di autorizzazioni univoche che non possono essere concesse agli utenti. Alcune di queste sono caratteristiche specifiche che non si adattano perfettamente alle tabelle e alle risorse del database e sono specificamente disponibili solo per gli utenti amministratori
  • In secondo luogo, poiché siamo un sistema multi-tenant, abbiamo un gruppo di utenti interni che possono accedere a qualsiasi database. Mentre gli utenti del locatario siedono tutti nello stesso database dei dati del titolare, questi supportano tutti gli utenti in un database separato; altrimenti agiscono come utenti amministratori, occasionalmente con autorizzazioni aggiuntive specificamente disponibili solo a loro (di nuovo)

Normalmente il livello di specificità richiesto per questi utenti mi fa desiderare di spostare i ruoli nel codice dell'applicazione, ma non posso farlo perché gli inquilini devono essere in grado di gestire e assegnare i propri ruoli, fino al creazione di nuovi amministratori. Ciò che si riduce a questo è che gli utenti probabilmente finiranno per avere una combinazione di ruoli e controllo degli accessi basato sugli attributi in atto: ruoli per la maggior parte degli utenti, ricerca di attributi per casi speciali. Quindi fondamentalmente ibridazione di ARO e controllo degli accessi basato sugli attributi.

La mia soluzione alternativa qui è quella di creare ruoli hardcoded nel database, potenzialmente riservando i primi ~ 10 o più ID nella mia tabella roles per ruoli "speciali" con comportamento hardcoded. Che si sente anche cattivo.

Quale approccio dovrei adottare? O meglio ancora, esiste un approccio alternativo a cui non avevo ancora pensato?

    
posta moberemk 24.08.2015 - 22:05
fonte

2 risposte

1

È preferibile controllare qualsiasi tipo di azione dell'utente allo stesso modo. Amministratori come semplici utenti (non dirglielo, l'ho detto :-)), solo con un insieme diverso di permessi.

Forse queste autorizzazioni non si adattano al modello di autorizzazioni corrente perché il modello viene applicato solo alle azioni di base del database.

Un sistema di autorizzazioni implica di più. Qualsiasi azione non consentita da tutti gli utenti dovrebbe essere regolata dal sistema di autorizzazione. Ciò include azioni come la possibilità di visualizzare o esportare dati.

E se alcuni utenti possono eludere l'applicazione e accedere direttamente al database, qualsiasi modifica o accesso importanti devono essere acquisiti in dati di controllo che non possono essere modificati dalla stessa persona.

Un sistema più complesso include anche il contenuto dei dati. A volte un utente può eseguire solo una funzione su parte dei dati.

Memorizzare le autorizzazioni direttamente nel codice mi sembra una cattiva idea. Non è possibile modificare in fase di esecuzione e occorre prestare particolare attenzione quando si apportano modifiche al codice per assicurarsi che le autorizzazioni siano applicate in tutte le situazioni.

Suggerisco di esaminare un sistema di autorizzazione che copra tutte le azioni di tutti i tipi di utenti nello stesso modo.

Ciò potrebbe comportare la necessità di cambiare il sistema che deve essere controllato.

    
risposta data 24.08.2015 - 22:55
fonte
0

In questo caso vorrei andare con la soluzione ibrida.

Come dici tu, le altre opzioni essenzialmente codificano le autorizzazioni speciali in un modo o nell'altro.

In questo caso esaminerei lo schema di sicurezza impostato nella maggior parte dei sistemi DBMS:

  • Gli utenti possono ottenere autorizzazioni specifiche su tabelle in database specifici
  • Gli utenti possono ottenere autorizzazioni specifiche sul sistema nel suo complesso
  • Gli utenti possono ottenere il diritto di concedere autorizzazioni specifiche ad altri utenti (Questo potrebbe o non potrebbe essere utile per il tuo sistema specifico.)

La maggior parte dei sistemi di DBMS relazionali utilizzano tabelle di sistema che memorizzano tutte le informazioni sugli account utente e le autorizzazioni, quindi sarebbe abbastanza facile dare un'occhiata e imparare da.

    
risposta data 22.03.2016 - 10:10
fonte

Leggi altre domande sui tag