Implementare la sicurezza dinamica mediante i filtri di riga

In questa lezione supplementare verrà creato un ruolo aggiuntivo che implementa la sicurezza dinamica. La sicurezza dinamica offre la sicurezza a livello di riga in base al nome o all'ID di accesso dell'utente attualmente connesso. Per ulteriori informazioni, vedere Ruoli (SSAS tabulare).

Per implementare la sicurezza dinamica, è necessario aggiungere una tabella al modello contenente i nomi degli utenti di Windows che possono creare una connessione al modello come origine dati ed esplorare oggetti modello e dati. Il modello creato in questa esercitazione è nel contesto di Adventure Works Corp. Tuttavia, per completare questa lezione, è necessario aggiungere una tabella contenente gli utenti del proprio dominio. Non saranno necessarie le password dei nomi utente che verranno aggiunti. Per creare una tabella Sicurezza dipendenti con una piccola parte degli utenti del proprio dominio, è possibile utilizzare la funzionalità Incolla per incollare i dati dei dipendenti da un foglio di calcolo di Excel. In uno scenario realistico la tabella che contiene i nomi utente da aggiungere a un modello utilizza in genere una tabella di un database effettivo come origine dati, ad esempio una tabella dimEmployee reale.

Per implementare la sicurezza dinamica, è possibile utilizzare due nuove funzioni DAX: Funzione USERNAME (DAX) e Funzione LOOKUPVALUE (DAX). Queste funzioni applicate in una formula di filtro di riga vengono definite in un nuovo ruolo. Utilizzando la funzione LOOKUPVALUE, la formula specifica un valore della tabella Sicurezza dipendenti, quindi passa il valore alla funzione USERNAME che specifica il nome dell'utente connesso appartenente a questo ruolo. L'utente può quindi esplorare solo i dati specificati dai filtri di riga del ruolo. In questo scenario verrà specificato che i dipendenti addetti alle vendite possono esplorare solo i dati relativi alle vendite Internet per i territori di vendita in cui sono membri.

Per completare questa lezione supplementare, verrà completata una serie di attività. Le attività che sono specifiche di questo scenario di modello tabulare Adventure Works ma che potrebbero non applicarsi necessariamente a uno scenario realistico vengono identificate come tali. Ogni attività include informazioni aggiuntive che descrivono lo scopo dell'attività.

Tempo stimato per il completamento della lezione: 30 minuti

Prerequisiti

Questo argomento della lezione supplementare fa parte di un'esercitazione relativa alla modellazione tabulare che deve essere completata nell'ordine specificato. Prima di eseguire le attività di questa lezione supplementare, è necessario avere completato tutte le lezioni precedenti.

Aggiungere la tabella dimSalesTerritory al progetto AW Internet Sales Tabular Model

Per implementare la sicurezza dinamica per questo scenario di Adventure Works, è necessario aggiungere due tabelle aggiuntive al modello. La prima tabella da aggiungere è dimSalesTerritory (come Territorio vendita) dallo stesso database AdventureWorksDW2012. Successivamente verrà applicato un filtro di riga alla tabella Territorio vendita per definire i dati specifici che l'utente connesso può esplorare.

Per aggiungere la tabella dimSalesTerritory

  1. In SQL Server Data Tools fare clic sul menu Modello, quindi scegliere Connessioni esistenti.

  2. Nella finestra di dialogo Connessioni esistenti verificare che sia selezionata la connessione origine dati Adventure Works DB da SQL, quindi fare clic su Apri.

    Se viene visualizzata la finestra di dialogo Credenziali rappresentazione, digitare le credenziali di rappresentazione utilizzate nella Lezione 2: Aggiungere Dati.

  3. Nella pagina Scelta della modalità di importazione dei dati lasciare selezionata l'opzione Seleziona da un elenco di tabelle e viste per scegliere i dati da importare, quindi fare clic su Avanti.

  4. Nella pagina Selezione tabelle e viste selezionare la tabella DimSalesTerritory.

  5. Nella colonna Nome descrittivo digitare Territorio vendita.

  6. Fare clic su Anteprima e Filtro.

  7. Deselezionare la colonna SalesTerritoryAlternateKey, quindi fare clic su OK.

  8. Nella pagina Selezione tabelle e viste fare clic su Fine.

    La nuova tabella verrà aggiunta all'area di lavoro del modello. Gli oggetti e i dati della tabella dimSalesTerritory di origine verranno quindi importati nella nuova tabella Territorio vendita in AW Internet Sales Tabular Model.

  9. Dopo l'importazione della tabella fare clic su Chiudi.

