GRANTs en diferentes objetos están separados. GRANTing en una base de datos no tiene GRANTderechos sobre el esquema dentro. De manera similar, usar GRANTun esquema no otorga derechos sobre las tablas que contiene.
Si tiene derechos para SELECTacceder 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 publicesquema tiene un valor predeterminado GRANTde 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 USAGEun esquema para usar objetos dentro de él, pero tener USAGEun 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 somedircon un archivo somefiledentro 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-xel 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 USAGEderechos de esquema como derechos de objeto para realizar una acción en un objeto, como SELECTdesde 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 SELECTingresar pg_classdirectamente. 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 -edeclaraciones for en pqsl.GRANTdeclaraciones que no son específicas para tablas no son lo que quiero, ya que afectan a todas las bases de datos ...: sGRANTen 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 correosGRANTelectrónicos que afecten a todas las bases de datos (está bien, exceptoGRANTla pertenencia a un rol de un usuario).psqlsin-d dbestar 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
admindebería otorgarse tambiénCREATEen 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