GRANT
s en diferentes objetos están separados. GRANT
ing en una base de datos no tiene GRANT
derechos sobre el esquema dentro. De manera similar, usar GRANT
un esquema no otorga derechos sobre las tablas que contiene.
Si tiene derechos para SELECT
acceder a una tabla, pero no el derecho para verla en el esquema que la contiene, no podrá acceder a la tabla.
Las pruebas de derechos se realizan en orden:
Do you have `USAGE` on the schema?
No: Reject access.
Yes: Do you also have the appropriate rights on the table?
No: Reject access.
Yes: Check column privileges.
Su confusión puede surgir del hecho de que el public
esquema tiene un valor predeterminado GRANT
de todos los derechos sobre el rol public
, del cual todos los usuarios / grupos son miembros. Entonces, todos ya tienen uso en ese esquema.
La frase:
(suponiendo que también se cumplan los requisitos de privilegios propios de los objetos)
Está diciendo que debe tener USAGE
un esquema para usar objetos dentro de él, pero tener USAGE
un esquema no es suficiente por sí mismo para usar los objetos dentro del esquema, también debe tener derechos sobre los objetos en sí.
Es como un árbol de directorios. Si crea un directorio somedir
con un archivo somefile
dentro de él, configúrelo para que solo su propio usuario pueda acceder al directorio o al archivo (modo rwx------
en el directorio, modo rw-------
en el archivo), entonces nadie más puede listar el directorio para ver que el archivo existe.
Si concediera derechos de lectura mundial sobre el archivo (modo rw-r--r--
) pero no cambiara los permisos del directorio, no habría ninguna diferencia. Nadie pudo ver el archivo para leerlo, porque no tiene los derechos para listar el directorio.
Si, en cambio, establece rwx-r-xr-x
el directorio, configurándolo para que las personas puedan enumerar y recorrer el directorio pero sin cambiar los permisos del archivo, las personas podrían enumerar el archivo pero no podrían leerlo porque no tendrían acceso al archivo.
Debe establecer ambos permisos para que las personas puedan ver el archivo.
Lo mismo en la pág. Necesita tanto USAGE
derechos de esquema como derechos de objeto para realizar una acción en un objeto, como SELECT
desde una tabla.
(La analogía cae un poco en el sentido de que PostgreSQL aún no tiene seguridad a nivel de fila, por lo que el usuario aún puede "ver" que la tabla existe en el esquema al SELECT
ingresar pg_class
directamente. No pueden interactuar con ella de ninguna manera , sin embargo, es solo la parte de la "lista" la que no es exactamente la misma).
CREATE EXTENSION
. Es más o menos el mismo problema con los archivos creados en Linux mientras estássu
. Sería bueno si hay una especie desudo -e
declaraciones for en pqsl.GRANT
declaraciones que no son específicas para tablas no son lo que quiero, ya que afectan a todas las bases de datos ...: sGRANT
en un esquema afecta a ese esquema.GRANT ... ON ALL TABLES IN SCHEMA ...
afecta a todas las tablas de un esquema en una base de datos en particular. No hay correosGRANT
electrónicos que afecten a todas las bases de datos (está bien, exceptoGRANT
la pertenencia a un rol de un usuario).psql
sin-d db
estar operando "fuera" de cualquier base de datos, pero siempre estás conectado a una base de datos y de forma predeterminada estás conectado a la base de datos con el mismo nombre de tu función. db = role = user = group ... es un poco confuso: DWITH LOGIN
; Básicamente, todo puede ser un grupo, y los grupos se pueden configurar para poder iniciar sesión.Para un sistema de producción, puede utilizar esta configuración:
fuente
admin
debería otorgarse tambiénCREATE
en el esquema?GRANT USAGE ON SCHEMA
, el usuario administrador no puede crear una tabla, pero puede hacerlo conALL GRANT ALL ON SCHEMA
....grant all on schema public to admin
? PD: agregué tambiéngrant usage, select on all sequences in schema public to read_only/read_write;
grant execute on all functions in schema public to read_only/read_write;
Bueno, esta es mi solución final para una base de datos simple, para Linux:
fuente