2009-12-31 6 views
10

Viniendo de MySQL y no saber acerca de las funciones que distraídamente probado esteDiferencia entre ALTER PAPEL CON CREATEDB y Grant cree en TABLESPACE

GRANT CREATE ON TABLESPACE pg_default TO username; 

No tuvo el efecto deseado. El comando que estaba buscando era:

ALTER ROLE username WITH CREATEDB; 

Pero, ¿cuál es la diferencia con precisión? ¿Darle a alguien el rol CREATEDB les da implícitamente CREATE ON TABLESPACE ...? ¿Hay una mesa donde puedo ver todo esto?

Desde el docs, Grant cree en medios TABLESPACE (el subrayado es mío):

Para los espacios de tabla, permite tablas, índices y archivos temporales para ser creado dentro del espacio de tabla, y permite bases de datos para ser creado que tienen el espacio de tabla como su espacio de tabla predeterminado . (Tenga en cuenta que la revocación de este privilegio no alterará la colocación de objetos existentes.)

Respuesta

11

Son privilegios completamente diferentes. CREATEDB significa que el rol puede crear una base de datos. Si su función no tiene eso, no puede crear bases de datos, punto.

La concesión de CREATE para un espacio de tabla a una función significa que la función podrá usar ese espacio de tablas como espacio de tabla predeterminado para la base de datos. Entonces, un rol que tiene CREATEDB será capaz de crear una base de datos; simplemente no en ese tablespace. Tenga en cuenta que siempre hay un espacio de tablas pg_default que se utilizará como espacio de tablas predeterminado para las bases de datos que no tienen un espacio de tabla predeterminado.

1

Parece que la primera declaración le da la capacidad de crear espacios de tablas. Estos son archivos físicos (o espacios en su dispositivo de almacenamiento) que contienen los datos/índices/... de la base de datos.

De manera efectiva, otorgó dos derechos diferentes con los comandos.