Como posso conceder acesso somente leitura ao meu banco de dados do SQL Server 2008?

1

Estou tentando conceder acesso somente leitura (em outras palavras: selecione apenas as consultas) para uma conta de usuário no meu banco de dados do SQL Server 2008 R2. Quais direitos tenho para conceder ao usuário para que isso funcione?

Eu tentei vários tipos de combinações de permissões no servidor e no próprio banco de dados, mas em todos os casos o usuário ainda podia executar consultas de atualização ou ele não podia executar nenhuma consulta (nem mesmo selecionar). A mensagem de erro que sempre recebi foi

The server principal "foo" is not able to access the database "bar" under the current security context.

Obrigado pela sua ajuda,

Adrian

    
por Adrian Grigore 10.01.2011 / 16:18

2 respostas

2

Eu costumo fazer algo ao longo destas linhas:

USE [test]
GO
CREATE USER [ReadOnlyUser] FOR LOGIN [LOCALNT\ReadOnlyNTUser]
GO
EXEC sp_addrolemember N'db_datareader', N'ReadOnlyUser'
    
por 10.01.2011 / 16:28
2

O primeiro passo é criar um usuário com permissões somente db_datareader.

Mas não pare por aí. Se este é um login para uma pessoa real que pode executar qualquer consulta SELECT que quiser, eles ainda podem causar um lote de problemas para um banco de dados. Esse problema comum aqui não é nem mesmo um usuário mal-intencionado - apenas alguém ignorante sobre sua indexação, ajuste de desempenho e escrita eficiente de consultas. É muito fácil criar uma situação de negação de serviço em uma caixa sql dessa maneira.

Eu só sei fazer isso por consulta, mas pelo menos eu conheço algumas opções:

  1. Limitar registros retornados por SET ROWCOUNT .
  2. Use SET QUERY_GOVERNOR_COST_LIMIT . (Observe que o ajuste pode ser complicado).

Para forçar um usuário a incluí-los em suas consultas, no passado usei um procedimento armazenado que primeiro executou os SETs apropriados antes de executar a consulta fornecida (no contexto do usuário somente leitura correto).

    
por 10.01.2011 / 17:11