Lezione supplementare: Sicurezza dinamicaSupplemental lesson - Dynamic security

SI APPLICA A:SìAzure Analysis ServicesSìSQL Server Analysis Services (a partire dalla versione 2017)APPLIES TO:yesAzure Analysis ServicesyesSQL Server Analysis Services (starting with 2017)

In questa lezione supplementare si creerà un ruolo aggiuntivo che implementa la sicurezza dinamica.In this supplemental lesson, you create an additional role that implements dynamic security. La sicurezza dinamica offre un meccanismo di protezione a livello di riga basato sul nome utente o sull'ID di accesso dell'utente connesso.Dynamic security provides row-level security based on the user name or login id of the user currently logged on.

Per implementare la sicurezza dinamica, è necessario aggiungere al modello una tabella con i nomi degli utenti che possono connettersi al modello ed esplorare dati e oggetti del modello.To implement dynamic security, you add a table to your model containing the user names of those users that can connect to the model and browse model objects and data. Il modello creato con questa esercitazione è nel contesto di Adventure Works. Per completare questa lezione, tuttavia, è necessario aggiungere una tabella contenente gli utenti del proprio dominio.The model you create using this tutorial is in the context of Adventure Works; however, to complete this lesson, you must add a table containing users from your own domain. Non occorrono le password per i nomi utente aggiunti.You do not need the passwords for the user names that are added. Per creare una tabella EmployeeSecurity con un piccolo campione di utenti del proprio dominio, usare la funzionalità Incolla e incollare i dati dei dipendenti da un foglio di calcolo di Excel.To create an EmployeeSecurity table, with a small sample of users from your own domain, you use the Paste feature, pasting employee data from an Excel spreadsheet. In uno scenario reale, la tabella contenente i nomi utente sarebbe di solito una tabella da un database effettivo usato come origine dati, ad esempio una tabella DimEmployee reale.In a real-world scenario, the table containing user names would typically be a table from an actual database as a data source; for example, a real DimEmployee table.

Per implementare la sicurezza dinamica, verranno usate due funzioni DAX: USERNAME e LOOKUPVALUE.To implement dynamic security, you use two DAX functions: USERNAME Function (DAX) and LOOKUPVALUE Function (DAX). Queste funzioni, applicate in una formula di filtro di riga, vengono definite in un nuovo ruolo.These functions, applied in a row filter formula, are defined in a new role. Usando la funzione LOOKUPVALUE, la formula specifica un valore dalla tabella EmployeeSecurityBy using the LOOKUPVALUE function, the formula specifies a value from the EmployeeSecurity table. e quindi passa il valore alla funzione USERNAME, che specifica che il nome dell'utente connesso appartiene a questo ruolo.The formula then passes that value to the USERNAME function, which specifies the user name of the user logged on belongs to this role. L'utente può quindi esplorare solo i dati specificati dai filtri di riga del ruolo.The user can then browse only data specified by the role’s row filters. In questo scenario, si specifica che i dipendenti del reparto vendite possono solo visualizzare i dati relativi alle vendite Internet per i territori di vendita di cui sono membri.In this scenario, you specify that sales employees can only browse Internet sales data for the sales territories in which they are a member.

Le attività specifiche per questo scenario di modello tabulare Adventure Works, non necessariamente applicabili a uno scenario reale verranno identificate come tali.Those tasks that are unique to this Adventure Works tabular model scenario, but would not necessarily apply to a real-world scenario are identified as such. Ogni attività include informazioni aggiuntive che descrivono lo scopo dell'attività.Each task includes additional information describing the purpose of the task.

Tempo previsto per il completamento della lezione: 30 minutiEstimated time to complete this lesson: 30 minutes

PrerequisitiPrerequisites

L'argomento di questa lezione supplementare fa parte di un'esercitazione sulla creazione di modelli tabulari, con lezioni che è consigliabile completare nell'ordine indicato.This supplemental lesson topic is part of a tabular modeling tutorial, which should be completed in order. Prima di eseguire le attività in questa lezione supplementare, è necessario avere completato tutte le lezioni precedenti.Before performing the tasks in this supplemental lesson, you should have completed all previous lessons.

Aggiungere la tabella DimSalesTerritory al progetto di modello tabulare AW Internet SalesAdd the DimSalesTerritory table to the AW Internet Sales Tabular Model Project

