Connessioni in ADOMD.NET - Implementazione di connessioni sicure

Quando si usa una connessione in ADOMD.NET, il metodo di sicurezza usato per la connessione dipende dal valore della proprietà ProtectionLevelOpen della stringa di connessione utilizzata quando si chiama il metodo dell'oggetto AdomdConnection.

La proprietà ProtectionLevel offre quattro livelli di sicurezza: non autenticato, autenticato, firmato e crittografato. Nella tabella seguente vengono descritti i diversi livelli di sicurezza.

Nota

Se si sceglie di utilizzare il pool di connessioni al database, quest'ultimo non sarà in grado di gestire la sicurezza poiché per il pool di connessioni al database è necessario che la stringa di connessione sia identica alle connessioni del pool. È pertanto necessario gestire la sicurezza in un altro punto.

Livello di sicurezza Valore di ProtectionLevel
connessione non autenticata
Una connessione non autenticata non utilizza alcuna forma di autenticazione. Questo tipo di connessione rappresenta la forma di connessione maggiormente supportata, ma meno protetta.
Nessuno
connessione autenticata
Una connessione autenticata consente di autenticare l'utente che effettua la connessione, ma non protegge alcuna comunicazione aggiuntiva. Questo tipo di connessione risulta utile poiché consente di stabilire l'identità dell'utente o dell'applicazione che si connette a un'origine dati analitici.
Connettere
connessione firmata
Una connessione firmata consente di autenticare l'utente che richiede la connessione e garantisce inoltre che le trasmissioni non vengano modificate. Questo tipo di connessione risulta utile quando è necessario verificare l'autenticità dei dati trasferiti. Una connessione firmata impedisce tuttavia solo la modifica del contenuto del pacchetto di dati, ma non la relativa visualizzazione durante il transito.



Si noti che una connessione firmata è supportata solo dal provider XML for Analysis fornito da MicrosoftSQL ServerAnalysis Services.
Integrità Pkt o PktIntegrity
connessione crittografata
Una connessione crittografata rappresenta il tipo di connessione predefinito utilizzato da ADOMD.NET. Questo tipo di connessione consente di autenticare l'utente che richiede la connessione, nonché di crittografare i dati trasmessi. Una connessione crittografata rappresenta la forma di connessione più protetta che è possibile creare in ADOMD.NET. Il contenuto del pacchetto di dati non può essere né visualizzato né modificato con la conseguente protezione dei dati durante il transito.



Una connessione crittografata è supportata solo dal provider XML for Analysis fornito da SQL ServerAnalysis Services.
Pkt Privacy o PktPrivacy

Non tutti i livelli di sicurezza sono tuttavia disponibili per tutti i tipi di connessioni:

  • Una connessione TCP può utilizzare uno qualsiasi dei quattro livelli di sicurezza. Se utilizzata con la sicurezza integrata di Windows, una connessione TCP rappresenta infatti il metodo più protetto per connettersi a un'origine dati analitici.

  • Una connessione HTTP può essere solo autenticata. Pertanto, la proprietà ProtectionLevel deve essere impostata su Connessione.

  • Una connessione HTTPS può essere solo crittografata. Pertanto, la proprietà ProtectionLevel deve essere impostata su Pkt Privacy o PktPrivacy.

Protezione di connessioni TCP

Per una connessione TCP, la proprietà ProtectionLevel supporta tutti e quattro i livelli di sicurezza, come illustrato nella tabella seguente.

Valore di ProtectionLevel Utilizzo con una connessione TCP Risultati
Nessuno Specifica di una connessione non autenticata.

Il provider richiede un flusso TCP, ma all'utente che effettua la richiesta del flusso non viene applicata alcuna forma di autenticazione.
Connettere Specifica di una connessione autenticata.

Viene richiesto un flusso TCP dal provider e quindi il contesto di sicurezza dell'utente che richiede il flusso viene autenticato sul server: se l'autenticazione ha esito positivo, non viene eseguita alcuna altra azione. Se l'autenticazione non riesce, l'oggetto AdomdConnection si disconnette dall'origine dati multidimensionale e viene generata un'eccezione.

Dopo l'esito positivo o negativo dell'autenticazione, il contesto di sicurezza utilizzato per autenticare la connessione viene eliminato.
Integrità Pkt o PktIntegrity Specifica di una connessione firmata.

Il provider richiede un flusso TCP e successivamente il contesto di sicurezza relativo all'utente che effettua la richiesta del flusso viene autenticato nel server.