Assegnare nomi descrittivi alle colonne

In questa attività verranno assegnati nomi descrittivi alle colonne della tabella Territorio vendita. Non è sempre necessario assegnare nomi descrittivi alle tabelle e/o alle colonne. Tale attività semplifica tuttavia la navigazione del progetto di modello in Progettazione modelli nonché l'esplorazione degli oggetti e dei dati del modello in un elenco di campi di un'applicazione client da parte degli utenti.

Per rinominare le colonne nella tabella Territorio vendita

  • In Progettazione modelli rinominare le colonne nella tabella Territorio vendita:

    Territorio vendita

    Nome origine

    Nome descrittivo

    SalesTerritoryKey

    ID territorio vendita

    SalesTerritoryRegion

    Area territorio vendita

    SalesTerritoryCountry

    Paese territorio vendita

    SalesTerritoryGroup

    Gruppo territorio vendita

Aggiungere una tabella con i dati del nome utente

Poiché la tabella dimEmployee nel database di esempio AdventureWorksDW2012 contiene utenti del dominio AdventureWorks e tali nomi utente non esistono nel proprio ambiente, è necessario creare una tabella nel modello contenente una piccola parte degli utenti effettivi dell'organizzazione, ad esempio tre utenti. Tali utenti verranno quindi aggiunti come membri al nuovo ruolo. Non sono necessarie le password per i nomi utente di esempio, ma saranno necessari nomi utente di Windows effettivi presenti nel proprio dominio.

Per aggiungere una tabella Sicurezza dipendenti

  1. Aprire Microsoft Excel creando un nuovo foglio di lavoro.

  2. Copiare la tabella seguente, inclusa la riga di intestazione, quindi incollarla nel foglio di lavoro.

    ID dipendente

    ID territorio vendita

    Nome

    Cognome

    ID di accesso

    1

    2

    <nome dell'utente>

    <cognome dell'utente>

    <dominio\nomeutente>

    1

    3

    <nome dell'utente>

    <cognome dell'utente>

    <dominio\nomeutente>

    2

    4

    <nome dell'utente>

    <cognome dell'utente>

    <dominio\nomeutente>

    3

    5

    <nome dell'utente>

    <cognome dell'utente>

    <dominio\nomeutente>

  3. Nel nuovo foglio di lavoro sostituire il nome, il cognome e il dominio\nomeutente con i nomi e gli ID di accesso dei tre utenti dell'organizzazione. Inserire lo stesso utente nelle prime due righe per ID dipendente 1, a indicare che tale utente appartiene a più territori di vendita. Lasciare i campi ID dipendente e ID territorio vendita così come sono.

  4. Salvare il foglio di lavoro come Dipendente di esempio.

  5. Nel foglio di lavoro, selezionare tutte le celle con i dati dei dipendenti, incluse le intestazioni, fare clic con il pulsante destro del mouse sui dati selezionati, quindi scegliere Copia.

  6. In SQL Server Data Tools, scegliere Incolla dal menu Modifica.

    Se Incolla è disattivato, ovvero visualizzato in grigio, fare clic su una colonna di qualsiasi tabella nella finestra Progettazione modelli, quindi scegliere Incolla dal menu Modifica.

  7. Nella finestra di dialogo Anteprima Incolla digitare Sicurezza dipendenti in Nome tabella.

  8. In Dati da incollare verificare che i dati includano tutti i dati dell'utente e le intestazioni del foglio di lavoro Dipendente di esempio.

  9. Verificare che Utilizza la prima riga per le intestazioni di colonna sia selezionata, quindi fare clic su OK.

    Verrà creata una nuova tabella denominata Sicurezza dipendenti con i dati dei dipendenti copiati dal foglio di lavoro Dipendente di esempio.

Creare relazioni tra le tabelle Vendite Internet, Geografia e Territorio vendita

Le tabelle Vendite Internet, Geografia e Territorio vendita contengono tutte una colonna comune, ID territorio vendita. La colonna ID territorio vendita nella tabella Territorio vendita contiene i valori che specificano un ID diverso per ogni territorio di vendita.