Per implementare la sicurezza dinamica per questo scenario di Adventure Works, è necessario aggiungere due tabelle al modello.To implement dynamic security for this Adventure Works scenario, you must add two additional tables to your model. La prima tabella da aggiungere è DimSalesTerritory (come Sales Territory) dallo stesso database AdventureWorksDW.The first table you add is DimSalesTerritory (as Sales Territory) from the same AdventureWorksDW database. In seguito si applicherà un filtro di riga alla tabella SalesTerritory che definisce i dati specifici che l'utente connesso può visualizzare.You later apply a row filter to the SalesTerritory table that defines the particular data the logged on user can browse.

Per aggiungere la tabella DimSalesTerritoryTo add the DimSalesTerritory table

  1. In Esplora modelli tabulari espandere Origini dati, fare clic con il pulsante destro del mouse sulla connessione e quindi scegliere Importa nuove tabelle.In Tabular Model Explorer > Data Sources, right-click your connection, and then click Import New Tables.

    Se viene visualizzata la finestra di dialogo Credenziali rappresentazione digitare le credenziali di rappresentazione usate nella lezione 2: Aggiungere dati.If the Impersonation Credentials dialog box appears, type the impersonation credentials you used in Lesson 2: Add Data.

  2. Nello strumento di navigazione selezionare la tabella DimSalesTerritory e quindi fare clic su OK.In Navigator, select the DimSalesTerritory table, and then click OK.

  3. Nell'Editor di query fare clic sulla query DimSalesTerritory e quindi rimuovere la colonna SalesTerritoryAlternateKey.In Query Editor, click the DimSalesTerritory query, and then remove SalesTerritoryAlternateKey column.

  4. Fare clic su Importa.Click Import.

    La nuova tabella verrà aggiunta all'area di lavoro del modello.The new table is added to the model workspace. Gli oggetti e i dati dalla tabella di origine DimSalesTerritory vengono quindi importati nel modello tabulare AW Internet Sales.Objects and data from the source DimSalesTerritory table are then imported into your AW Internet Sales Tabular Model.

  5. Dopo aver completato l'importazione della tabella fare clic su Chiudi.After the table has been imported successfully, click Close.

Aggiungere una tabella con i dati dei nomi utenteAdd a table with user name data

La tabella DimEmployee nel database di esempio AdventureWorksDW contiene utenti del dominio AdventureWorks.The DimEmployee table in the AdventureWorksDW sample database contains users from the AdventureWorks domain. Questo nomi utente, tuttavia, non esistono nel proprio ambiente.Those user names do not exist in your own environment. È necessario quindi creare una tabella nel modello che contenga un piccolo campione (almeno tre) di utenti reali dell'organizzazione.You must create a table in your model that contains a small sample (at least three) of actual users from your organization. Questi utenti verranno poi aggiunti come membri al nuovo ruolo.You then add these users as members to the new role. Non servono le password per i nomi utente del campione, ma sono necessari nomi utente di Windows effettivi del proprio dominio.You do not need the passwords for the sample user names, but you do need actual Windows user names from your own domain.

Per aggiungere una tabella EmployeeSecurityTo add an EmployeeSecurity table

  1. Aprire Microsoft Excel per creare un foglio di lavoro.Open Microsoft Excel, creating a worksheet.

  2. Copiare la tabella seguente, inclusa la riga di intestazione e quindi incollarla nel foglio di lavoro.Copy the following table, including the header row, and then paste it into the worksheet.

      |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.Replace the first name, last name, and domain\username with the names and login ids of three users in your organization. Inserire lo stesso utente nelle prime due righe, in corrispondenza di EmployeeId 1, in modo da indicare che l'utente appartiene a più di un territorio di vendita.Put the same user on the first two rows, for EmployeeId 1, showing this user belongs to more than one sales territory. Lasciare invariati i campi EmployeeId e SalesTerritoryId.Leave the EmployeeId and SalesTerritoryId fields as they are.

  4. Salvare il foglio di lavoro come SampleEmployee.Save the worksheet as 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 scegliere Copia.In the worksheet, select all the cells with employee data, including the headers, then right-click the selected data, and then click Copy.

  6. In SSDT scegliere Incolla dal menu Modifica.In SSDT, click the Edit menu, and then click Paste.

    Se il comando Incolla è disattivato, fare clic in qualsiasi colonna di qualsiasi tabella nella finestra di progettazione dei modelli e riprovare.If Paste is grayed out, click any column in any table in the model designer window, and try again.

  7. Nella finestra di dialogo Anteprima Incolla digitare EmployeeSecurity in Nome tabella.In the Paste Preview dialog box, in Table Name, type EmployeeSecurity.

  8. In Dati da incollare verificare che i dati includano tutti i dati degli utenti e le intestazioni dal foglio di lavoro SampleEmployee.In Data to be pasted, verify the data includes all the user data and headers from the SampleEmployee worksheet.

  9. Verificare che l'opzione Usa la prima riga per le intestazioni di colonna sia selezionata e quindi fare clic su Ok.Verify Use first row as column headers is checked, and then click Ok.

    Verrà creata una nuova tabella denominata EmployeeSecurity con i dati dei dipendenti copiati dal foglio di lavoro SampleEmployee.A new table named EmployeeSecurity with employee data copied from the SampleEmployee worksheet is created.

