Executando o pacote SSIS a partir de um procedimento armazenado com diferentes privilégios de usuário


14

Estou tendo problemas para permitir que meus usuários executem pacotes SSIS de uma maneira razoável devido aos vários níveis de privilégios necessários.

O cenário : criamos um armazém de dados, com dois pacotes SSIS diferentes responsáveis ​​por carregá-lo com dados, um deve ser executado automaticamente (por meio de um trabalho do SQL Agent e está funcionando bem) e outro que deve ser executado on- demanda dos usuários quando os dados upstream forem finalizados e limpos etc.

Este pacote executa operações muito privilegiadas, incluindo o backup do banco de dados no início da execução (com certeza, com certeza), eliminando e recriando tabelas calculadas, etc.

Eu escrevi um procedimento armazenado para executar esse trabalho através dos procedimentos armazenados [SSISDB]. [Catalog]. [Create_execution] e [SSISDB]. [Catalog]. [Start_execution] .... isso funciona bem quando executado sob minha conta (Eu sou um administrador de sistemas).

O procedimento armazenado falhou quando executado por um usuário normal, devido ao nível mais alto de permissões necessárias no SSISDB e no MSDB para enfileirar a execução, e o próprio pacote falhou porque está sendo executado no contexto de segurança (baixo).

O que eu tentei :

Tentei resolver o problema usando 'Executar como' no procedimento armazenado, mas isso falhou devido a problemas de encadeamento entre bancos de dados, sinalizador confiável etc.

Também tentei resolver o problema com tarefas do Agente para executar o pacote e apenas executando a tarefa do agente a partir do procedimento armazenado, no entanto, rapidamente entrei em um mundo de dificuldades envolvendo:

  • A incapacidade de definir permissões de execução por trabalho
  • A esperança de configurar esse acesso por meio de uma Função de servidor central para atender à mudança de equipe ao longo do tempo, e os trabalhos podem ter apenas um único usuário como proprietário
  • O mundo sombrio das contas de proxy, credenciais em combinação com logins de autenticação sql etc.

Planos C e D

As únicas opções que posso pensar para mim são criar um logon dedicado do SQL Server com permissões elevadas e confiar nos usuários para não passarem as credenciais / perderem a capacidade de auditoria de quem agendou a importação (como esse problema é resolvido em outras áreas da a organização) ou criar um front-end da Web puramente para permitir que os usuários se autentiquem como sua conta de 'Função de servidor' e, em seguida, deixe o aplicativo Web executar o procedimento armazenado em uma segunda conexão (privilegiada).

Então....

Existe algum conselho sobre como:

  • ter um pacote SSIS executar operações privilegiadas
  • executado por um usuário com pouco privilégio (usando uma conta do Windows AD)
  • de preferência onde o acesso para executar o trabalho seja gerenciado por meio de uma função de servidor central (não tenho a capacidade de criar um novo grupo de janelas para eles)
  • e onde quaisquer novas contas intermediárias / proxy são contas de autenticação do SQL Server (novamente, capacidade muito limitada de fazer alterações no AD)

Entendo que há muitas partes móveis aqui (e algumas parecem lâminas giratórias), então deixe-me saber se há alguma outra informação que você sente que perdi.

Felicidades, Tim

Editar....

Hoje, criei um logon dedicado do SQL Server com permissões ssis_admin, criei três tarefas do SQL Server Agent pertencentes a esse usuário e atualizei o procedimento armazenado que meus usuários finais chamam para execute asesse usuário. Isso falhou devido à incapacidade de chamar create executioncomo um logon do SQL Server, requer uma conta do Windows.

Atualizei o procedimento armazenado dos usuários para execute asa conta do Windows que o SQL Server está executando como (uma conta de serviço do AD), concedeu-o ssis_admine falha com o erro

O contexto de segurança atual não pode ser revertido. Alterne para o banco de dados original onde 'Executar como' foi chamado e tente novamente.

Isso não vai a lugar nenhum rápido :(


1) Eles devem iniciar os pacotes via, create_execution ou seja , precisam especificar parâmetros de execução para o "cenário pronto para os dados?" 2) É seguro assumir que você não está interessado em colocá-los na função ssis_admin?
billinkc

1) Estou usando create_executionporque preciso passar um parâmetro (um dos três valores) do sproc para o trabalho. Estou feliz por ter três sprocs / empregos, etc., se isso resolver. 2) Se ssis_admin é a menor função de privilégio que me leva até lá, eu estou aberto a isso ... é melhor que o sysadmin pelo menos e os resolva acidentalmente eliminando / desativando as tabelas do armazém em uso geral.
Wokket 12/01

A ssis_adminfunção permitiria que eles executassem os pacotes SSIS (os procs verificam a associação nas funções sysadmin ou ssis_admin), mas acho que ele será executado como eles e, portanto, não poderá fazer backups e tal. (Eu precisaria testar isso com certeza, nunca me lembro se ele é executado como eles ou a conta de serviço do SQL Server). No entanto, ser um membro do ssis_admin permite implantar pacotes e confusão com configurações que podem ou não ser boas. 2016 dá-nos papéis mais granulares, mas obviamente não muito uso aqui
billinkc

Eu acho que a menor quantidade de risco seria ter 3 trabalhos codificados que usem a combinação correta de usuários / conta credenciados para alcançar um estado menos privilegiado. Em seguida, eu consideraria conceder a esses usuários a capacidade de executar tarefas ou, à exceção disso, criar três procs usados EXECUTE ASpara permitir que eles executassem tarefas específicas por meio de sp_start_job. Diz o cara internet aleatório que é terrível para a segurança
billinkc

@billinkc Eu acho que o ssis_operator faria
Tom V - try topanswers.xyz

Respostas:


2

Para a posteridade, consegui trabalhar com o seguinte:

  • Alterando o procedimento armazenado chamado pelos usuários ( Admin.RunImport) para 'Executar como' a conta usada pelo Serviço SQL
  • A conta de serviço do SQL Server (uma conta do Serviço Gerenciado do AD) é modificada para ter permissões para executar o sproc Admin, permitindo o uso execute asacima
  • A conta de serviço do SQL Server é modificada para ter funções ssisdb.ssis_admin e msdb.SQlAgentOperator.
  • Este Admin.RunImportprocedimento armazenado enfileira uma das 3 tarefas do agente usando sp_start_jobdependente de um parâmetro passado
    • Esse redirecionamento via SQL Agent é necessário para ignorar o erro de contexto de segurança ssis acima
    • Os trabalhos do agente pertencem a 'sa' e simplesmente executam um procedimento armazenado subjacente ( Raw.hp_Execute_Import_Impl) passando um parâmetro diferente por trabalho.
    • Isso significa que a tarefa do agente é executada sadevido ao privilégio ssis_admin acima, o mesmo que as tarefas agendadas
  • O Raw.hp_Execute_Import_Implprocedimento armazenado enfileira o pacote SSIS sada mesma forma que o normal.

Em vez de poder criar contas dedicadas do Windows para esse fim, acho que isso é tão bom quanto vou conseguir no momento.

Obrigado pela ajuda pessoal!


2
Obrigado por voltar e publicar a solução. Agora, quando você tiver esse problema novamente e esquecer o que fez, poderá pesquisar na Web e encontrará sua própria solução!
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.