Conexões no ADOMD.NET – Estabelecer conexões seguras

Quando você usa uma conexão no ADOMD.NET, o método de segurança usado para a conexão depende do valor da propriedade ProtectionLevelOpen da cadeia de conexão usada quando você chama o método do AdomdConnection.

A propriedade ProtectionLevel oferece quatro níveis de segurança: não autenticado, autenticado, assinado e criptografado. A tabela a seguir descreve esses vários níveis de segurança.

Observação

Se você optar por usar o pooling de conexões de banco de dados, o banco de dados não será capaz de gerenciar a segurança. Isso acontece porque o pooling de conexões de banco de dados exige que a cadeia de conexão seja idêntica para a criação do conexões. Dessa forma, você deve gerenciar a segurança em outro lugar.

Nível de segurança Valor de ProtectionLevel
conexão não autenticada
Uma conexão não autenticada não faz nenhuma forma de autenticação. Esse tipo de conexão representa a forma de conexão mais suportada, mas também a menos segura.
Nenhum
conexão autenticada
Uma conexão autenticada autentica o usuário que está fazendo a conexão, mas não protege comunicações adicionais. Esse tipo de conexão é útil para que você possa estabelecer a identidade do usuário ou do aplicativo que estiver se conectando a uma fonte de dados analíticos.
Connect
conexão assinada
Uma conexão assinada autentica o usuário que está solicitando a conexão e garante que as transmissões não serão modificadas. Esse tipo de conexão é útil quando a autenticidade dos dados transferidos deve ser verificada. No entanto, uma conexão assinada só impede a modificação do conteúdo do pacote de dados. Ele ainda poderá ser exibido em trânsito.



Observe que uma conexão assinada só tem suporte do provedor de XML for Analysis fornecido pelo MicrosoftSQL ServerAnalysis Services.
Integridade de Pkt ou PktIntegrity
conexão criptografada
Uma conexão criptografada é o tipo de conexão padrão usado pelo ADOMD.NET. Esse tipo de conexão autentica o usuário que está solicitando a conexão e então também criptografa os dados transmitidos. Uma conexão criptografada é a forma mais segura de conexão que pode ser criada pelo ADOMD.NET. O conteúdo do pacote de dados não pode ser exibido ou modificado, protegendo assim os dados durante o trânsito.



Uma conexão criptografada só é suportada pelo provedor XML for Analysis fornecido pelo SQL ServerAnalysis Services.
Pkt Privacy ou PktPrivacy

No entanto, nem todos os níveis de segurança estão disponíveis para todos os tipos de conexões:

  • Uma conexão TCP pode usar qualquer um dos quatro níveis de segurança. Na verdade, uma conexão TCP, quando usada com a com Segurança Integrada do Windows, oferece o método mais seguro de conexão a uma fonte de dados analíticos.

  • Uma conexão HTTP só pode ser do tipo autenticada. Portanto, a propriedade ProtectionLevel deve ser definida como Conexão.

  • Uma conexão HTTPS só pode ser do tipo criptografada. Portanto, a propriedade ProtectionLevel deve ser definida como Pkt Privacy ou PktPrivacy.

Protegendo conexões TCP

Para uma conexão TCP, a propriedade ProtectionLevel dá suporte a todos os quatro níveis de segurança, conforme mostrado na tabela a seguir.

Valor de ProtectionLevel Usar com conexão TCP? Resultados
Nenhum Yes Especifica uma conexão não autenticada.

Um fluxo TCP é solicitado do provedor, mas não há nenhuma forma de autenticação executada no usuário que está solicitando o fluxo.
Connect Yes Especifica uma conexão autenticada.

Um fluxo TCP é solicitado do provedor e, em seguida, o contexto de segurança do usuário que está solicitando o fluxo é autenticado no servidor: se a autenticação for bem-sucedida, nenhuma outra ação será tomada. Se a autenticação falhar, o AdomdConnection objeto se desconecta da fonte de dados multidimensional e uma exceção é lançada.

Depois que a autenticação tiver êxito ou falhar, o contexto de segurança usado para autenticar a conexão será descartado.
Integridade de Pkt ou PktIntegrity Yes Especifica uma conexão assinada.

Um fluxo TCP é solicitado do provedor e, em seguida, o contexto de segurança do usuário que está solicitando o fluxo é autenticado no servidor:



Se a autenticação for bem-sucedida, AdomdConnection o objeto fechará o fluxo TCP existente e abrirá um fluxo TCP assinado para lidar com todas as solicitações. Cada solicitação de dados ou de metadados é autenticada por meio do contexto de segurança usado para abrir a conexão. Adicionalmente, cada pacote é assinado digitalmente para garantir que a carga do pacote TCP não tenha sido alterada de qualquer forma.



Se a autenticação falhar, o AdomdConnection objeto se desconecta da fonte de dados multidimensional e uma exceção é lançada.
Pkt Privacy ou PktPrivacy Yes Especifica uma conexão criptografada.



Observe que você também pode especificar uma conexão criptografada não definindo a propriedade ProtectionLevel na cadeia de conexão.



Um fluxo TCP é solicitado do provedor e o contexto de segurança do usuário que está solicitando o fluxo é autenticado no servidor:



Se a autenticação for bem-sucedida, AdomdConnection o objeto fechará o fluxo TCP existente e abrirá um fluxo TCP criptografado para lidar com todas as solicitações. Cada solicitação de dados ou de metadados é autenticada por meio do contexto de segurança usado para abrir a conexão. Adicionalmente, a carga de cada pacote TCP será criptografada usando o maior método de criptografia suportado pelo provedor e pela fonte de dados multidimensional.



Se a autenticação falhar, o AdomdConnection objeto se desconecta da fonte de dados multidimensional e uma exceção é lançada.

Usando a Segurança Integrada do Windows para a conexão

Windows Segurança Integrada é a maneira mais segura de estabelecer e proteger uma conexão com uma instância do Analysis Services. A Segurança Integrada do Windows não revela credenciais de segurança, como um nome de usuário e senha, durante o processo de autenticação, mas usa o identificador de segurança do processo em execução para estabelecer a identidade. Para a maioria dos aplicativos cliente, esse identificador de segurança representa a identidade do usuário atualmente conectado.

Para usar a Segurança Integrada do Windows, a cadeia de conexão exige as seguintes configurações:

  • Para a propriedade Segurança Integrada, não de definir essa propriedade ou definir essa propriedade como SSPI.

    Observação

    Windows Segurança Integrada só está disponível para conexões TCP porque as conexões HTTP devem usar a configuração Básica para a propriedade Segurança Integrada.

  • Para a propriedade ProtectionLevel, de definir essa propriedade como Conexão, Integridade de Pkt ou Privacidade Pkt.

Protegendo conexões HTTP

HTTPS e SSL (Secure Sockets Layer) podem ser usados para a proteção externa das comunicações HTTP seguras com uma fonte de dados analíticos.

Como um provedor de XMLA só usa o HTTP seguro, uma conexão HTTP no ADOMD.NET deve ser assinada, como mostrado na tabela a seguir.

Valor de ProtectionLevel Usar com HTTP ou HTTPS
Nenhum No
Connect HTTP
Integridade de Pkt ou PktIntegrity No
Pkt Privacy ou PktPrivacy HTTPS

Abrindo uma conexão HTTP segura

O exemplo a seguir demonstra como usar o ADOMD.NET para abrir uma conexão HTTP para o banco de dados de exemplo adventureWorksAS Analysis Services dados:

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