Creare relazioni tra le tabelle FactInternetSales, DimGeography e DimSalesTerritoryCreate relationships between FactInternetSales, DimGeography, and DimSalesTerritory table

Le tabelle FactInternetSales, DimGeography e DimSalesTerritory contengono tutte una colonna in comune, SalesTerritoryId.The FactInternetSales, DimGeography, and DimSalesTerritory table all contain a common column, SalesTerritoryId. La colonna SalesTerritoryId nella tabella DimSalesTerritory contiene i valori con un ID diverso per ogni territorio di vendita.The SalesTerritoryId column in the DimSalesTerritory table contains values with a different Id for each sales territory.

Per creare relazioni tra le tabelle FactInternetSales, DimGeography e DimSalesTerritoryTo create relationships between the FactInternetSales, DimGeography, and the DimSalesTerritory table

  1. Nella vista diagramma, nella tabella DimGeography fare clic sulla colonna SalesTerritoryId e tenere premuto, trascinare il cursore sulla colonna SalesTerritoryId nella tabella DimSalesTerritory e quindi rilasciare.In Diagram View, in the DimGeography table, click, and hold on the SalesTerritoryId column, then drag the cursor to the SalesTerritoryId column in the DimSalesTerritory table, and then release.

  2. Nella tabella FactInternetSales fare clic sulla colonna SalesTerritoryId e tenere premuto, trascinare il cursore sulla colonna SalesTerritoryId nella tabella DimSalesTerritory e quindi rilasciare.In the FactInternetSales table, click, and hold on the SalesTerritoryId column, then drag the cursor to the SalesTerritoryId column in the DimSalesTerritory table, and then release.

    Si noti che la proprietà Attiva per questa relazione è False, ovvero è inattiva.Notice the Active property for this relationship is False, meaning it's inactive. La tabella FactInternetSales, infatti, include già un'altra relazione attiva.The FactInternetSales table already has another active relationship.

Nascondere la tabella EmployeeSecurity dalle applicazioni clientHide the EmployeeSecurity Table from client applications

In questa attività si nasconderà la tabella EmployeeSecurity, impedendone la visualizzazione nell'elenco dei campi di un'applicazione client.In this task, you hide the EmployeeSecurity table, keeping it from appearing in a client application’s field list. Tenere presente che nascondere una tabella non significa proteggerla.Keep in mind that hiding a table does not secure it. Gli utenti possono comunque eseguire query per recuperare dati dalla tabella EmployeeSecurity, se sanno come farlo.Users can still query EmployeeSecurity table data if they know how. Per proteggere i dati della tabella EmployeeSecurity, impedendo agli utenti di poter eseguire query sui relativi dati, si applicherà un filtro in un'attività successiva.To secure the EmployeeSecurity table data, preventing users from being able to query any of its data, you apply a filter in a later task.

Per nascondere la tabella EmployeeSecurity dalle applicazioni clientTo hide the EmployeeSecurity table from client applications

  • 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.In the model designer, in Diagram View, right-click the Employee table heading, and then click Hide from Client Tools.

Creare un ruolo utente Sales Employees by TerritoryCreate a Sales Employees by Territory user role

