Subvenciones mínimas para acceso de solo lectura de tabla única en PostgreSQL

10

A continuación se incluye una lista de comandos que parecen funcionar para crear un nuevo usuario (inicio de sesión) y otorgar acceso de solo lectura para una tabla específica en PostgreSQL.

Supongamos que estos comandos se ejecutan al iniciar sesión con suficientes privilegios (es decir, postgresiniciar sesión en la instalación predeterminada).

CREATE ROLE user_name NOSUPERUSER NOCREATEDB 
NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity';

Ahora quiero otorgar selecten la tabla tab_abcde la base de datos db_xyz, así que aquí va (la base de datos db_xyzse selecciona como actual a través de PgAdmin o algo así):

grant select on tab_abc to user_name;

La pregunta es: ¿es esto suficiente o debería haber más subvenciones (base de datos connect, usagetal vez)?

Estos comandos parecen funcionar para mí, pero mi instalación predeterminada tiene la configuración de seguridad predeterminada. ¿Qué subsidios adicionales debo agregar si el administrador del servidor configuró una seguridad más fuerte?

Parece que no necesito otorgar connectni usage, ¿eso es implicito al otorgar select? ¿Siempre es así?

WildWezyr
fuente

Respuestas:

12

La pregunta es: ¿es esto suficiente o debería haber más subvenciones (conexión de base de datos, uso tal vez)?

La seguridad puede ser reforzada por defecto principalmente en estos puntos:

  • El pg_hba.confarchivo Filtra las conexiones antes de considerar cualquier privilegio de base de datos. El valor predeterminado es relativamente abierto para conexiones locales, pero puede estar restringido a una lista explícita de bases de datos, nombres de usuario y orígenes de red.

  • Los permisos para público , el pseudo-rol que cualquiera tiene. Un usuario puede conectarse implícitamente solo si se le otorga el privilegio de conexión PUBLIC. Ver Usuario creado puede acceder a todas las bases de datos en PostgreSQL sin ninguna concesión . Una base de datos puede tener todos los privilegios revocados del público. Vea REVOKE en el documento para la versión principal de PostgreSQL que está utilizando.

  • La existencia del publicesquema. Se crea con la base de datos de forma predeterminada para mayor comodidad, pero no es obligatorio. En lugar de eliminar los permisos públicos del publicesquema, puede tener sentido que los DBA simplemente eliminen el publicesquema cuando los nuevos usuarios no tengan ningún permiso implícito.

En el caso de que se hayan eliminado estos valores predeterminados, para leer una tabla se debe otorgar un nuevo usuario:

GRANT CONNECT ON DATABASE dbname TO username;

En el nivel de la base de datos:

GRANT USAGE ON SCHEMA schemaname TO username;
GRANT SELECT ON schemaname.tablename TO username;
Daniel Vérité
fuente