Depois do cansativo dia de ontem, quando saí do confortável mundo da progração C# e fui para o tenebroso território das permissões, autorizações, auditoria e configurações de arquivos, usuários, serviços e grupos, finalmente cheguei em uma solução para meu problema (exceção System.InvalidOperationException, com a seguinte mensagem: Não é possível abrir o serviço RoboMovimentacaoServico no computador ‘‘nome_servidor’ sendo que a InnerException foi Access is denied).
Segui o conselho do Craig Box e baixei o SubInAcl pra dar permissões no windows service, mas o que mais me ajudou foi uma página da Microsoft ensinando a conceder aos usuários direitos para gerenciar os serviços no Windows 2000, mas que também é válido para o Windows 2003.
O primeiro passo foi dar permissão total para o usuário da aplicação (sendo nome_servidor o nome do servidor, nome_usuário o nome do usuário, nome_grupo o nome do grupo e RoboMovimentacaoServico o nome do serviço):
[code]subinacl.exe /service \\nome_servidor\RoboMovimentacaoServico /GRANT=nome_usuário[/code]
Não funcionou. Então tirei essa permissão e dei permissão pro grupo do usuário:
[code]subinacl.exe /service \\nome_servidor\RoboMovimentacaoServico /REVOKE=nome_usuário
subinacl.exe /service \\nome_servidor\RoboMovimentacaoServico /GRANT=nome_grupo[/code]
Também não funcionou, então tirei essa autorização e dei autorização para os usuários autenticados:
[code]subinacl.exe /service \\nome_servidor\RoboMovimentacaoServico /REVOKE=nome_grupo
subinacl.exe /service \\nome_servidor\RoboMovimentacaoServico /GRANT=”authenticated users”[/code]
Funcionou! Consegui iniciar, parar e ver o status do serviço RoboMovimentacaoServico no servidor de COM através da página em ASP.NET no servidor web!
O próximo passo foi tirar a autorização full e deixar apenas as que eu necessitava. Na tentativa e erro descobri que as necessárias são:
S : Query Service Status (para consultar o status do serviço)
E : Enumerate Dependent Services (para parar o serviço)
T : Start Service (para iniciar o serviço)
O : Stop Service (para parar o serviço)
Então o comando ficou assim:
[code]subinacl.exe /service \\nome_servidor\RoboMovimentacaoServico /GRANT=”authenticated users”=SETO[/code]
Isso seria o mesmo que utilizar o comando abaixo:
[code]sd.exe sdset RoboMovimentacaoServico D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;LCSWRPWP;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)[/code]
Esse comando mudaria o default (A;;U;;;AU) para (A;;LCSWRPWP;;;AU).
Em desenvolvimento não tive de alterar nada, em TI tive todo esse trampo. Em homologação, certificação e produção muito provavelmente nada poderei fazer… não sei como é a configuração dos ambientes e muito menos terei acesso para executar o SC.exe, pois o SubInAcl.exe não está instalado nesses servidores.
Amanhã tentarei conceder essas autorizações sem precisar autorizar todos os usuários autenticados.
Bom dia, estou com um problema, tenho o windows 2003 server, e gostaria de dar acesso a usuários comuns para administrar alguns serviços, e mesmo usando o sublnAcl não consegui realizar a tarefa. Tem como me ajudar.
Grato
Junior, não sei… mexi só nesse momento e depois nunca mais voltei a mexer com administração de Windows.