Per creare relazioni tra le tabelle Vendite Internet, Geografia e Territorio vendita

  1. Nella tabella Geografia in Vista diagramma di Progettazione modelli fare clic e tenere premuto il pulsante del mouse sulla colonna ID territorio vendita, quindi trascinare il cursore nella colonna ID territorio vendita della tabella Territorio vendita e infine rilasciare il pulsante del mouse.

  2. Nella tabella Vendite Internet fare clic e tenere premuto il pulsante del mouse sulla colonna ID territorio vendita, quindi trascinare il cursore nella colonna ID territorio vendita della tabella Territorio vendita e infine rilasciare il pulsante del mouse.

    Si noti che la proprietà Active di questa relazione è False, a indicare che non è attiva, poiché la tabella Vendite Internet già contiene un'altra relazione attiva utilizzata nelle misure.

Nascondere la tabella Sicurezza dipendenti alle applicazioni client

In questa attività verrà nascosta la tabella Sicurezza dipendenti impedendone la visualizzazione in un elenco di campi di un'applicazione client. Tenere presente che nascondere una tabella non significa proteggerla. Gli utenti possono ancora eseguire una query sui dati della tabella Sicurezza dipendenti se sanno come fare. Per proteggere i dati della tabella Sicurezza dipendenti, impedendo agli utenti di potervi eseguire una query, verrà applicato un filtro in un'attività successiva.

Per nascondere la tabella Dipendente alle applicazioni client

  • In Vista diagramma di Progettazione modelli, fare clic con il pulsante destro del mouse sull'intestazione della tabella Dipendente, quindi scegliere Nascondi a strumenti client.

Creare un ruolo utente Addetti alle vendite per territorio

In questa attività verrà creato un nuovo ruolo utente. Questo ruolo includerà un filtro di riga che definisce le righe della tabella Territorio vendita visibili agli utenti. Il filtro viene quindi applicato nella direzione della relazione uno-a-molti a tutte le altre tabelle correlate alla tabella Territorio vendita. Verrà inoltre applicato un semplice filtro per proteggere l'intera tabella Sicurezza dipendenti impedendone l'esecuzione di query da parte di tutti gli utenti membri del ruolo.

[!NOTA]

Il ruolo Addetti alle vendite per territorio creato in questa lezione consente ai membri di esplorare o eseguire query solo sui dati di vendita relativi al territorio di vendita a cui appartengono. Se si aggiunge un utente come membro al ruolo Addetti alle vendite per territorio presente anche come membro in un ruolo creato nella Lezione 12: Creare ruoli, si otterrà una combinazione di autorizzazioni. Se un utente è membro di più ruoli, le autorizzazioni e i filtri di riga definiti per ogni ruolo sono cumulativi, ovvero l'utente disporrà di maggiori autorizzazioni determinate dalla combinazione dei ruoli.

