Permessi e diritti sugli oggetti protetti

Questo documento presenta il modello di sicurezza basato su oggetti del server: oggetti sicuri, permessi, flag mask, permessi e rifiuti, gruppi, condivisioni interne e permessi forniti durante l'installazione.

1. Panoramica

Il sistema risponde alla seguente domanda:

Un dato utente ha un permesso dato su un determinato oggetto business?

Collega quattro concetti.

Concetto Classe principale Ruolo
Beneficiario DomainSecurityObject Un utente, un gruppo o un altro principio di sicurezza a cui può essere assegnato un diritto.
Bersaglio SecurizedObject Un riferimento di sicurezza all'oggetto commerciale protetto.
Permesso Permission Un'azione testabile per un tipo di oggetto, rappresentata da una maschera di bit.
Diritto Right Associarsi tra un destinatario e un bersaglio, con una maschera consentita e una disapprovata.

Un diritto può quindi essere letto come segue:

Il gruppo Operators Riceve bandiere autorizzate 0x13 e bandiere rifiutate 0x04 sull'attrezzatura 42.

Il server non cerca solo un diritto direttamente portato dall'utente. Tiene anche conto delle sue appartenenze ai gruppi, inclusi i gruppi annidati. Un rifiuto applicabile viene valutato prima delle autorizzazioni.

2. Il principio di SecurizedObject

2.1 Un riferimento di sicurezza, non l'oggetto aziendale

SecurizedObject è una voce leggera nel modello di sicurezza che designa un bersaglio con due valori:

Proprietà Significato
Identifier L'identificatore dell'istanza aziendale.
ObjectType Un identificatore stabile del suo tipo, solitamente un valore di ImmersiveObjectType.

La vera chiave è la coppia (Identifier, ObjectType). Ad esempio:

Oggetto di Lavoro ObjectType Identifier Bersaglio di sicurezza
Mappa 48 Map, oppure 15 48 (48, 15)
Ambito di supervisione 48 SupervisionScope, oppure 48 48 (48, 48)

Il numero 48 può quindi essere simultaneamente un identificatore di istanza e un identificatore di tipo. Queste due informazioni devono sempre essere visualizzate e trasmesse separatamente.

Per ulteriori informazioni, consulta il Catalogo ImmersiveObjectType.

2.2 Relazione con l'oggetto aziendale

Il SecurizedObject non contiene il nome, la descrizione o le proprietà aziendali. È un puntatore a un oggetto sicuro ospitato altrove. SecurizedObject Porta solo la collezione di Right applicabile al target. L'oggetto di business rimane nel proprio database.

Questa separazione permette al motore di sicurezza di proteggere più famiglie di oggetti senza dipendere dalle loro classi concrete.

2.3 Quando un tipo è considerato sicuro?

Il calcolo centrale include il Permission di SecurizedObjectTypeQuando non esistono permessi per un tipo, il sistema di sicurezza considera che questo tipo non richieda il filtraggio dei diritti. Gli oggetti di questo tipo sono quindi accessibili senza limitazioni e controlli di sicurezza.

Quando almeno un permesso è configurato, il tipo entra nel calcolo di sicurezza che valuta i permessi di ciascun target richiesto in termini di permessi e divieti accanto al beneficiario.

3. Il principio del permesso

A Permission descrive un'azione nota per un tipo di oggetto. Non fornisce l'accesso autonomamente. Fornisce il vocabolario usato da Right e dai controllori.

Proprietà Ruolo
Identifier L'identificatore del permesso nel suo tipo oggetto. La chiave EF completa è (Identifier, SecurizedObjectType).
SecurizedObjectType Il tipo di oggetto a cui si applica il permesso. Un permesso di carta non deve essere usato sull'apparecchiatura.
Name Il nome mostrato e usato per comprendere l'azione.
Description Spiegazione funzionale del permesso.
Flag Maschera che deve essere presente in AuthorizedFlags concedere il permesso.
DeniedFlag Maschera cercata DeniedFlags. Quando è assente, il server usa Flag.

Il nome e la descrizione di un permesso esistente possono cambiare. Suono Flag e il suo DeniedFlag sono volontariamente immutabili nell'amministrazione quotidiana.

4. Capire le bandiere

4.1 Una maschera di Bit

Un flag è un intero in cui ogni bit rappresenta un'abilità elementare. L'operatore binario OU, scritto |, combina diversi valori.

Espressione Decimale Esadecimale Bit posizionati
1 1 0x1 bit 0
0x3 3 0x3 bit 0 e 1
1 | 5 5 0x5 bit 0 e 2
0x3 | 65 67 0x43 bit 0, 1 e 6

Il tester modale di permesso accetta tutte e quattro queste forme.

4.2 Test di un permesso autorizzato

