Esiste un modo per concedere a un utente l'accesso solo a tutte le viste non di sistema del database?


9

In SQL Server, ho un utente in un determinato database e mi è stato chiesto di concedere loro l'accesso a tutte le viste non di sistema del database. Credo che ciò possa essere fatto modificando i valori mobiliari di tipo view e concedendo la selezione su ciascuno, ma ci sono molte, molte viste. C'è un modo più efficiente per raggiungere questo obiettivo?

Risposte:


8

Non esiste sintassi come

GRANT SELECT ON ALL::Views TO SomeUser 

Puoi includere GRANT SELECTautorizzazioni su singoli oggetti , schemi o sull'intero database ma non filtrati per tipo di oggetto per includere solo le viste. Per questo tipo di attività ad hoc probabilmente creerei un nuovo ruolo chiamato ViewReader, aggiungere l'utente a quel ruolo, quindi nell'esecuzione di SSMS

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

per generare uno script da eseguire con GRANTle autorizzazioni richieste.


Grazie per la risposta estremamente aggraziata. La sceneggiatura è un po 'sopra la mia testa, quindi farò qualche lettura prima di provare a implementarla. Grazie ancora.
Christopher Garcia,

1
@lush - Lo script fornisce solo alcuni comandi per rivedere, copiare, incollare ed eseguire. Potresti fare qualcosa di più elaborato per concatenare il risultato e EXECnon mi preoccuperei per un compito unico.
Martin Smith,

Capisco ora, questa è una soluzione perfetta per questo problema, grazie!
Christopher Garcia,

4

Ho adottato un altro approccio nel mio caso. Questo è quello che ho fatto:

  1. Crea un login e mappalo su un database.
  2. Vai a un database e crea uno schema chiamato Public_View per esempio. Il proprietario di questo schema deve essere lo stesso proprietario delle tabelle a cui faranno riferimento le viste.
  3. Concedi al nuovo utente l'accesso al nuovo schema.
  4. Crea tutte le visualizzazioni che desideri nel nuovo schema e il nuovo utente avrà accesso ad esse.

La cosa buona è che il nuovo utente non avrà accesso alle tabelle, non sarà nemmeno in grado di vedere le tabelle.

Spero possa essere d'aiuto.


4
+1 Per me la cosa positiva di questa soluzione sulla mia è che non è necessario assegnare esplicitamente le autorizzazioni quando vengono create nuove viste.
Martin Smith,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.