CORRECÇÃO: Quando você executar um programa ou um script de navegador da Web que usa o objeto de comando na interface de programação do ADO para executar um SQL Server procedimento armazenado, você pode receber uma mensagem de erro "Permissão EXECUTE negada no objeto..." no SQL Server 2000

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 819829
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Bug #: 469385 (SQL Server 8.0)

A Microsoft distribui correções do SQL Server 2000 como um arquivo para download. Como as correções são cumulativas, cada versão nova contém todos os hotfixes e todas as as correções de segurança que foram incluídas com o SQL Server 2000 anterior corrigir lançamento.
Sintomas
Quando você executa um programa ou procedimento armazenado de um script de navegador da Web que usa o objeto de comando na programação do Microsoft ActiveX Data Objects (ADO) interface para executar um SQL Server, poderá receber uma mensagem de erro semelhante à seguinte:

EXECUTE permissão negada no objeto '< Aninhado Nome do Procedimento >', '< Nome do banco de Dados >', do banco de dados proprietário '< Nome do Proprietário >'.

Esse problema ocorre quando todas as seguintes condições forem verdadeiras:
  • A instrução Transact-SQL EXECUTE que é usada para chamar o procedimento armazenado é preparada usando a propriedade Prepare do objeto Command .
  • O procedimento armazenado principal que é executado a partir do programa ou o script de navegador da Web faz uma chamada para um procedimento armazenado aninhado.
  • A conta de usuário que é usada para conectar ao SQL Server banco de dados tem permissões EXECUTE o procedimento armazenado principal, mas não tem EXECUTE permissões no procedimento armazenado aninhado.
Resolução

Informações sobre o service pack

Para resolver esse problema, obtenha o service pack mais recente para o Microsoft SQL Server 2000. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
290211Como obter o SQL Server 2000 service pack mais recente

Informações sobre o hotfix

