Usar o logon único Kerberos de SSO para SAP BW usando CommonCryptoLib (sapcrypto.dll)

Este artigo descreve como configurar a fonte de dados do SAP BW para habilitar o SSO no serviço do Power BI usando a CommonCryptoLib (sapcrypto.dll).

Observação

Antes de tentar atualizar um relatório baseado em SAP BW que usa o SSO do Kerberos, conclua as etapas deste artigo e as etapas contidas em Configurar o SSO do Kerberos. Usar o CommonCryptoLib como sua biblioteca SNC habilita as conexões de SSO com os servidores de aplicativos e de mensagens do SAP BW.

Observação

A configuração de ambas as bibliotecas (sapcrypto e gx64krb5) no mesmo servidor de gateway é um cenário sem suporte. Não é recomendável configurar ambas as bibliotecas no mesmo servidor de gateway, pois isso levará a uma mistura de bibliotecas. Se quiser usar as duas bibliotecas, separe totalmente o servidor de gateway. Por exemplo, configure gx64krb5 para o servidor A e sapcrypto para o servidor B. Lembre-se de que não há suporte para falhas no servidor A que usa gx64krb5, pois gx64krb5 não tem mais suporte do SAP e da Microsoft.

Configurar o SAP BW para habilitar o SSO usando a CommonCryptoLib

Observação

O gateway de dados local é um software de 64 bits e, portanto, exige a versão de 64 bits da CommonCryptoLib (sapcrypto.dll) para realizar o SSO do BW. Se planeja testar a conexão do SSO com o servidor SAP BW na GUI do SAP antes de tentar uma conexão SSO por meio do gateway (recomendado), também precisará da versão de 32 bits da CommonCryptoLib, pois a GUI do SAP é um software de 32 bits.

  1. Verifique se o servidor BW está configurado corretamente para o SSO do Kerberos usando CommonCryptoLib. Se estiver, você poderá usar o SSO para acessar o servidor BW (seja diretamente ou por meio de um Servidor de Mensagens do SAP BW) com uma ferramenta do SAP como a GUI do SAP que tenha sido configurada para usar CommonCryptoLib.

    Confira mais informações sobre as etapas de configuração em Logon único do SAP: autenticar com Kerberos/SPNEGO. O servidor BW deve usar CommonCryptoLib como biblioteca SNC e ter um nome SNC que comece com CN=, como em CN=BW1. Para obter mais informações sobre os requisitos de nome do SNC (especificamente com o parâmetro snc/identity/as), confira Parâmetros do SNC para configuração do Kerberos.

  2. Se ainda não tiver feito isso, instale a versão x64 do SAP .NET Connector no computador em que o gateway foi instalado.

    Verifique se o componente foi instalado tentando se conectar ao servidor do BW no Power BI Desktop por meio do computador do gateway. Se você não conseguir se conectar usando a implementação 2.0, isso indicará que o Conector .NET não está instalado ou que não foi instalado no GAC.

  3. Verifique se o SLC (Cliente de Logon Seguro) do SAP não está em execução no computador em que o gateway está instalado.

    O SLC armazena em cache os tíquetes do Kerberos de um modo que pode interferir na capacidade do gateway de usar o Kerberos para SSO.

  4. Se o SLC estiver instalado, desinstale-o ou saia do cliente de logon seguro do SAP. Clique com o botão direito do mouse sobre o ícone na bandeja do sistema e selecione Fazer logoff e Sair antes de tentar uma conexão com o SSO usando o gateway.

    O SLC não é compatível para uso em computadores que operam com o Windows Server. Para saber mais, confira Nota SAP 2780475 (usuário s necessário).

    SAP Secure Login Client

  5. Se você desinstalar o SLC ou selecionar Fazer logoff e Sair, abra uma janela de comando e insira klist purge para limpar eventuais tíquetes do Kerberos armazenados em cache antes de tentar uma conexão com o SSO por meio do gateway.

  6. Baixe o CommonCryptoLib (sapcrypto.dll) na versão 8.5.25 ou posterior de 64 bits do SAP Launchpad e copie-o em uma pasta do computador do gateway. No mesmo diretório em que você copiou sapcrypto.dll, crie um arquivo chamado sapcrypto.ini, com o seguinte conteúdo:

    ccl/snc/enable_kerberos_in_client_role = 1
    

    O arquivo .ini contém informações de configuração necessárias do CommonCryptoLib para habilitar o SSO no cenário de gateway.

    Observação

    Esses arquivos devem ser armazenados no mesmo local; em outras palavras, /path/to/sapcrypto/ precisa conter sapcrypto.ini e sapcrypto.dll.

    O usuário de serviço do gateway e o usuário do AD (Active Directory) que o usuário do serviço representa precisam de permissões de leitura e execução para ambos os arquivos. É recomendável conceder permissões para os arquivos .ini e .dll ao Grupo de usuários autenticados. Para fins de teste, você também pode conceder explicitamente essas permissões para o usuário do serviço do gateway e o usuário do Active Directory usado para teste. Na captura de tela a seguir, concedemos ao grupo Usuários Autenticados permissões de Leitura e execução para sapcrypto.dll:

    Authenticated users

  7. Caso você ainda não tenha uma fonte de dados do SAP BW associada ao gateway pelo qual deseja que a conexão SSO flua, adicione uma na página Gerenciar gateways no serviço do Power BI. Se você já tiver essa fonte de dados, edite-a:

    • Escolha SAP Business Warehouse como o Tipo de Fonte de Dados caso você queira criar uma conexão SSO para um servidor de aplicativos BW.
    • Escolha o Servidor de mensagens do SAP Business Warehouse caso você queira criar uma conexão SSO para um servidor de aplicativos do BW.
  8. Na Biblioteca SNC, selecione a variável de ambiente SNC_LIB ou SNC_LIB_64, ou Personalizado.

    • Se você selecionar SNC_LIB, precisará definir o valor da variável de ambiente SNC_LIB_64 no computador do gateway como o caminho absoluto da cópia de 64 bits de sapcrypto.dll no computador do gateway. Por exemplo, C:\Users\Test\Desktop\sapcrypto.dll.

    • Se você escolher Personalizado, cole o caminho absoluto em sapcrypto.dll, no campo Caminho da Biblioteca SNC Personalizada, exibido na página Gerenciar gateways.

  9. Como o Nome do Parceiro SNC, insira o nome da SNC do servidor BW. Em Configurações avançadas, verifique se a opção Usar SSO via Kerberos para consultas do DirectQuery está marcada. Preencha os outros campos como se estivesse estabelecendo uma conexão de autenticação do Windows do PBI desktop.

  10. Crie uma variável de ambiente do sistema CCL_PROFILE e defina o valor como o caminho para sapcrypto.ini.

    CCL_PROFILE system environment variable

    Os arquivos sapcrypto.dll e .ini devem existir no mesmo local. No exemplo acima, sapcrypto.ini e sapcrypto.dll estão localizados na área de trabalho.

  11. Reinicie o serviço do gateway.

    Restart gateway service

  12. Executar um relatório do Power BI