Un permesso è consentito quando tutti i bit di suono Flag sono presenti in AuthorizedFlags :

(authorizedFlags & permission.Flag) == permission.Flag

Esempi con permessi di mappa:

AuthorizedFlags del beneficiario Permesso testato Flag Richiesto Risultato
0x3 See Map 0x3 Permesso.
0x3 Modify Map 0x5 Rifiutato: il bit 0x4 mancante.
0x43 See Map 0x3 Permesso.
0x43 Edit All 0x40 Permesso.
0x43 Modify Map 0x5 Rifiutato: il bit 0x4 mancante.

4.3 Bandierine singole e composite

Non tutti i valori del catalogo sono potenze indipendenti di due. Diversi permessi utilizzano una maschera composita che include un pad di lettura:

  • 3, oppure 1 | 2 ;
  • 5, oppure 1 | 4 ;
  • 11, oppure 1 | 2 | 8 ;
  • 19, oppure 1 | 2 | 16 ;
  • 35, oppure 1 | 2 | 32.

Pertanto, autorizzazione See Map con la maschera 3 consente anche il Read Map con la maschera 1. D'altra parte, Modify Map con la maschera 5 non include il 2 di See Map.

Esempio

Come leggere questa immagine

Un numero binario si scrive solo con 0 e 1 :

  • 0 Significa che la capacità della colonna è disabilitata.
  • 1 significa che la capacità della colonna è abilitata.

Partendo da destra, ogni colonna vale il doppio rispetto alla precedente:

Posizione binaria 128 64 32 16 8 4 2 1
Valore quando il bit è attivo 128 64 32 16 8 4 2 1

Per scoprire il valore decimale, basta sommare le colonne contenenti 1.

Esempio dettagliato: perché 35 vale 100011

Il numero 35 Abilita le colonne 32, 2 e 1 :

Valore della colonna 128 64 32 16 8 4 2 1
Un po' di 35 0 0 1 0 0 0 1 1

Otteniamo quindi:

35 = 32 + 2 + 1
35 = 00100011 en binaire

Lo stesso calcolo può essere presentato come un semplice assemblaggio di flag con l'operatore | :

32  = 00100000
 2  = 00000010
 1  = 00000001
----------------  OU binaire
35  = 00100011

L'operatore | quindi mantiene ogni bit attivo incontrato. Non concatena i numeri: crea una maschera contenente tutte le capacità selezionate.

Leggere le altre righe

Decimale Decomposizione Scrittura binaria a 8 bit
3 2 + 1 00000011
5 4 + 1 00000101
11 8 + 2 + 1 00001011
19 16 + 2 + 1 00010011
35 32 + 2 + 1 00100011

Ad esempio, il permesso di test 35 è lo stesso che verificare che i diritti contengano i bit 32, 2 e 1 :

(droits & 35) == 35

Se manca solo uno di questi tre bit, il 35 non viene concesso.

I valori 32, 2 e 1 corrispondono a tre permessi, quindi 35 li attiva tutti.

Alcuni permessi, inclusi come standard in Immersive, coprono tutti i bit di basso peso necessari per indirizzare tutti i permessi.

Maschera Valore Uso comune
0xF 15 Spazio di lavoro, cartella e SupervisionScope. Copre le quattro parti a basso peso.
0xFFFFFF 16777215 Mappa, WorldView e Attrezzature. Copre i ventiquattro pezzi a basso peso.

FullControl non è una parola chiave speciale del motore. È un permesso ordinario la cui maschera contiene le abilità previste per il tipo. Se un permesso futuro utilizza un po' esterno alla maschera FullControl, non sarà automaticamente incluso.

5. AuthorizedFlags, DeniedFlags e priorità di rifiuto

5.1 Contenuto di un Right

A Right Associa un beneficiario a un obiettivo:

Proprietà Significato
DomainSecurityObjectIdentifier Gruppo di utenti o beneficiari.
SecurizedObjectIdentifier L'identificatore dell'istanza protetta.
SecurizedObjectType Il tipo di istanza protetta.
AuthorizedFlags Maschera delle abilità concesse.
DeniedFlags Si nasconde esplicitamente negando le abilità.

Più permessi sono raggruppati in un unico diritto con l'operatore |.

right.AuthorizedFlags = existingAuthorizedFlags | permission.Flag;
right.DeniedFlags = existingDeniedFlags | deniedFlag;

Un valore assente è trattato come 0.

5.2 Ruolo di DeniedFlag

Per testare un rifiuto, il server utilizza:

int deniedFlag = permission.DeniedFlag ?? permission.Flag;
bool denied = (deniedFlags & deniedFlag) == deniedFlag;

