GRANT
s en diferentes objetos están separados. GRANT
ing en una base de datos no GRANT
derechos al esquema interno. Del mismo modo, GRANT
ing en un esquema no otorga derechos en las tablas dentro.
Si tiene derechos para SELECT
de una tabla, pero no tiene derecho a verlo en el esquema que lo 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 public
el esquema tiene un GRANT
predeterminado de todos los derechos sobre el rol public
, del que todos los usuarios/grupos son miembros. Así que 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 debes tener USAGE
en un esquema para usar objetos dentro de él, pero con USAGE
en un esquema no es suficiente por sí solo para usar los objetos dentro del esquema, también debe tener derechos sobre los objetos mismos.
Es como un árbol de directorios. Si crea un directorio somedir
con el 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 otorgara derechos de lectura mundial sobre el archivo (modo rw-r--r--
) pero no cambie los permisos del directorio, no haría ninguna diferencia. Nadie podía ver el archivo para poder 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 las personas puedan listar y recorrer el directorio pero sin cambiar los permisos de archivo, las personas podrían listar el archivo pero no pudo leer porque no tendrían acceso al archivo.
Debe configurar ambos permisos para que las personas puedan ver el archivo.
Lo mismo en la pág. Necesita ambos esquemas USAGE
derechos y derechos de objeto para realizar una acción en un objeto, como SELECT
de una mesa.
(La analogía falla 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 mediante SELECT
ing desde pg_class
directamente. Sin embargo, no pueden interactuar con él de ninguna manera, por lo que es solo la parte de la "lista" que no es exactamente igual).