Se l'autenticazione ha esito positivo, AdomdConnection l'oggetto chiude il flusso TCP esistente e apre un flusso TCP firmato per gestire tutte le richieste. Ogni richiesta di dati o metadati viene autenticata tramite il contesto di sicurezza utilizzato per aprire la connessione. Ogni pacchetto viene inoltre firmato digitalmente per garantire che al payload del pacchetto TCP non sia stata apportata alcuna modifica.



Se l'autenticazione non riesce, l'oggetto AdomdConnection si disconnette dall'origine dati multidimensionale e viene generata un'eccezione.
Pkt Privacy o PktPrivacy Specifica di una connessione crittografata.



Si noti che è anche possibile specificare una connessione crittografata non impostando la proprietà ProtectionLevel nella stringa di connessione.



Il provider richiede un flusso TCP e successivamente il contesto di sicurezza relativo all'utente che effettua la richiesta del flusso viene autenticato nel server.



Se l'autenticazione ha esito positivo, AdomdConnection l'oggetto chiude il flusso TCP esistente e apre un flusso TCP crittografato per gestire tutte le richieste. Ogni richiesta di dati o metadati viene autenticata tramite il contesto di sicurezza utilizzato per aprire la connessione. Il payload di ogni pacchetto TCP viene inoltre crittografato tramite il metodo di crittografia di livello più elevato supportato sia dal provider che dall'origine dati multidimensionale.



Se l'autenticazione non riesce, l'oggetto AdomdConnection si disconnette dall'origine dati multidimensionale e viene generata un'eccezione.

Utilizzo della sicurezza integrata di Windows per la connessione

Windows sicurezza integrata è il modo più sicuro per stabilire e proteggere una connessione a un'istanza di Analysis Services. Nella sicurezza integrata di Windows le credenziali di sicurezza, ad esempio un nome utente o una password, non vengono rivelate durante il processo di autenticazione. Per stabilire l'identità, viene invece utilizzato l'ID di sicurezza del processo attualmente in esecuzione. Per la maggior parte delle applicazioni client, tale ID di sicurezza rappresenta l'identità dell'utente attualmente connesso.

Per utilizzare la sicurezza integrata di Windows, per la stringa di connessione è necessario specificare le impostazioni seguenti:

  • Per la proprietà Sicurezza integrata, non impostare questa proprietà o impostare questa proprietà su SSPI.

    Nota

    Windows sicurezza integrata è disponibile solo per le connessioni TCP perché le connessioni HTTP devono usare l'impostazione Di base per la proprietà Sicurezza integrata.

  • Per la proprietà ProtectionLevel impostare questa proprietà su Connessione,Pkt Integrity o Pkt Privacy.

Protezione di connessioni HTTP

Per proteggere esternamente comunicazioni HTTP con un'origine dati analitici, è possibile utilizzare HTTPS e SSL (Secure Sockets Layer).

Poiché un provider XMLA utilizza solo connessioni HTTP protette, una connessione HTTP in ADOMD.NET deve essere firmata, come illustrato nella tabella seguente.

Valore di ProtectionLevel Utilizzo con HTTP o HTTPS
Nessuno No
Connettere HTTP
Integrità Pkt o PktIntegrity No
Pkt Privacy o PktPrivacy HTTPS

Apertura di una connessione HTTP protetta

L'esempio seguente illustra come usare ADOMD.NET per aprire una connessione HTTP per il database di esempio AdventureWorksAS Analysis Services database:

Public Function GetAWEncryptedConnection( _  
    Optional ByVal serverName As String = "https:\\localhost\isapy\msmdpump.dll") _  
    As AdomdConnection  
  
    Dim strConnectionString As String = ""  
    Dim objConnection As New AdomdConnection  
  
    Try  
        ' To establish an encrypted connection, set the   
        ' ProtectionLevel setting to PktPrivacy.  
        strConnectionString = "DataSource=" & serverName & ";" & _  
            "Catalog=AdventureWorksAS;" & _  
            "ProtectionLevel=PktPrivacy;"  
  
        ' Note that username and password are not supplied here.  
        ' The current security context is used for authentication  
        ' purposes.  
  
        objConnection.ConnectionString = strConnectionString  
        objConnection.Open()  
    Catch ex As Exception  
        objConnection = Nothing  
        Throw ex  
    Finally  
        ' Return the encrypted connection.  
        GetAWEncryptedConnection = objConnection  
    End Try  
End Function