A versão em inglês deste hotfix tem atributos de arquivo (ou atributos de arquivo posteriores) listados na tabela a seguir. As datas e horas desses arquivos são listadas na hora universal coordenada (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para encontrar a diferença entre o UTC e a hora local, use a guia fuso horário na ferramenta Data e hora no painel de controle.
   Date         Time   Version            Size    File name   -----------------------------------------------------------------------   31-May-2003  06:15  2000.80.818.0      78,400  Console.exe         24-Jun-2003  12:31  2000.80.818.0      33,340  Dbmslpcn.dll        24-Apr-2003  13:42                    786,432  Distmdl.ldf   24-Apr-2003  13:42                  2,359,296  Distmdl.mdf   29-Jan-2003  13:25                        180  Drop_repl_hotfix.sql   23-Jun-2003  10:10  2000.80.837.0   1,557,052  Dtsui.dll           23-Jun-2003  10:10  2000.80.837.0     639,552  Dtswiz.dll          23-Apr-2003  14:21                    747,927  Instdist.sql   02-May-2003  13:26                      1,581  Inst_repl_hotfix.sql   07-Feb-2003  18:10  2000.80.765.0      90,692  Msgprox.dll         31-Mar-2003  13:37                      1,873  Odsole.sql   04-Apr-2003  13:16  2000.80.800.0      62,024  Odsole70.dll        07-May-2003  08:11  2000.80.819.0      25,144  Opends60.dll        02-Apr-2003  09:18  2000.80.796.0      57,904  Osql.exe            02-Apr-2003  10:45  2000.80.797.0     279,104  Pfutil80.dll        22-May-2003  10:27                     19,195  Qfe469571.sql   12-Jun-2003  04:07                  1,083,989  Replmerg.sql   04-Apr-2003  09:23  2000.80.798.0     221,768  Replprov.dll        07-Feb-2003  18:10  2000.80.765.0     307,784  Replrec.dll         04-May-2003  11:35                  1,085,874  Replsys.sql   31-May-2003  12:31  2000.80.818.0     492,096  Semobj.dll          31-May-2003  05:57  2000.80.818.0     172,032  Semobj.rll   28-May-2003  11:59                    115,944  Sp3_serv_uni.sql   31-May-2003  12:31  2000.80.818.0   4,215,360  Sqldmo.dll          07-Apr-2003  05:14                     25,172  Sqldumper.exe       19-Mar-2003  05:50  2000.80.789.0      28,672  Sqlevn70.rll   01-Jul-2003  11:48  2000.80.834.0     180,736  Sqlmap70.dll        07-Feb-2003  18:10  2000.80.765.0      57,920  Sqlrepss.dll        23-Jun-2003  10:10  2000.80.837.0   7,553,105  Sqlservr.exe        07-Feb-2003  18:10  2000.80.765.0      45,644  Sqlvdi.dll          24-Jun-2003  12:31  2000.80.818.0      33,340  Ssmslpcn.dll        31-May-2003  12:31  2000.80.818.0      82,492  Ssnetlib.dll        31-May-2003  12:31  2000.80.818.0      25,148  Ssnmpn70.dll        31-May-2003  12:31  2000.80.818.0     158,240  Svrnetcn.dll        31-May-2003  06:29  2000.80.818.0      76,416  Svrnetcn.exe        30-Apr-2003  11:22  2000.80.816.0      45,132  Ums.dll             01-Jul-2003  11:49  2000.80.834.0      98,816  Xpweb70.dll      
Observação Devido às dependências do arquivo, o hotfix mais recente ou o recurso que contém esses arquivos também pode conter arquivos adicionais.
Como Contornar
Para contornar o problema, use um dos seguintes métodos.

Método 1

Em seu programa ou no seu script de navegador da Web, não prepare a instrução para chamar o procedimento armazenado. Para fazer isso, defina a propriedade Prepare do objeto Command como FALSE.

Método 2

No banco de dados SQL Server e conceda permissões EXECUTE no procedimento armazenado aninhada à conta de usuário que é usado pelo programa ou pelo script de navegador da Web para se conectar ao banco de dados.

Observação Contate o administrador de banco de dados do SQL Server antes de você conceder EXECUTE permissões à conta de usuário.

Método 3

Insira uma instrução SELECT fictícia no procedimento armazenado principal logo antes da instrução EXECUTE que chama o aninhadas procedimento armazenado e re-compile, em seguida, o procedimento armazenado principal. A instrução SELECT fictícia pode ser semelhante à seguinte:
select 1
Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".Esse problema foi corrigido primeiro no Microsoft SQL Server 2000 Service Pack 4.
Mais Informações
Se a conta de usuário tiver permissões EXECUTE no procedimento armazenado principal, o procedimento armazenado principal deve chamar o procedimento aninhado com êxito, mesmo se a conta de usuário não tiver permissões EXECUTE no procedimento armazenado aninhado.

Passos para reproduzir o problema

  1. Inicie o SQL Query Analyzer.
  2. Faça logon no seu banco de dados SQL Server como o sistema de administrador.
  3. Execute o seguinte script Transact-SQL usando o SQL Query Analyzer.

    Observação Se testlogin é um nome de usuário válido e mainproc e nestedproc são nomes de procedimento armazenado válido para seu banco de dados SQL Server, você deve substitui-los com um nome de usuário diferente e nomes diferente de procedimento armazenado.
    use pubsgo-- Create the nestedproc stored procedurecreate procedure nestedprocasbegin	declare @i int	select 'OK'endgo-- Create the mainproc stored procedurecreate procedure mainproc asbegin	declare @i int	set @i=1	--  Nested stored procedure call	exec nestedprocendgo-- Create login and grant accessexec sp_addlogin 'testlogin'exec sp_grantdbaccess 'testlogin','testlogin'exec sp_defaultdb 'testlogin','pubs'grant execute on mainproc to testlogingo
  4. Crie um arquivo de script Microsoft Visual Basic que é chamado Test.vbs usando o código a seguir.

    Observação Substitua o SQL Server Name pelo nome da sua instância do SQL Server.
    Dim cnDim cmdDim rsDim paramsDim paramset cn=createobject("ADODB.Connection")set cmd=createobject("ADODB.Command")set rs=createobject("ADODB.Recordset")cn.Provider = "SQLOLEDB"cn.Open "Data Source = <SQL Server Name>", "testlogin"Set cmd.ActiveConnection = cncmd.CommandType = &H0004cmd.CommandText = "mainproc"cmd.CommandTimeout = 0' Prepare the commandcmd.Prepared = True     Set rs = cmd.ExecuteWscript.echo rs(0)cn.CloseSet cmd = NothingSet cn = Nothing
  5. Execute o arquivo de script do Microsoft Visual Basic Test.vbs .
Referências
Para obter informações adicionais sobre atualizações de software, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
824684Descrição da terminologia padrão que é usada para descrever as atualizações de software
Para obter mais informações sobre permissões de execução em procedimentos armazenados aninhados, visite o seguinte site e consulte a seção permissões :

Propriedades

ID do Artigo: 819829 - Última Revisão: 12/08/2015 02:39:23 - Revisão: 5.4

Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2000 Workgroup Edition, Microsoft SQL Server 2000 Desktop Engine (Windows), Microsoft SQL Server 2000 Enterprise Edition 64-bit

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbqfe kbstoredproc kbsqlprog kbscript kbprogramming kbappdev kberrmsg kbcode kbsqlserv2000presp4fix kbfix kbbug KB819829 KbMtpt
Comentários