¿Hay alguna forma de otorgar acceso a un usuario a todas las vistas de la base de datos que no son del sistema?


9

En SQL Server, tengo un usuario en una base de datos en particular y me han pedido que les otorgue acceso a todas las vistas de la base de datos que no son del sistema. Creo que esto se puede hacer editando asegurables de vista de tipo y otorgando selección en cada uno, pero hay muchas, muchas vistas. ¿Hay una manera más eficiente de lograr esto?

Respuestas:


8

No hay sintaxis como

GRANT SELECT ON ALL::Views TO SomeUser 

Puede otorgar GRANT SELECTpermisos a objetos individuales , esquemas o toda la base de datos, pero no se filtra por tipo de objeto para incluir solo Vistas. Para este tipo de tarea ad hoc probablemente crearía una nueva función llamada ViewReader, agregue el usuario a esa función y luego en la ejecución de SSMS

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

para generar una secuencia de comandos para ejecutar GRANTlos permisos necesarios.


Gracias por la respuesta extremadamente elegante. El guión está un poco sobre mi cabeza, así que leeré un poco antes de intentar implementarlo. Gracias de nuevo.
Christopher Garcia

1
@lush: el script solo le da algunos comandos para revisar, copiar, pegar y ejecutar. Podrías hacer algo más elaborado para concatenar el resultado y EXECno me molestaría en una tarea única.
Martin Smith

Ahora entiendo, esta es una solución perfecta para este problema, ¡gracias!
Christopher Garcia

4

Tomé otro enfoque en mi caso. Esto es lo que hice:

  1. Crear un inicio de sesión y asignarlo a una base de datos.
  2. Vaya a una base de datos y cree un esquema llamado Public_View, por ejemplo. El propietario de este esquema debe ser el mismo propietario de las tablas a las que se referirán las vistas.
  3. Otorgue al nuevo usuario acceso al nuevo esquema.
  4. Cree tantas vistas como desee en el nuevo esquema y el nuevo usuario tendrá acceso a ellas.

Lo bueno es que el nuevo usuario no tendrá acceso a las tablas, ni siquiera podrá ver las tablas.

Espero que ayude.


44
+1 Para mí, lo bueno de esta solución sobre la mía es que no es necesario asignar permisos explícitamente cuando se crean nuevas vistas.
Martin Smith
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.