Negar Modificação de Dados do Procedimento Armazenado por Segurança do Usuário

2

Eu quero uma maneira fácil de criar um usuário somente leitura no meu banco de dados. O usuário deve ter permissão para executar procedimentos armazenados somente se eles não modificarem os dados. Não quero descobrir quais procedimentos armazenados são somente leitura e concedo permissões desse modo porque há muitos para serem processados.

Achei que isso era possível depois de ler o seguinte:

"A stored procedure can require both EXECUTE permission on the stored procedure and INSERT permission on several tables that are referenced by the stored procedure." -- http://technet.microsoft.com/en-us/library/ms191291.aspx

Infelizmente, posso EXECUTAR um procedimento armazenado 'executável' que INSERT em uma tabela de usuário 'somente leitura'.

    
por Mindy 03.12.2009 / 18:18

2 respostas

1

Esse comentário no MSDN simplesmente significa que existem algumas situações (como, por vezes, ao usar o SQL dinâmico) em que a concessão de um EXECUTAR ao usuário no procedimento armazenado não será necessariamente suficiente para permitir que ele seja executado.

O que você quer não pode ser feito - se eles são capazes de executar um procedimento armazenado, eles serão capazes de fazer o que o procedimento armazenado fizer - INSERT, DELETE, UPDATE, whatever. Até mesmo SELECTs podem fazer alterações via SELECT INTO. E há sempre tabelas temporárias ou variáveis de tabela para complicar qualquer tentativa de identificar uma lista de sps seguros / inseguros.

Meu conselho é diminuir o máximo possível o que o usuário somente leitura realmente precisa ler, criar uma função db com permissões EXECUTE para apenas esses objetos e iniciar a partir daí. E espero que você não esteja dando permissões de EXECUTE para a função Public, porque se for assim você terá que DENY EXECUTE em todos os outros procedimentos armazenados também.

    
por 12.12.2009 / 15:46
0

Infelizmente (até onde eu sei) não há como fazer isso. Dando a um usuário (até mesmo um usuário de somente leitura) a habilidade de executar um proc armazenado significa que eles serão capazes de executar qualquer coisa que esteja dentro daquele sproc.

    
por 12.12.2009 / 07:28