Per creare un ruolo utente Addetti alle vendite per territorio

  1. In SQL Server Data Tools, scegliere Ruoli dal menu Modello.

  2. Nella finestra di dialogo Gestione ruoli fare clic su Nuovo.

    All'elenco verrà aggiunto un nuovo ruolo con l'autorizzazione Nessuno.

  3. Fare clic sul nuovo ruolo, quindi nella colonna Nome rinominare il ruolo in Addetti alle vendite per territorio.

  4. Nella colonna Autorizzazioni fare clic nell'elenco a discesa, quindi selezionare l'autorizzazione Lettura.

  5. Fare clic sulla scheda Membri, quindi su Aggiungi.

  6. Nella finestra di dialogo Seleziona utente o gruppo in Immettere i nomi degli oggetti da selezionare digitare il primo nome utente di esempio utilizzato per la creazione della tabella Sicurezza dipendenti. Fare clic su Controlla nomi per verificare che il nome utente sia valido, quindi fare clic su OK.

    Ripetere questo passaggio aggiungendo gli altri nomi utente di esempio utilizzati per la creazione della tabella Sicurezza dipendenti.

  7. Fare clic sulla scheda Filtri di riga.

  8. Per la tabella Sicurezza dipendenti nella colonna Filtro DAX digitare la formula seguente.

    =FALSE()

    Dopo avere completato la compilazione della formula, premere INVIO.

    Questa formula specifica che tutte le colonne vengono risolte nella condizione booleana false. Pertanto, non sarà possibile eseguire query in alcuna colonna della tabella Sicurezza dipendenti da parte dei membri del ruolo utente Addetti alle vendite per territorio.

  9. Per la tabella Territorio vendita digitare la formula seguente.

    ='Territorio vendita'[ID territorio vendita]=LOOKUPVALUE('Sicurezza dipendenti'[ID territorio vendita], 'Sicurezza dipendenti'[ID di accesso], USERNAME(), 'Sicurezza dipendenti'[ID territorio vendita], 'Territorio vendita'[ID territorio vendita])

    Dopo avere completato la compilazione della formula, premere INVIO.

    In questa formula la funzione LOOKUPVALUE restituisce tutti i valori per la colonna Sicurezza dipendenti[ID territorio vendita], dove Sicurezza dipendenti[ID di accesso] corrisponde al nome utente di Windows attualmente connesso e Sicurezza dipendenti[ID territorio vendita] corrisponde a Territorio vendita[ID territorio vendita].

    Il set di ID territorio vendita restituito da LOOKUPVALUE viene quindi utilizzato per limitare le righe visualizzate nella tabella Territorio vendita. Verranno visualizzate solo le righe il cui ID territorio vendita è presente nel set di ID restituito dalla funzione LOOKUPVALUE.

  10. Nella finestra di dialogo Gestione ruoli fare clic su Ok.

Testare il ruolo utente Addetti alle vendite per territorio

In questa attività verrà utilizzata la funzionalità Analizza in Excel di SQL Server Data Tools per testare l'efficacia del ruolo utente Addetti alle vendite per territorio. Specificare uno dei nomi utente aggiunti nella tabella Sicurezza dipendenti come membro del ruolo. Questo nome utente verrà quindi utilizzato come nome utente effettivo nella connessione creata tra Excel e il modello.

Per testare il ruolo utente Addetti alle vendite per territorio

  1. In SQL Server Data Tools, fare clic sul menu Modello, quindi scegliere Analizza in Excel.

  2. Nella finestra di dialogo Analizza in Excel in Specificare il nome utente o il ruolo da utilizzare per la connessione al modello selezionare Altro utente di Windows, quindi fare clic su Sfoglia.

  3. Nella finestra di dialogo Seleziona utente o gruppo in Immettere i nomi degli oggetti da selezionare digitare uno dei nomi utente inclusi nella tabella Dipendente, quindi fare clic su Controlla nomi.

  4. Fare clic su OK per chiudere la finestra di dialogo Seleziona utente o gruppo, quindi fare clic su OK per chiudere la finestra di dialogo Analizza in Excel.

    Verrà aperto Excel con una nuova cartella di lavoro. Verrà creata automaticamente una tabella pivot. L'elenco di campi tabella pivot include la maggior parte dei campi dati disponibili nel nuovo modello.

    Si noti che la tabella Sicurezza dipendenti non è visibile nell'elenco di campi tabella pivot in quanto in un'attività precedente si è scelto di nascondere questa tabella agli strumenti client.

  5. Nell'elenco Campo tabella pivot in ∑ Internet Sales (misure) selezionare la misura Internet Total Sales. La misura verrà immessa nei campi Valori.

  6. Nell'elenco Campo tabella pivot selezionare la colonna ID territorio vendita della tabella Territorio vendita. La colonna verrà immessa nei campi Etichette di riga.

    Si noti che le cifre delle vendite Internet vengono visualizzate solo per l'area a cui appartiene il nome utente effettivo utilizzato. Se si seleziona un'altra colonna, ad esempio Città della tabella Geografia, come campo Etichette di riga, verranno visualizzate solo le città del territorio di vendita a cui appartiene l'utente effettivo.

    Questo utente non può esplorare né eseguire una query sui dati delle vendite Internet per territori diversi da quello a cui appartiene poiché il filtro di riga definito per la tabella Territorio vendita nel ruolo utente Addetti alle vendite per territorio protegge in effetti tutti i dati correlati agli altri territori di vendita.

Vedere anche

Riferimento

Funzione USERNAME (DAX)

Funzione LOOKUPVALUE (DAX)

Funzione CUSTOMDATA (DAX)