postgres example ejemplos databases create and all database postgresql schema grant database-permissions

database - example - ¿Qué USO DE SUBSIDIO EN SCHEMA exactamente hace?



postgresql create user and grant permissions (2)

Intento crear por primera vez una base de datos de Postgres, por lo que esta es probablemente una pregunta estúpida. Asigné permisos básicos de solo lectura al rol de db que debe acceder a la base de datos desde mis scripts php, y tengo curiosidad: si ejecuto

GRANT some_or_all_privileges ON ALL TABLES IN SCHEMA schema TO role;

¿Hay alguna necesidad de ejecutar también

GRANT USAGE ON SCHEMA schema TO role;

?

De la documentation :

USO: para los esquemas, permite el acceso a objetos contenidos en el esquema especificado (suponiendo que también se cumplan los requisitos de privilegio propios de los objetos). Esencialmente, esto le permite al concesionario "buscar" objetos dentro del esquema.

Creo que si puedo seleccionar o manipular cualquier información contenida en el esquema, puedo acceder a cualquier objeto del esquema en sí. ¿Me equivoco? Si no, ¿para GRANT USAGE ON SCHEMA se utiliza GRANT USAGE ON SCHEMA ? ¿Y qué significa la documentación exactamente con "suponer que también se cumplen los requisitos de privilegio propios de los objetos"?


Para un sistema de producción, puede usar esta configuración:

--ACCESS DB REVOKE CONNECT ON DATABASE nova FROM PUBLIC; GRANT CONNECT ON DATABASE nova TO user; --ACCESS SCHEMA REVOKE ALL ON SCHEMA public FROM PUBLIC; GRANT USAGE ON SCHEMA public TO user; --ACCESS TABLES REVOKE ALL ON ALL TABLES IN SCHEMA public FROM PUBLIC ; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only ; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO read_write ; GRANT ALL ON ALL TABLES IN SCHEMA public TO admin ;


GRANT s en diferentes objetos están separados. GRANT una base de datos no otorga derechos al esquema dentro de. De manera similar, GRANT un esquema no otorga derechos en las tablas dentro de.

Si tiene derecho a SELECT desde una tabla, pero no tiene derecho a verla en el esquema que la contiene, entonces no puede 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 esquema public tiene una GRANT defecto de todos los derechos sobre la función public , de la cual cada usuario / grupo es miembro. Entonces, todos ya tienen uso en ese esquema.

La fase:

(suponiendo que también se cumplen los requisitos de privilegio propios de los objetos)

Está diciendo que debe tener USAGE en un esquema para usar objetos dentro de él, pero tener USAGE en un esquema no es autosuficiente para usar los objetos dentro del esquema, también debe tener derechos sobre los mismos objetos.

Es como un árbol de directorios. Si crea un directorio con un archivo dentro de él, somefile 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 tuviera que conceder derechos de lectura mundial en el archivo (modo rw-r--r-- ) pero no cambiar los permisos del directorio, no haría ninguna diferencia. Nadie podía ver el archivo para leerlo, porque no tienen los derechos para listar el directorio.

Si en cambio configura rwx-r-xr-x en el directorio, configurándolo para que la gente pueda listar y recorrer el directorio pero sin cambiar los permisos del archivo, las personas podrían listar el archivo pero no podrían leerlo porque no tendrían acceso a el archivo.

Debe establecer ambos permisos para que las personas puedan realmente ver el archivo.

Lo mismo en Pg. Necesita ambos derechos de USAGE esquema y derechos de objeto para realizar una acción en un objeto, como SELECT de una tabla.

(La analogía cae un poco en 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 directamente desde pg_class . No pueden interactuar con él en de todos modos, así que es solo la parte de la "lista" que no es exactamente la misma).