Como permitir que as contas não sysadmin executem o procedimento armazenado "xp_cmdshell" alargado no SQL Server 2000


Resumo


Este artigo descreve como configurar uma conta de procuração do Agente SQL do Microsoft Windows para ser utilizada por logins SQL que não são membros da função de servidor fixo sysadmin. Além disso, o artigo contém referências a mais informações para ajudá-lo a resolver problemas que podem ocorrer quando tenta criar uma conta de procuração.

INTRODUÇÃO


O procedimento xp_cmdshell prolongado de armazenação invoca uma concha de comando Do Windows dentro do Microsoft SQL Server 2000. Quando o procedimento de xp_cmdshell prolongado armazenado é executado por um membro da função de servidor fixo sysadmin, o processo do Windows da concha de comando funciona com o contexto de segurança da conta de serviço do Windows do SQL Server. Por exemplo, se o SQL Server estiver a funcionar sob um início de série do Windows que tenha direitos administrativos no computador, o utilizador que abrir uma decisão de comando com o xp_cmdshell procedimento de armazenado alargado receberá acesso ao Windows como administrador local. Por predefinição, a permissão para executar o procedimento de armazenagem xp_cmdshell prolongado é concedida apenas aos membros da função de servidor fixo sysadmin. Esta permissão ajuda a dissuadir a escalada de direitos. Quando pretender iniciar novos processos windows com um nível reduzido de direitos, pode utilizar a conta de procuração do Agente do Servidor SQL para configurar uma conta Windows com o nível de direitos adequado.

Mais Informações


Quando tentar executar o procedimento de xp_cmdshell prolongado armazenado a partir de um login do SQL Server que não é membro da função de servidor sysadmin e a conta de procuração do Agente do Servidor SQL não foi configurada corretamente, pode receber mensagens de erro semelhantes às seguintes:
Msg 50001, Nível 1, Estado 50001 xpsql.cpp: Erro 997 da GetProxyAccount na linha 499
Msg 50001, Nível 1, Estado 50001 xpsql.cpp: Erro 317 da GetProxyAccount na linha 499
Msg 50001, Nível 1, Estado 50001 xpsql.cpp: Erro 0 da GetProxyAccount na linha 499
Msg 50001, Nível 1, Estado 50001 xpsql.cpp: Erro 87 da GetProxyAccount na linha 499
Se tiver de deixar que os utilizadores não sysadmin executem o xp_cmdshell procedimento de armazenagem alargado no SQL Server 2000, tem de configurar a conta proxy e a conta de startups do SQL Server para ser membro do grupo de Administradores Locais. Quando o SQL Server executa trabalhos ou comandos para utilizadores que não sejam membros da função de servidor fixo sysadmin, o SqL Server Agent e o xp_cmdshell procedimento armazenado alargado utilizem a conta proxy. As credenciais de segurança do Windows para a conta proxy estão armazenadas na base de dados Secrets da Autoridade de Segurança Local (LSA). Apenas os administradores do Windows podem aceder a esta informação. Portanto, se a conta de arranque do SQL Server não for membro do grupo de Administradores Locais, o utilizador não pode armazenar ou recuperar as credenciais de segurança do Windows para iniciar sessão como conta de procuração, e o xp_cmdshell procedimento de armazenado alargado falha. Para permitir que os utilizadores não sysadmin executem o xp_cmdshell procedimento armazenado alargado, a conta de arranque do SQL Server deve ser membro do grupo de Administradores Locais. Para configurar uma conta proxy para logins do SQL Server que não são membros da função de servidor fixo sysadmin, utilize um dos seguintes métodos.

Método 1: Utilizar o Gestor empresarial do SQL Server

Configurar a conta do Windows

Para definir a conta do Windows para permitir que utilizadores não sysadmin executem o procedimento de xp_cmdshell prolongado armazenado, siga estes passos:
  1. Inicie o GESTOR DE Empresas do Servidor SQL.
  2. No SQL Server Enterprise Manager, expanda o Microsoft SQL Servere expanda o SQL Server Group.
  3. Expanda a instância do SQL Server para a que pretende configurar a conta de procuração.
  4. Expandir gestão,clicar com o botão direito do Agente do Servidor SQLe, em seguida, clicar em Propriedades.
  5. Na caixa de diálogo SQL Server Agent Properties, clique no separador Sistema de Trabalho.
  6. Na conta proxy de step proxy não-SysAdmin,clique para limpar os únicos utilizadores com sysAdmin priviledges podem executar caixa de verificação de passos de trabalho CmdExec e ActiveScripting.
  7. Na caixa de diálogo de conta de procuração do agente do servidor SQL,digite o nome da conta Do Windows na caixa de nome de utilizador.
  8. Na caixa de palavra-passe, digite a palavra-passe do Windows.
  9. Na caixa De Domínio, digite o domínio do qual a conta Do Windows é membro e, em seguida, clique em OK duas vezes.