In questa attività si creerà un ruolo utente.In this task, you create a user role. Questo ruolo include un filtro di riga che definisce le righe della tabella DimSalesTerritory che sono visibili agli utenti.This role includes a row filter defining which rows of the DimSalesTerritory table are visible to users. Il filtro viene quindi applicato nella direzione della relazione uno-a-molti a tutte le altre tabelle correlate a DimSalesTerritory.The filter is then applied in the one-to-many relationship direction to all other tables related to DimSalesTerritory. È anche possibile applicare un filtro che protegge l'intera tabella EmployeeSecurity impedendo l'esecuzione di query a qualsiasi utente membro del ruolo.You also apply a filter that secures the entire EmployeeSecurity table from being queryable by any user that is a member of the role.

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.The Sales Employees by Territory role you create in this lesson restricts members to browse (or query) only sales data for the sales territory to which they belong. Se si aggiunge un utente come membro al ruolo Sales Employees by Territory e tale utente esiste anche come membro di uno dei ruoli creati nella Lezione 11: Creare ruoli, si ottiene una combinazione di autorizzazioni.If you add a user as a member to the Sales Employees by Territory role that also exists as a member in a role created in Lesson 11: Create Roles, you get a combination of permissions. Quando un utente è membro di più ruoli, le autorizzazioni e i filtri di riga definiti per ogni ruolo sono cumulativi.When a user is a member of multiple roles, the permissions, and row filters defined for each role are cumulative. Questo significa che l'utente dispone delle autorizzazioni maggiori determinate dalla combinazione dei ruoli.That is, the user has the greater permissions determined by the combination of roles.

Per creare un ruolo utente Sales Employees by TerritoryTo create a Sales Employees by Territory user role

  1. In SSDT fare clic sul menu Modello e quindi su Ruoli.In SSDT, click the Model menu, and then click Roles.

  2. In Gestione ruoli fare clic su Nuovo.In Role Manager, click New.

    Un nuovo ruolo con l'autorizzazione Nessuna verrà aggiunto all'elenco.A new role with the None permission is added to the list.

  3. Fare clic sul nuovo ruolo e quindi nella colonna Nome rinominare il ruolo in Sales Employees by Territory.Click the new role, and then in the Name column, rename the role to Sales Employees by Territory.

  4. Nella colonna Autorizzazioni fare clic nell'elenco a discesa e quindi selezionare l'autorizzazione Lettura.In the Permissions column, click the dropdown list, and then select the Read permission.

  5. Fare clic sulla scheda Membri e quindi fare clic su Aggiungi.Click the Members tab, and then click Add.

  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.In the Select User or Group dialog box, in Enter the object named to select, type the first sample user name you used when creating the EmployeeSecurity table. Fare clic su Controlla nomi per verificare se il nome utente è valido e quindi fare clic su OK.Click Check Names to verify the user name is valid, and then click Ok.

    Ripetere questo passaggio, aggiungendo gli altri nomi utente di esempio usati durante la creazione della tabella EmployeeSecurity.Repeat this step, adding the other sample user names you used when creating the EmployeeSecurity table.

  7. Fare clic sulla scheda Filtri di riga.Click the Row Filters tab.

  8. Per la tabella EmployeeSecurity, nella colonna Filtro DAX digitare la formula seguente:For the EmployeeSecurity table, in the DAX Filter column, type the following formula:

      =FALSE()  
    

    Questa formula specifica che tutte le colonne si risolvono nella condizione booleana FalseThis formula specifies that all columns resolve to the false Boolean condition. e che nessuna colonna della tabella EmployeeSecurity può essere sottoposta a query da un membro del ruolo utente Sales Employees by Territory.No columns for the EmployeeSecurity table can be queried by a member of the Sales Employees by Territory user role.

  9. Per la tabella DimSalesTerritory digitare la formula seguente:For the DimSalesTerritory table, type the following formula:

    ='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].In this formula, the LOOKUPVALUE function returns all values for the DimEmployeeSecurity[SalesTerritoryId] column, where the EmployeeSecurity[LoginId] is the same as the current logged on Windows user name, and EmployeeSecurity[SalesTerritoryId] is the same as the DimSalesTerritory[SalesTerritoryId].

    Il set di ID di territori di vendita restituiti da LOOKUPVALUE viene quindi usato per limitare le righe visualizzate nella tabella DimSalesTerritory.The set of sales territory IDs returned by LOOKUPVALUE is then used to restrict the rows shown in the DimSalesTerritory table. Vengono visualizzate solo le righe in cui il valore SalesTerritoryID per la riga è incluso nel set di ID restituito dalla funzione LOOKUPVALUE.Only rows where the SalesTerritoryID for the row is in the set of IDs returned by the LOOKUPVALUE function are displayed.

  10. In Gestione ruoli fare clic su OK.In Role Manager, click Ok.