Sulle mappe, i permessi compositi tipicamente hanno un DeniedFlag elementare. Per esempio, Modify Map Applicazione Flag = 5, o il 1 + 4, ma rifiuta con DeniedFlag = 4. Il bit di lettura comune quindi non deve essere ripetuto nella maschera di negazione.

5.3 Ordine decisionale

Il calcolo centrale segue il seguente ordine:

  1. Il cervello è consentito senza ulteriori calcoli.
  2. Il server risolve il target in base al suo ID e tipo.
  3. Cerca un declino che si applichi direttamente all'utente o a uno dei suoi gruppi.
  4. Se viene riscontrato un rifiuto, il risultato è immediatamente rifiutato.
  5. In assenza di un rifiuto, cerca un'autorizzazione diretta o un'autorizzazione ereditata da un gruppo.
  6. Una condivisione interna attiva può aggiungere permessi, ma mai bypassare un rifiuto esplicito.
  7. In assenza di autorizzazione esplicito, il risultato è Negato per default.

L'amministrazione impedisce inoltre che un permesso simultaneamente consentito e negato venga memorizzato nella stessa mutazione. Flag negativi e bit sconosciuti per il tipo di oggetto vengono rifiutati.

6. Diritti diretti, gruppi, diritti automatici e condivisione

6.1 Diritto diretto

Il DomainSecurityObjectIdentifier di un Right può designare direttamente un utente. Il diritto allora avvantaggia solo quell'utente.

6.2 Diritto al gruppo

Il DomainSecurityObjectIdentifier di un Right può anche essere un gruppo. Il sistema di sicurezza attraversa le appartenenze in modo ricorsivo: un utente che è membro di un gruppo e di un altro gruppo eredita i diritti del gruppo genitore. Le credenziali visitate in precedenza vengono ricordate per evitare un ciclo infinito in presenza di un ciclo di gruppo.

6.3 Diritto Automatico

Uno stato di diritto automatico non costituisce un secondo meccanismo di autorizzazione. Quando un oggetto viene creato o regolarizzato, esso risolve il suo beneficiario e poi crea o completa un Right ordinario.

Le variabili attualmente previste nei nomi distinti sono:

  • {CurrentUserDistinguishedName} ;
  • {SubDomainName} ;
  • {SubDomainDistinguishedName}.

Una regola di autorizzazione aggiunge il Flag del suo permesso AuthorizedFlags. Una regola di negazione aggiunge il suo DeniedFlag, o il suo Flag In mancanza di ciò, DeniedFlags.

6.4 Condivisione Interna

Una condivisione a un utente o gruppo interno può aggiungere le flag che porta al calcolo centrale quando è attiva, non revocata, avviata e non scaduta.

La condivisione non permette:

  • per eludere un rifiuto esplicito;
  • amministrare a sua volta i diritti dell'oggetto;
  • per introdurre una maschera che non esiste nel catalogo del tipo.

I link di condivisione esterni non partecipano al calcolo di autorizzazione di un utente autenticato.

7. Permessi aziendali di base forniti

Questa sezione descrive i permessi persistiti dalle migrazioni di installazione. Le etichette presentate da un'istanza possono quindi essere modificate in /Security/Configuration.

7.1 Mappe — Map, tipo 15

Permesso di base Bandiera ammessa Bandiera di rifiuto Ruolo
Read Map 1 / 0x1 1 Leggi le proprietà della mappa.
See Map 3 / 0x3 2 / 0x2 Consulta il contenuto della mappa.
Modify Map 5 / 0x5 4 / 0x4 Modifica le proprietà della mappa.
Edit Topography 11 / 0xB 8 / 0x8 Cambia la topografia.
Edit Points of interest 19 / 0x13 16 / 0x10 Gestisci i punti di interesse.
Edit equipments 35 / 0x23 32 / 0x20 Gestisci l'equipaggiamento posizionato sulla mappa.
Edit All 64 / 0x40 64 / 0x40 Gestisci globalmente i contenuti associati alla mappa.
Full control on map 16777215 / 0xFFFFFF Stessa maschera Pieno controllo sulle capacità nei primi ventiquattro bit.

7.2 Visioni del mondo — WorldView, tipo 25

Permesso di base Bandiera ammessa Bandiera di rifiuto Ruolo
Read WorldView 1 / 0x1 1 Leggi le proprietà della visione del mondo.
See WorldView 3 / 0x3 2 / 0x2 Guarda il contenuto della visione del mondo.
Modify WorldView 5 / 0x5 4 / 0x4 Modifica le sue proprietà.
Edit WorldView 11 / 0xB 8 / 0x8 Modifica i contenuti associati alla visione del mondo.
Full control on WorldView 16777215 / 0xFFFFFF Stessa maschera Controllo totale.

7.3 Equipaggiamento — Equipment, tipo 18

