Não há uma função de banco de dados incorporada para os direitos de execução de procedimentos armazenados no SQL Server 2000. No entanto, o primeiro artigo que você citou realmente contém tudo o que você precisa para resolver completamente o problema. No entanto, tentarei soletrar um pouco mais claramente em um processo passo a passo (que você precisará seguir apenas uma vez para criar a função e, em seguida, executar a última etapa somente sempre que criar uma nova procedimento). Neste procedimento, usarei o nome my_database para o banco de dados que você deseja configurar desta maneira:
-
Crie o procedimento armazenado sp_grantexecute (vinculado desde o primeiro artigo):
use master go create procedure sp_grantexec(@user sysname,@pattern sysname = NULL,@debug int = 0) as set nocount on declare @ret int declare @sql nvarchar(4000) declare @db sysname ; set @db = DB_NAME() declare @u sysname ; set @u = QUOTENAME(@user) set @sql ='select ''grant exec on '' + QUOTENAME(ROUTINE_SCHEMA) + ''.'' + QUOTENAME(ROUTINE_NAME) + '' TO ' + @u + ''' FROM INFORMATION_SCHEMA.ROUTINES ' + 'WHERE OBJECTPROPERTY(OBJECT_ID(ROUTINE_NAME),''IsMSShipped'') = 0' if @pattern is not null set @sql = @sql + N' AND ROUTINE_NAME LIKE ''' + @pattern + '''' if @debug = 1 print @sql else exec @ret = master.dbo.xp_execresultset @sql,@db If @ret <> 0 begin raiserror('Error executing command %s',16,1,@sql) return -1 end
-
Crie uma função personalizada chamada db_executor (repita essa etapa para cada banco de dados no qual você deseja que essa função seja configurada)
USE my_database GO EXEC sp_add_role 'db_executor'
-
Conceder direitos de execução para todos os procedimentos existentes para a nova função (execute apenas esta etapa toda vez que criar um novo procedimento) usando o procedimento sp_grantexecute que você adicionou anteriormente:
USE my_database GO EXEC master.dbo.sp_grantexecute 'db_executor'
Agora, basta atribuir a nova função ( db_executor
) às duas outras funções ( db_datareader
e db_datawriter
) aos usuários que devem ter o acesso que você está procurando.