Solução de problemas

Se não for possível atualizar o relatório no serviço do Power BI, use o rastreamento de gateway, CPIC e CommonCryptoLib para diagnosticar o problema. Como o rastreamento CPIC e o CommonCryptoLib são produtos do SAP, a Microsoft não pode oferecer suporte para eles.

Logs do gateway

  1. Reproduza o problema.

  2. Abra o aplicativo do gateway e selecione Exportar logs na guia Diagnóstico.

    Export gateway logs

Rastreamento CPIC

  1. Para habilitar o rastreamento CPIC, defina duas variáveis de ambiente: CPIC_TRACE e CPIC_TRACE_DIR.

    A primeira variável define o nível de rastreamento e a segunda define o diretório do arquivo de rastreamento. O diretório deve ser um local onde os membros do grupo Usuários Autenticados possam gravar.

  2. Defina CPIC_TRACE como 3 e CPIC_TRACE_DIR como qualquer diretório em que você deseja gravar os arquivos de rastreamento. Por exemplo:

    CPIC tracing

  3. Reproduza o problema e verifique se CPIC_TRACE_DIR contém arquivos de rastreamento.

    O rastreamento de CPIC pode diagnosticar problemas de nível superior, como uma falha ao carregar a biblioteca sapcrypto.dll. Por exemplo, veja um trecho de um arquivo de rastreamento de CPIC em que ocorreu um erro de carregamento de .dll:

    [Thr 7228] *** ERROR => DlLoadLib()==DLENOACCESS - LoadLibrary("C:\Users\test\Desktop\sapcrypto.dll")
    Error 5 = "Access is denied." [dlnt.c       255]
    

    Se você encontrar essa falha, mas tiver definido as permissões Ler e Executar em sapcrypto.dll e sapcrypto.ini, conforme descrito na seção acima, tente definir as mesmas permissões Ler e Executar na pasta que contém os arquivos.

    Se, mesmo assim, não conseguir carregar o arquivo .dll, tente ativar a auditoria para o arquivo. Examine os logs de auditoria resultantes no Visualizador de Eventos do Windows para ajudar a determinar porque o upload do arquivo está falhando. Procure uma entrada de falha iniciada pelo usuário representado do Active Directory. Por exemplo, para o usuário representado MYDOMAIN\mytestuser, uma falha no log de auditoria seria semelhante a esta:

    A handle to an object was requested.
    
    Subject:
        Security ID:        MYDOMAIN\mytestuser
        Account Name:       mytestuser
        Account Domain:     MYDOMAIN
        Logon ID:           0xCF23A8
    
    Object:
        Object Server:      Security
        Object Type:        File
        Object Name:        <path information>\sapcrypto.dll
        Handle ID:          0x0
        Resource Attributes:    -
    
    Process Information:
        Process ID:     0x2b4c
        Process Name:   C:\Program Files\On-premises data gateway\Microsoft.Mashup.Container.NetFX45.exe
    
    Access Request Information:
        Transaction ID:     {00000000-0000-0000-0000-000000000000}
        Accesses:           ReadAttributes
    
    Access Reasons:     ReadAttributes: Not granted
    
    Access Mask:        0x80
    Privileges Used for Access Check:   -
    Restricted SID Count:   0
    