Permesso di base Bandiera ammessa Bandiera di rifiuto Ruolo
Read Equipment 1 / 0x1 1 Leggi le proprietà dell'attrezzatura.
See Equipment instances 3 / 0x3 2 / 0x2 Visualizza le istanze dell'attrezzatura.
Modify Equipment 5 / 0x5 4 / 0x4 Modifica le proprietà dell'equipaggiamento.
Edit Equipment instances 11 / 0xB 8 / 0x8 Modifica le istanze.
ControlInstanceHandles 19 / 0x13 16 / 0x10 Cambia i valori degli handle delle istanza.
Full control on Equipment 16777215 / 0xFFFFFF Stessa maschera Controllo totale.

7.4 Spazi di lavoro — Workspace, tipo 37

Permesso di base Bandiera ammessa Bandiera di rifiuto Ruolo
See Workspace 1 / 0x1 Stessa maschera Rendi visibile lo spazio di lavoro.
Read Workspace 3 / 0x3 Stessa maschera Leggi lo spazio di lavoro.
Modify Workspace 5 / 0x5 Stessa maschera Modifica lo spazio di lavoro.
Execute Workspace 11 / 0xB Stessa maschera Gestisci lo spazio di lavoro.
Full control on Workspace 15 / 0xF Stessa maschera Pieno controllo dello spazio di lavoro.

7.5 Record — Folder, tipo 38

Permesso di base Bandiera ammessa Bandiera di rifiuto Ruolo
See folder 1 / 0x1 Stessa maschera Vedi il dossier.
See folder content 3 / 0x3 Stessa maschera Consulta il contenuto.
Modify folder 5 / 0x5 Stessa maschera Cambia nome e proprietà della cartella.
Modify folder content 11 / 0xB Stessa maschera Aggiungi o modifica i suoi contenuti.
Full control on folder 15 / 0xF Stessa maschera Leggi, modifica, popolare e cancellare la cartella.

7.6 Ambiti di Supervisione — SupervisionScope, tipo 48

Permesso di base Bandiera ammessa Bandiera di rifiuto Ruolo
See supervision scope 1 / 0x1 Stessa maschera Vedi l'ambito della supervisione.
Read supervision scope 3 / 0x3 Stessa maschera Leggi il contenuto.
Modify supervision scope 7 / 0x7 Stessa maschera Cambia ambito.
Oversee supervision scope 11 / 0xB Stessa maschera Supervisiona gli elementi collegati al telescopio.
Full control on supervision scope 15 / 0xF Stessa maschera Controllo totale.

7.7 OrganizationalUnit, tipo 12

Permesso Bandiera Ruolo descritto dal seme
Read 1 Leggi proprietà e soci.
Modify 3 Modifica proprietà o metadati.
Manage 5 Aggiungi o rimuovi i membri.
FullControl 16777215 / 0xFFFFFF Controllo totale.

8. Esempio completo di calcolo

Consideriamo la mappa Identifier = 42, quindi il bersaglio (42, Map).

  • Il gruppo MapEditors ha AuthorizedFlags = 0x5 : i suoi membri hanno Read Map e Modify Map.
  • Il gruppo MapViewers ha AuthorizedFlags = 0x3 : i suoi membri hanno Read Map e See Map.
  • Il gruppo RestrictedMaps ha DeniedFlags = 0x4 : i suoi membri sono rifiutati Modify Map, la cui DeniedFlag vale 4.
  • Alice appartiene a tutti e tre i gruppi.

Risultato:

Permesso testato Risultato Spiegazione
Read Map Permesso Gruppi MapEditors e MapViewers contenere il flag richiesto 1.
See Map Permesso MapViewers contiene la maschera autorizzata 3 e nessun rifiuto 2 non si applica.
Modify Map Rifiutato MapEditors Permette le mascherine 5, ma RestrictedMaps Rifiuta il morso 4. Il rifiuto ha la priorità.
Edit Topography Negato per default Nessun dovere applicabile contiene la maschera autorizzata 11.

9. Regole da ricordare

  • A Permission descrive un'azione; a Right Concede o nega la richiesta su un bersaglio.
  • A SecurizedObject viene identificato dalla coppia tipo e identificatore.
  • Le bandiere possono essere combinate con | e si mettono alla prova con &.
  • Un permesso composito richiede tutti i bit di suono Flag.
  • DeniedFlag può essere diverso da Flag per isolare la parte che viene effettivamente negata.
  • Qualsiasi rifiuto diretto o ereditato guadagna rispetto ai permessi.
  • Senza l'autorizzazione applicabile, l'accesso viene negato.
  • I gruppi annidati passano i diritti.
  • I compiti automatici producono Right Normali.
  • Una condivisione interna può aggiungere accesso, ma mai sovrascrivere un rifiuto.
  • La maschera di un permesso esistente non deve essere modificata dopo l'uso.