Lezione supplementare - Implementare la sicurezza dinamica tramite filtri di riga

Si applica a: SQL Server 2016 e versioni successive Analysis Services Azure Analysis Services Power BI Premium

In questa lezione supplementare verrà creato un ruolo aggiuntivo che implementa la sicurezza dinamica. La sicurezza dinamica offre un meccanismo di protezione a livello di riga basato sul nome utente o sull'ID di accesso dell'utente connesso. Per altre informazioni, vedere Modello.

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 EmployeeSecurity, con un piccolo campione di utenti del proprio dominio, si userà la funzionalità Incolla, incollando i dati dei dipendenti da un foglio Excel foglio di calcolo. 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, usare 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. Usando la funzione LOOKUPVALUE, la formula specifica un valore dalla tabella EmployeeSecurity e quindi passa tale valore alla funzione USERNAME, che specifica che il nome utente dell'utente connesso appartiene 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à specifiche per questo scenario di modello tabulare Adventure Works, non necessariamente applicabili a uno scenario reale verranno identificate come tali. Ogni attività include informazioni aggiuntive che descrivono lo scopo dell'attività.

Tempo stimato per il completamento della lezione: 30 minuti

Prerequisiti

L'argomento di questa lezione supplementare fa parte di un'esercitazione sulla creazione di modelli tabulari, con lezioni che è consigliabile completare nell'ordine indicato. Prima di eseguire le attività in questa lezione supplementare, è necessario avere completato tutte le lezioni precedenti.

Aggiungere la tabella DimSalesTerritory al progetto di modello tabulare AW Internet Sales

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 AdventureWorksDW. Successivamente si applierà un filtro di riga alla tabella SalesTerritory che definisce i dati specifici che l'utente connesso può esplorare.

Per aggiungere la tabella DimSalesTerritory

  1. In SSDT fare clic sul menu Modello e quindi su 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 usate 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 Seleziona tabelle e viste selezionare la tabella DimSalesTerritory .

  5. Fare clic su Anteprima e Filtro.

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

  7. Nella pagina Seleziona tabelle e viste fare clic su Fine.

    La nuova tabella verrà aggiunta all'area di lavoro del modello. Gli oggetti e i dati dalla tabella di origine DimSalesTerritory vengono quindi importati nel modello tabulare AW Internet Sales.

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

Aggiungere una tabella con i dati dei nomi utente

Dato che la tabella DimEmployee nel database di esempio AdventureWorksDW contiene gli utenti dal dominio AdventureWorks e tali nomi utente non esistono nel proprio ambiente, è necessario creare una tabella nel modello che contenga un piccolo campione (tre) di utenti effettivi dell'organizzazione. 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 EmployeeSecurity

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

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

      |EmployeeId|SalesTerritoryId|FirstName|LastName|LoginId|  
      |---------------|----------------------|--------------|-------------|------------|  
      |1|2|<user first name>|<user last name>|\<domain\username>|  
      |1|3|<user first name>|<user last name>|\<domain\username>|  
      |2|4|<user first name>|<user last name>|\<domain\username>|  
      |3|5|<user first name>|<user last name>|\<domain\username>|  
    
  3. Sostituire nome, cognome e dominio\nomeutente con i nomi e gli ID di accesso dei tre utenti dell'organizzazione. Inserire lo stesso utente nelle prime due righe per EmployeeId 1. a indicare che tale utente appartiene a più territori di vendita. Lasciare invariati i campi EmployeeId e SalesTerritoryId.

  4. Salvare il foglio di lavoro come SampleEmployee.

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

  6. In SSDT scegliere Incolla dal menu Modifica.

    Se il comando Incolla è disattivato, fare clic in qualsiasi colonna di qualsiasi tabella nella finestra di progettazione dei modelli e riprovare.

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

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

  9. Verificare che l'opzione Usa la prima riga per le intestazioni di colonna sia selezionata e quindi fare clic su Ok.

    Verrà creata una nuova tabella denominata EmployeeSecurity con i dati dei dipendenti copiati dal foglio di lavoro SampleEmployee.

Creare relazioni tra le tabelle FactInternetSales, DimGeography e DimSalesTerritory

Le tabelle FactInternetSales, DimGeography e DimSalesTerritory contengono tutte una colonna in comune, SalesTerritoryId. La colonna SalesTerritoryId nella tabella DimSalesTerritory contiene i valori con un ID diverso per ogni territorio di vendita.

Per creare relazioni tra le tabelle FactInternetSales, DimGeography e DimSalesTerritory

  1. In Visualizzazione diagramma di Progettazione modelli, nella tabella DimGeography fare clic sulla colonna SalesTerritoryId e quindi trascinare il cursore sulla colonna SalesTerritoryId nella tabella DimSalesTerritory e quindi rilasciarla.

  2. Nella tabella FactInternetSales fare clic e tenere premuto sulla colonna SalesTerritoryId, quindi trascinare il cursore sulla colonna SalesTerritoryId nella tabella DimSalesTerritory e quindi rilasciarla.

    Si noti che la proprietà Attiva per questa relazione è False, ovvero è inattiva. Ciò è dovuto al fatto che la tabella FactInternetSales ha già un'altra relazione attiva usata nelle misure.

Nascondere la tabella EmployeeSecurity dalle applicazioni client

