Concedi nega lo stacking delle autorizzazioni


9

Per il ruolo db_denycustomer, voglio solo SELEZIONARE il codice colonna della tabella clienti e nessuno degli altri. Quindi ho fatto questo:

DENY SELECT ON dbo.customer TO db_denycustomer
GRANT SELECT ON dbo.customer (code) TO db_denycustomer

... e funziona benissimo. Freddo! Ma perchè ?

Quello che ho letto negli articoli correlati è che lo stack di autorizzazioni, ma DENYha la precedenza. Al contrario, nel mio caso, sembra che l'ultima "query" di autorizzazione abbia avuto la precedenza. Abbastanza sicuro, se li eseguo in ordine inverso, quest'ultimo DENYnasconde anche la colonna del codice.

Potresti per favore approfondire questo?

Ho anche incluso i valori predefiniti db_datawritere i db_datareaderruoli per l'utente con cui ho provato.

Risposte:


10

Questo è un comportamento documentato fornito per compatibilità con le versioni precedenti. Estratto di documentazione:

Attenzione Un DENY a livello di tabella non ha la precedenza su un GRANT a livello di colonna. Questa incoerenza nella gerarchia delle autorizzazioni è stata preservata per la compatibilità con le versioni precedenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.