none
Usuário que executa xp_cmdshell RRS feed

  • Pergunta

  • Estou fazendo uma cópia de arquivos através do "xp_cmdshell". Se eu não me engano, ele roda os comandos DOS com o usuário SYSTEM correto? Eu preciso saber o usuário que tenho que dar permissão na pasta de destino para que eu consiga copiar o arquivo entre os servidores.

    Hoje a cópia está funcionando com a pasta compartilhada para everyone (FULLCONTROL), e obviamente, não quero deixar está permissão. Alguém saberia me dizer para qual usuário preciso dar permissão de leitura e escrita nesta pasta??

    OBS.: Todos os serviços do SQL Server estão rodando com o usuário LocalSystem.


    Igor Auler

    quinta-feira, 31 de janeiro de 2013 19:21

Todas as Respostas

  • Igor, como é o modo de autenticação da sua base, mixed ou windows authentication ? acredito que ser for windows deva dar permissão ao usuario de rede que esta logado no sql.

    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quinta-feira, 31 de janeiro de 2013 19:41
  • O modo de autenticação da minha instância é MIXED, e esta cópia é executada por um JOB, por isso eu falei o usuário do serviço, desculpe, esqueci de informar isto. E como o usuário que roda o serviço é o LOCAL SYSTEM, eu não sei para qual usuário eu devo dar permissão na pasta do OUTRO servidor. Já tentei dar permissão para o SYSYTEM e não funcionou.

    Igor Auler

    quinta-feira, 31 de janeiro de 2013 19:56
  • Igor,

    A questão é a seguinte, para rodar a xp_cmdshell a conta de usuário existente no SQL Server tem que ter um perfil de administrador.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]


    segunda-feira, 4 de fevereiro de 2013 13:28
  • Junior,

             o processo já está funcionando, mas está funcionando da seguinte maneira:

    • Tive que dar FULL CONTROL para EVERYONE na pasta de destino dos arquivos.

    Gostaria de dar permissão apenas para o usuário necessário para que eu consiga fazer a cópia e não para everyone.


    Igor Auler

    segunda-feira, 4 de fevereiro de 2013 13:59
  • Igor,

    Então, mas qual é a conta de usuário que você esta utilizando no SQL Server?

    O recomendável é que você pegue uma conta do seu windows, configure ela no SQL Server e de permissões na pasta que você deseja.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    segunda-feira, 4 de fevereiro de 2013 15:13
  • O modo de autenticação da minha instância é MIXED, e esta cópia é executada por um JOB, por isso eu falei o usuário do serviço, desculpe, esqueci de informar isto. E como o usuário que roda o serviço é o LOCAL SYSTEM, eu não sei para qual usuário eu devo dar permissão na pasta do OUTRO servidor. Já tentei dar permissão para o SYSYTEM e não funcionou.

    Igor Auler

    Junior,

            não quero ser arrogante, sei que vc sempre está tentando ajudar, mas po ta tudo escrito nas respostas acima... Eu sei que deveria rodar o serviço do Agent com uma conta AD, mas estou rodando com a conta LOCAL SYSTEM e gostaria de saber se existe um usuário especifico que eu possa dar acesso na pasta de destino ou só dando acesso para EVERYONE? Se for só dando para EVERYONE eu vou pedir para que se crie uma conta no AD com as devidas permissões.

             Mas de qualquer jeito, valeu pela ajuda.


    Igor Auler

    segunda-feira, 4 de fevereiro de 2013 18:32
  • Igor,

    Perfeito, peço desculpas se não percebi que você havia informado o Local System. Normalmente a Local System é uma conta de usuário que esta criada na máquina e conectado neste momento.

    Acredito que seja a sua própria conta de usuário!!!

    Um possibilidade seria adicionar os grupos de usuários que o próprio SQL Server cria durante a instalação nesta pasta em que você esta trabalhando.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quarta-feira, 6 de fevereiro de 2013 13:22
  • Junior,

            o servidor local que eu estou pegando o arquivo está ok, pq ele acessa com o LOCAL SYSTEM que é administrador da maquina. O problema é o servidor destino que estou copiando o arquivo, que no caso pode nem existir SQL Server instalado, logo não terá estes grupos. Vou acabar optando por criar um usuário no AD e dando permissão para ele. Mas acho que isto vai ficar para quando voltar de férias, assim que fizer eu dou um feedback aqui, mas caso alguém descubra o usuário que ele utiliza no servidor de destino (para o qual estou copiando o arquivo), favor avisar aqui :).

    Abs,

       obrigado pela ajuda de todos.


    Igor Auler

    quarta-feira, 6 de fevereiro de 2013 13:36
  • Igor,

    Neste caso esse é o caminho, definir uma conta de usuário no seu AD específica para esta finalidade e dar as devidas permissões tanto no SQL Server como no Windows e suas pastas.

    Minha sugestão coloque esta usuário no grupo Backup Operators.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quarta-feira, 6 de fevereiro de 2013 13:39
  • Igor,

    Uma vez que o script esta sendo executado pelo agent, a não ser que no momento da execução seja especificado algum usuario com certificado externo ele baterá no ambiente windows com o usuario do SQL Server.

    Para não fugir a regra, sou obrigado a comentar que não é uma boa pratica deixar desta maneira, ou crie um usuario com permissão de subir serviço no AD e o utilize ou então (Melhor ainda) um usuario com os mesmos privilegios porem local na maquina.

    Agora....Corrigindo seu problema sem mexer no seu ambiente:

    O Local System é um usuario normal! Portanto ele que deve ter permissão na base, a questão é só saber aonde encontra-lo, veja conforme print abaixo (O meu esta em portugues):


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    sexta-feira, 15 de fevereiro de 2013 16:21
    Moderador
  • Fabrizzio,

    Concordo plenamente com você e também trabalho desta forma, utilizando uma conta específica para se trabalhar com os serviços do SQL Server, dentro do meu ambiente.

    O que normalmente acontece é uma pequena confusão por parte dos profissionais de rede em determinar para seus usuários que para este tipo de situação deve ser utilizado a conta local como garantia para execução dos serviços, ai que vai a questão.

    Será que esta conta local que esta sendo utilizado no momento possui um nível de permissão capaz de realizar este tipo de procedimento?

    Algo que somente o administrador da rede poderá responder.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sábado, 16 de fevereiro de 2013 11:04