Rastreamento de CommonCryptoLib

  1. Ative o rastreamento de CommonCryptoLib adicionando essas linhas ao arquivo sapcrypto.ini criado anteriormente:

    ccl/trace/level=5
    ccl/trace/directory=<drive>:\logs\sectrace
    
  2. Altere a opção ccl/trace/directory para um local em que os membros do grupo de Usuários Autenticados possam gravar.

  3. Como alternativa, crie um arquivo .ini para alterar esse comportamento. No mesmo diretório de sapcrypto.ini e sapcrypto.dll, crie um arquivo chamado sectrace.ini, com o conteúdo a seguir. Substitua a opção DIRECTORY por um local no computador em que os membros do grupo Usuários Autenticados possam gravar:

    LEVEL = 5
    DIRECTORY = <drive>:\logs\sectrace
    
  4. Reproduza o problema e verifique se a localização apontada por DIRECTORY contém arquivos de rastreamento.

  5. Ao terminar, desative o rastreamento CPIC e CCL.

    Para obter mais informações sobre o rastreamento de CommonCryptoLib, confira Nota SAP 2491573 (usuário s SAP necessário).

Representação

Esta seção descreve os sintomas de solução de problemas e as etapas de resolução para problemas de representação.

Sintoma: ao examinar o GatewayInfo[date].log, você encontrará uma entrada semelhante à seguinte: Prestes a representar DOMÍNIO\Usuário (IsAuthenticated: True, ImpersonationLevel: Impersonation) . Se o valor de ImpersonationLevel for diferente de Impersonation, a representação não estará acontecendo corretamente.

Resolução: siga as etapas do artigo Conceder à conta de serviço do gateway direitos de política local no computador do gateway. Reinicie o serviço de gateway depois de alterar a configuração.

Validação: atualize ou crie o relatório e colete o GatewayInfo[date].log. Abra o arquivo de log GatewayInfo mais recente e verifique novamente a seguinte cadeia de caracteres: Prestes a representar DOMÍINO\Usuário (IsAuthenticated: true, ImpersonationLevel: Impersonation) para garantir que o valor de ImpersonationLevel corresponda a Impersonation.

Delegação

Os problemas de delegação geralmente aparecem no serviço do Power BI como erros genéricos. Para determinar se a delegação é o problema, é útil coletar os rastreamentos do Wireshark e usar o Kerberos como filtro. Confira uma referência de erros do Kerberos na postagem no blog. O restante desta seção descreve os sintomas de solução de problemas e as etapas de resolução para problemas de delegação.

Sintoma: no serviço do Power BI, você poderá encontrar um erro inesperado, semelhante à captura de tela a seguir. o GatewayInfo[date].log que você verá [DM.GatewayCore] ingerindo uma exceção durante a tentativa de execução da consulta Ado para clientPipelineId e a importação [0D_NW_CHANN] não corresponde a nenhuma exportação.

Screenshot of unhelpful error

No Mashup[date].log, você vê o erro genérico GSS-API(maj): nenhuma credencial foi fornecida.

Analisando os rastreamentos de CPIC (sec-Microsoft.Mashup*.trc), você verá algo semelhante ao seguinte:

[Thr 4896] *** ERROR => SncPEstablishContext() failed for target='p:CN=BW5' [sncxxall.c 3638]
[Thr 4896] *** ERROR => SncPEstablishContext()==SNCERR_GSSAPI [sncxxall.c 3604]
[Thr 4896] GSS-API(maj): No credentials were supplied
[Thr 4896] Unable to establish the security context
[Thr 4896] target="p:CN=BW5"
[Thr 4896] <<- SncProcessOutput()==SNCERR_GSSAPI
[Thr 4896]
[Thr 4896] LOCATION CPIC (TCP/IP) on local host HNCL2 with Unicode
[Thr 4896] ERROR GSS-API(maj): No credentials were supplied
[Thr 4896] Unable to establish the security context
[Thr 4896] target="p:CN=BW5"
[Thr 4896] TIME Thu Oct 15 20:49:31 2020
[Thr 4896] RELEASE 721
[Thr 4896] COMPONENT SNC (Secure Network Communication)
[Thr 4896] VERSION 6
[Thr 4896] RC -4
[Thr 4896] MODULE sncxxall.c
[Thr 4896] LINE 3604
[Thr 4896] DETAIL SncPEstablishContext
[Thr 4896] SYSTEM CALL gss_init_sec_context
[Thr 4896] COUNTER 3
[Thr 4896]
[Thr 4896] *** ERROR => STISEND:STISncOut failed 20 [r3cpic.c 9834]
[Thr 4896] STISearchConv: found conv without search