In questa attività si nasconderà la tabella EmployeeSecurity, in modo che non venga visualizzata nell'elenco di campi di un'applicazione client. Tenere presente che nascondere una tabella non significa proteggerla. Gli utenti possono comunque eseguire query per recuperare dati dalla tabella EmployeeSecurity, se sanno come farlo. Per proteggere i dati della tabella EmployeeSecurity, impedendo agli utenti di eseguire query sui dati, si applierà un filtro in un'attività successiva.

Per nascondere la tabella EmployeeSecurity dalle applicazioni client

  • Nella finestra di progettazione dei modelli, in vista diagramma, fare clic con il pulsante destro del mouse sull'intestazione della tabella Employee e quindi scegliere Nascondi a strumenti client.

Creare un ruolo utente Sales Employees by Territory

In questa attività verrà creato un nuovo ruolo utente. Questo ruolo includerà un filtro di riga che definisce le righe della tabella DimSalesTerritory visibili agli utenti. Il filtro viene quindi applicato nella direzione della relazione uno-a-molti a tutte le altre tabelle correlate a DimSalesTerritory. Verrà inoltre applicato un filtro semplice che consente di proteggere l'intera tabella EmployeeSecurity dall'esecuzione di query da parte di qualsiasi utente membro del ruolo.

Nota

Il ruolo Sales Employees by Territory creato in questa lezione limita i membri consentendo loro di visualizzare solo i dati sulle vendite per il territorio a cui appartengono o di eseguire query su tali dati. Se si aggiunge un utente come membro al ruolo Sales Employees by Territory che esiste anche come membro in un ruolo creato nella lezione 11: Creareruoli , si otterrà una combinazione di autorizzazioni. Quando 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 Sales Employees by Territory

  1. In SSDT fare clic sul menu Modello e quindi su Ruoli.

  2. In Gestione ruoli fare clic su Nuovo.

    Un nuovo ruolo con l'autorizzazione Nessuna verrà aggiunto all'elenco.

  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 e 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 il nome dell'oggetto da selezionare, digitare il primo nome utente di esempio usato durante la creazione della tabella EmployeeSecurity. Fare clic su Controlla nomi per verificare se il nome utente è valido e quindi fare clic su OK.

    Ripetere questo passaggio, aggiungendo gli altri nomi utente di esempio usati durante la creazione della tabella EmployeeSecurity.

  7. Fare clic sulla scheda Filtri di riga .

  8. Nella colonna Filtro DAX della tabella EmployeeSecurity digitare la formula seguente.

      =FALSE()  
    

    Questa formula specifica che tutte le colonne corrispondono alla condizione booleana False, quindi nessuna colonna nella tabella EmployeeSecurity può essere sottoposta a query da un membro del ruolo utente Sales Employees by Territory.

  9. Per la tabella DimSalesTerritory digitare la formula seguente.

    ='Sales Territory'[Sales Territory Id]=LOOKUPVALUE('Employee Security'[Sales Territory Id], 
      'Employee Security'[Login Id], USERNAME(), 
      'Employee Security'[Sales Territory Id], 
      'Sales Territory'[Sales Territory Id]) 
    

    In questa formula la funzione LOOKUPVALUE restituisce tutti i valori per la colonna DimEmployeeSecurity[SalesTerritoryId], in cui EmployeeSecurity[LoginId] corrisponde al nome utente di Windows connesso ed EmployeeSecurity[SalesTerritoryId] è uguale a DimSalesTerritory[SalesTerritoryId].

    Il set di ID di territori di vendita restituiti da LOOKUPVALUE viene quindi usato per limitare le righe visualizzate nella tabella DimSalesTerritory. Vengono visualizzate solo le righe in cui il valore SalesTerritoryID per la riga è incluso nel set di ID restituito dalla funzione LOOKUPVALUE.

  10. In Gestione ruoli fare clic su OK.

Testare il ruolo utente Sales Employees by Territory

In questa attività si userà la funzionalità Analizza in Excel in SSDT per testare l'efficacia del ruolo utente Sales Employees by Territory. Si specifica uno dei nomi utente aggiunti alla tabella EmployeeSecurity e 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 Sales Employees by Territory

  1. In SSDT fare clic sul menu Modello e quindi su 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 e quindi fare clic su Sfoglia.

  3. Nella finestra di dialogo Seleziona utente o gruppo, in Immettere il nome dell'oggetto da selezionare, digitare uno dei nomi utente inclusi nella tabella EmployeeSecurity e quindi fare clic su Controlla nomi.

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

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

    La tabella EmployeeSecurity non è visibile nell'elenco Campi tabella pivot, in quanto in un'attività precedente si è scelto di nascondere questa tabella agli strumenti client.

  5. Nell'elenco Campi, in ∑ Internet Sales (misure), selezionare la misura InternetTotalSales. La misura verrà immessa nei campi Valori .

  6. Selezionare la colonna SalesTerritoryId dalla tabella DimSalesTerritory. La colonna verrà immessa nei campi Etichette di riga .

    Si noti che i dati relativi alle vendite Internet vengono visualizzati solo per l'unica area a cui appartiene il nome utente effettivo usato. Se si seleziona un'altra colonna, ad esempio, City, nella tabella DimGeography come campo etichetta di riga, vengono 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

Funzione USERNAME (DAX)
LOOKUPVALUE (DAX) - funzione
Funzione CUSTOMDATA (DAX)