Adicione uma conta de login do SQL Server

Para adicionar uma conta de login do SQL Server que pretende conceder permissões para executar o procedimento de xp_cmdshell prolongado armazenado, siga estes passos:
  1. No SQL Server Enterpise Manager, expandaa Segurança.
  2. No painel de inícios de sessão, clique com o botão direito na conta de login do SQL Server para a que pretende conceder permissões e, em seguida, clique emPropriedades.Nota Se a conta ainda não for adicionada, pode criar uma conta de procuração do Windows como conta de login.
  3. Na caixa de diálogo SQL Server 'Login Properties', clique no separador Base de Dados Access.
  4. Na base de dados 'Especificar' qual a base de dados que pode ser acedida por esta lista de login, clique para selecionar a caixa de verificação de Licença para a base de dados principal e, em seguida, clique em OK.
  5. Expandir bases de dados,expandirmestre,e, em seguida, clicar em estender procedimentos armazenados.
  6. Localize e clique com o botão direito noxp_cmdshell procedimento de armazenação alargado e, em seguida, clique emPropriedades.
  7. Na caixa de diálogo de propriedades de procedimentos armazenados alargados, clique em Permissões.
  8. Clique para selecionar a caixa de verificação EXEC para a conta de login do SQL Server para a que pretende conceder permissões de execução e, em seguida, clique em OK duas vezes.

Método 2: Executar um script Transact-SQL

Execute o seguinte script Transact-SQL para permitir que a conta do Windows execute o procedimento de xp_cmdshell prolongado armazenado:
-- Set database to master.USE masterGO-- Add a valid Windows account as proxy account.EXECUTE xp_sqlagent_proxy_account N'SET'                        , N'<DomainName>'                        , N'<WindowsAccount>'                        , N'<WindowsPassword>'GO-- Get the proxy account to determine whether it is set up correctly. EXECUTE xp_sqlagent_proxy_account N'GET'GO-- Enable non-system administrators to run the job and to execute xp_cmdshell.EXECUTE msdb..sp_set_sqlagent_properties @sysadmin_only = 0GO
Nota Neste script, <>de Domínio é o domínio do qual a conta Do Windows é membro. <>do WindowsAccount é o nome da conta do Windows. <>do WindowsPassword é a palavra-passe da conta Do Windows. Para adicionar a conta de login do SQL Server que pretende conceder permissão para executar o procedimento de xp_cmdshell prolongado armazenado, execute o seguinte script Transact-SQL:
USE masterGO-- Grant database access to the SQL Server login account that you want to provide access.EXEC sp_grantdbaccess '<SQLLogin>'GO-- Grant execute permission on xp_cmdshell to the SQL Server login account.GRANT exec ON xp_cmdshell TO <SQLLogin>GO
Nota Neste script, <>SQLLogin é o login do SQL Server que pretende conceder permissão para executar o procedimento de xp_cmdshell prolongado armazenado.Nota A conta proxy é a conta do Windows em cujo contexto de segurança são executados os trabalhos do Agente do Servidor SQL ou comandos de linha de comando. Quando configurar a conta do Windows para a conta de procuração do Agente do Servidor SQL, tem de dar à conta o utilizador de nível Windows "Iniciar sessão como um trabalho de lote".

Referências


Para obter mais informações sobre o procedimento de xp_cmdshell de armazenado alargado, consulte o tópico "Referência Transact-SQL" em SQL Server Books Online. Para obter mais informações sobre a conta de procuração do Agente do Servidor SQL, visite os seguintes web sites da Microsoft Developer Network (MSDN):Para obter mais informações sobre como definir permissões apropriadas na conta proxy, clique no seguinte número de artigo para ver o artigo na Base de Conhecimento da Microsoft:
283811 Como alterar a conta de serviço do SqL Server ou sql Server Agent sem utilizar o SQL Enterprise Manager no SQL Server 2000 ou o SQL Server Configuration Manager no SQL Server 2005