Crear un rol de base de datos para permitir el acceso de lectura a todas las tablas; acceso de escritura a algunos

9

Tenemos una base de datos con más de 1000 tablas. Necesito crear un rol que permita la lectura solo en todas las tablas, así como el acceso de escritura a dos tablas específicas.

Estaba jugando con los roles de la base de datos, pero cada vez que iba a agregar las tablas, tenía que seleccionar a mano los 1000 ... ¿hay una mejor manera de hacer esto?

Wes
fuente
En realidad, esa podría ser la forma más simple ... ¿Hay alguna manera de escribir eso? Necesito mantener un conjunto de scripts para cada vez que refresquemos una de estas bases de datos, puedo recuperar toda la configuración al instante.
Wes

Respuestas:

9

La concesión de permisos en el esquema (p dbo. Ej. ) Se aplicará en cascada a todos los objetos en ese esquema. Para excepciones individuales, puede enumerarlas explícitamente:

GRANT SELECT ON SCHEMA::dbo TO [role];
GO

GRANT INSERT, UPDATE --, DELETE
  ON dbo.table_they_can_write_to TO [role];

DENY SELECT ON dbo.table_they_cannot_read TO [role];
Aaron Bertrand
fuente
3
Suficientemente fácil. Me alegra que tengamos una comunidad como esta.
Wes
1

Prueba esto :

EXEC sp_MSForEachTable 'GRANT INSERT, UPDATE ON ? to [ROLE]'
druzin
fuente
3
Para su información, esto proporciona acceso de escritura pero no de lectura a todas las tablas, y también ignora el esquema por completo. También sp_MSForEachTablees indocumentado, no es compatible y posiblemente sufra los mismos problemas de omisión quesp_MSForEachDB .
Aaron Bertrand