Conceder acceso a todas las tablas de una base de datos

13

Hace poco quería compartir derechos de acceso regulares con un usuario de un servidor y me di cuenta de que un simple CREATE USERy los GRANT ALL ON DATABASEcomandos no le permitieron ejecutar un simple SELECTen los datos.

Me gustaría otorgar derechos a todas las tablas de una base de datos dada a un usuario específico, pero no estoy seguro de si es la mejor idea otorgarle acceso a todo el esquema, publicya que no sé si permitiría algún tipo de privilegio escalada. ¿Hay alguna otra manera?

d33tah
fuente
¿Por qué no puedes simplemente GRANT SELECT ON TableName TO [Domain\User]? Por lo general, solo asigno usuarios a la db_datareaderfunción si todo lo que necesitan es acceso de lectura a todas las tablas, pero no estoy seguro de cuán granular quiere ser.
Kris Gruttemeyer
Me gustaría otorgar todos los CRUD a todas las tablas de la base de datos. Además, DROPping and CREATEing dentro de esta base de datos también podría resultar útil.
d33tah

Respuestas:

19

El privilegio DATABASEsolo otorga derechos de conexión generales a la base de datos y no más. Un usuario con ese privilegio solo puede ver lo que el público en general puede ver.

Para otorgar acceso de lectura a todas las tablas , también necesita privilegios en todos los esquemas y tablas:

GRANT USAGE ON SCHEMA public TO myuser; -- more schemas?
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

También es posible que desee establecer privilegios predeterminados para futuros esquemas y tablas. Corre por cada rol que cree objetos en tu base de datos

ALTER DEFAULT PRIVILEGES FOR ROLE mycreating_user IN SCHEMA public
GRANT SELECT ON TABLES TO myuser;

Pero realmente necesitas entender todo el concepto primero.
Y casi siempre es mejor agrupar privilegios en roles grupales y luego otorgar / revocar el rol grupal a / desde roles de usuario. Relacionado:

Erwin Brandstetter
fuente
Es myusrun error tipográfico? ¿No debería ser myuser?
attomos
1
@attomos: se supone que es un usuario diferente en el ejemplo. Aclaré
Erwin Brandstetter