Existe uma maneira de conceder ao usuário acesso apenas a todas as visualizações não pertencentes ao sistema do banco de dados?

9

No SQL Server, eu tenho um usuário em um banco de dados específico e me pediram para conceder acesso a todas as visualizações não pertencentes ao sistema do banco de dados. Acredito que isso possa ser feito editando os protegíveis do modo de exibição de tipo e concedendo a seleção em cada um, mas há muitos, muitos modos de exibição. Existe uma maneira mais eficiente de conseguir isso?

Christopher Garcia
fonte

Respostas:

8

Não sintaxe como

GRANT SELECT ON ALL::Views TO SomeUser 

Você pode GRANT SELECTpermissões em objetos individuais , esquemas ou em todo o banco de dados, mas não filtrados por tipo de objeto, para incluir apenas Views. Para esse tipo de tarefa ad-hoc, eu provavelmente criaria uma nova função chamada ViewReader, adicione o usuário a essa função e, em seguida, na execução do SSMS

SELECT 'GRANT SELECT ON ' + 
          QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + 
      ' TO ViewReader;'
FROM sys.views
WHERE is_ms_shipped = 0

para gerar um script para executar com GRANTas permissões necessárias.

Martin Smith
fonte
Obrigado pela resposta extremamente graciosa. O script está um pouco acima da minha cabeça, então vou fazer algumas leituras antes de tentar implementar. Obrigado novamente.
Christopher Garcia
11
@lush - O script fornece apenas alguns comandos para revisar, copiar, colar e executar. Você poderia fazer algo mais elaborado para concatenar o resultado, EXECmas eu não me incomodaria com uma tarefa única.
Martin Smith
Eu entendo agora, esta é uma solução perfeita para este problema, obrigado!
21412 Christopher Christopher
4

Adotei outra abordagem no meu caso. Isto é o que eu fiz:

  1. Crie um login e mapeie-o para um banco de dados.
  2. Vá para um banco de dados e crie um esquema chamado Public_View, por exemplo. O proprietário deste esquema deve ser o mesmo proprietário das tabelas às quais as exibições se referirão.
  3. Conceda ao novo usuário acesso ao novo esquema.
  4. Crie quantas visualizações desejar no novo esquema e o novo usuário terá acesso a elas.

O bom é que o novo usuário não terá acesso às tabelas, nem poderá vê-las.

Espero que ajude.

Francisco Goldenstein
fonte
4
+1 Para mim, a coisa boa sobre essa solução sobre a minha é que não há necessidade de atribuir permissões explicitamente quando novas visualizações são criadas.
Martin Smith