Testare il ruolo utente Sales Employees by TerritoryTest the Sales Employees by Territory User Role

In questa attività si userà la funzionalità Analizza in Excel in SSDT per verificare l'efficacia del ruolo utente Sales Employees by Territory.In this task, you use the Analyze in Excel feature in SSDT to test the efficacy of the Sales Employees by Territory user role. Uno dei nomi utente aggiunti alla tabella EmployeeSecurity verrà specificato come membro del ruolo.You specify one of the user names you added to the EmployeeSecurity table and as a member of the role. Questo nome utente verrà quindi usato come nome utente effettivo nella connessione creata tra Excel e il modello.This user name is then used as the effective user name in the connection created between Excel and the model.

Per testare il ruolo utente Sales Employees by TerritoryTo test the Sales Employees by Territory user role

  1. In SSDT fare clic sul menu Modello e quindi su Analizza in Excel.In SSDT, click the Model menu, and then click Analyze 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.In the Analyze in Excel dialog box, in Specify the user name or role to use to connect to the model, select Other Windows User, and then click Browse.

  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.In the Select User or Group dialog box, in Enter the object name to select, type a user name you included in the EmployeeSecurity table, and then click Check Names.

  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.Click Ok to close the Select User or Group dialog box, and then click Ok to close the Analyze in Excel dialog box.

    Excel verrà aperto con una nuova cartella di lavoro.Excel opens with a new workbook. Viene creata automaticamente una tabella pivot.A PivotTable is automatically created. L'elenco dei campi della tabella pivot include la maggior parte dei campi dati disponibili nel nuovo modello.The PivotTable Fields list includes most of the data fields available in your new model.

    La tabella EmployeeSecurity non è visibile nell'elenco Campi tabella pivot,Notice the EmployeeSecurity table is not visible in the PivotTable Fields list. perché è stata nascosta dagli strumenti client in un'attività precedente.You hid this table from client tools in a previous task.

  5. Nell'elenco Campi, in ∑ Internet Sales (misure), selezionare la misura InternetTotalSales.In the Fields list, in ∑ Internet Sales (measures), select the InternetTotalSales measure. La misura verrà immessa nei campi Valori.The measure is entered into the Values fields.

  6. Selezionare la colonna SalesTerritoryId dalla tabella DimSalesTerritory.Select the SalesTerritoryId column from the DimSalesTerritory table. La colonna verrà immessa nei campi Etichette di riga.The column is entered into the Row Labels fields.

    Si noti che i dati relativi alle vendite Internet vengono visualizzati solo per l'unica area a cui appartiene il nome utente effettivo usato.Notice Internet sales figures appear only for the one region to which the effective user name you used belongs. 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.If you select another column, like City from the DimGeography table as Row Label field, only cities in the sales territory to which the effective user belongs are displayed.

    Questo utente non può visualizzare o eseguire query sui dati delle vendite Internet per territori diversi da quello che a cui appartiene.This user cannot browse or query any Internet sales data for territories other than the one they belong to. Questa restrizione dipende dal fatto che il filtro di riga definito per la tabella DimSalesTerritory, nel ruolo utente Sales Employees by Territory, protegge tutti i dati correlati ad altri territori di vendita.This restriction is because the row filter defined for the DimSalesTerritory table, in the Sales Employees by Territory user role, secures data for all data related to other sales territories.

Vedere ancheSee Also

USERNAME Function (DAX) (Funzione DAX USERNAME)USERNAME Function (DAX)
LOOKUPVALUE Function (DAX) (Funzione DAX LOOKUPVALUE)LOOKUPVALUE Function (DAX)
CUSTOMDATA Function (DAX) (Funzione DAX CUSTOMDATA)CUSTOMDATA Function (DAX)