O erro se torna mais claro nos sectraces da máquina do Gateway sec-Microsoft.Mashup.Con-[].trc:

[2020.10.15 20:31:38.396000][4][Microsoft.Mashup.Con][Kerberos ][ 3616] AcquireCredentialsHandleA called successfully.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] InitializeSecurityContextA returned -2146893053 (0x80090303). Preparation for kerberos failed!
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Getting kerberos ticket for 'SAP/BW5' failed (user name is affonso_v@HANABQ.COM)
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 18: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 17: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 23: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 3: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.

Você também poderá ver o problema se examinar os rastreamentos de WireShark.

Screenshot of tracing program showing an error

Observação

Os outros erros KRB5KDC_ERR_PREAUTH_REQUIRED podem ser ignorados com segurança.

Resolução: adicione um SPN SAP/BW5 a uma conta de serviço. Informações e etapas detalhadas estão disponíveis na documentação do SAP.

Você poderá encontrar um erro semelhante, mas não idêntico, que se manifesta em rastreamentos do WireShark como o seguinte erro KRB5KDC_ERR_BADOPTION:

Screenshot of WireShark program showing a different error

Esse erro indica que o SPN SAP/BW5 pode ser encontrado, mas não está nos Serviços aos quais essa conta pode apresentar credenciais delegadas na guia Delegação da conta de serviço do Gateway. Para corrigir esse problema, siga as etapas em Configurar a conta de serviço do gateway para delegação restrita de Kerberos padrão.

Validação: a configuração adequada impedirá que erros genéricos ou inesperados sejam apresentados pelo gateway. Se você ainda vir erros, verifique a configuração do próprio gateway ou a configuração do servidor BW.

Erros de credenciais

Esta seção descreve os sintomas de solução de problemas e as etapas de resolução para problemas de erros de credenciais. Você também poderá ver erros genéricos do serviço do Power BI, conforme descrito na seção anterior sobre delegação.

Há diferentes soluções com base nos sintomas que você observar na fonte de dados (SAP BW), portanto, revisaremos ambos.

Sintoma 1: nos sectraces sec-disp+work[].trc do servidor BW, você verá rastreamentos semelhantes a:

[2020.05.26 14:21:28.668325][4][disp+work ][SAPCRYPTOLIB][435584] { gss_display_name [2020.05.26 14:21:28.668338][4][disp+work ][GSS ][435584] gss_display_name output buffer (41 bytes) [2020.05.26 14:21:28.668338][4][disp+work ][GSS ][435584] CN=DAVID@XS.CONTOSO.COM@CONTOSO.COM

Resolução: conclua as etapas de configuração para definir parâmetros de configuração de mapeamento de usuário no computador do gateway, se necessário. É necessário concluir essas etapas mesmo que já tenha configurado o Microsoft Entra Connect.

Validação: você poderá carregar o relatório com êxito no serviço do Power BI. Se o carregamento não for bem-sucedido, confira as etapas no sintoma 2.

Sintoma 2: nos sectraces sec-disp+work[].trc do servidor BW, você verá rastreamentos semelhantes a:

[2020.10.19 23:10:15.469000][4][disp+work.EXE ][SAPCRYPTOLIB][ 4460] { gss_display_name
[2020.10.19 23:10:15.469000][4][disp+work.EXE ][GSS ][ 4460] gss_display_name output buffer (23 bytes)
[2020.10.19 23:10:15.469000][4][disp+work.EXE ][GSS ][ 4460] CN=DAVID@CONTOSO.COM

Resolução: verifique se a ID externa do Kerberos para o Usuário corresponde ao que os sectraces estão mostrando.

  1. Abra o Logon do SAP.
  2. Use a transação SU01.
  3. Edite o usuário.
  4. Navegue até a guia SNC, verifique se o nome do SNC corresponde ao que é mostrado em seus logs.

Validação: quando concluída corretamente, você poderá criar e atualizar relatórios no serviço do Power BI.

Para saber mais sobre o gateway de dados local e o DirectQuery, confira estes recursos: