segunda-feira, 14 de setembro de 2009

Access Denied: stsadm no Windows 2008 (como Administrador!!!)

Well, well... Sei lá. A Microsoft introduziu o UAC (User Access Control) no Windows Vista e no Windows 2008. O objetivo é evitar que você se descuide e faça alguma besteira em algum lugar importante (p.e., num servidor). As aplicações tem agora dados de access control. A idéia é que aplicações sensíveis só possam ser executadas em "modo administrador". De acordo com o UAC Guide na TechNet, mesmo um usuário administrador, ao logar, recebe dois conjuntos de credenciais de segurança: um como usuário "normal" e outro de administrador. Quando uma aplicação marcada com access control que pede por um usuário administrador é executada, o Windows pede confirmação para executar a aplicação como administrador e, caso sua conta não tenha este direito, ainda abre uma janela de logon para vocês especificar uma conta administrativa.

É uma idéia legal, pois desde criancinha a gente aprende a não dar direitos administrativos para contas de usuários "normais"; nossos pais sempre dizem "crie uma conta administrativa, trabalhe com sua conta de usuário normal, e quando for fazer alguma tarefa mais privilegiada, logue com a conta administrativa". O UAC permite isto, pois exige uma interação explicita do usuário para confirmar que você quer rodar uma aplicação como administrador.



O problema é quando a aplicação exige direitos de administrador e não aparece a janelinha acima. Por exemplo, rodando a ferramenta de linha de comando de administração do SharePoint, o stsadm. Você loga no servidor como administrador, abre um prompt de comando, muda pro diretório do stsadm, roda um comando qualquer de administração do SharePoint e... Access denied. Roda só o help do stsadm: stsadm -?. Access denied. Pô, acesso negado no help? Eita programa seguro. Na verdade, o stsadm precisa de que você o rode com direitos administrativos em relação ao UAC, então mesmo logado como administrador, você precisa abrir o prompt de comando no qual o stsadm será executado como administrador:



Como a aplicação que irá disparar o stsadm (o prompt de comando) já foi aberto com as credenciais de administrador perante o UAC, então, e só então, o stsadm roda.

Ou você pode desabilitar o UAC no servidor. Mas não conta pra ninguém que eu sugeri isto. Sorriso