Configuración de usuarios de solo lectura en PostgreSQL

Este tutorial muestra cómo configurar usuarios de solo lectura en PostgreSQL para Redash.







Lo primero que ve en nuestra documentación es un consejo para configurar fuentes de datos para usuarios de solo lectura. Recomendamos esto porque nos referimos a Redash para visualización de datos. No se basa en acciones INSERT , UPDATE o DELETE .







Dado que Redash admite más de 40 fuentes de datos y un número ilimitado de API basadas en JSON, la aplicación no puede evitar directamente que los usuarios ejecuten consultas distintas de SELECT. Al hacer esto, puede protegerse contra los usuarios de Redash de ejecutar declaraciones DDL maliciosas configurando usuarios de solo lectura en el nivel de la base de datos.







PostgreSQL es una de nuestras fuentes de datos más populares. Este artículo proporciona un ejemplo de cómo configurar el acceso de solo lectura a cualquier fuente de datos de Postgres, incluidos Amazon Redshift y RDS.







Este artículo está escrito en gran parte sobre la base de una excelente publicación de Amazon AWS Blog Acerca de los permisos de Postgres.







Visión de conjunto



Antes de comenzar, creé un nuevo esquema de base de datos llamado myapp , propiedad de un usuario llamado app-admin . Este esquema incluye tablas para empleados , trabajos y clientes llenos de datos ficticios. Seguí estos pasos:







  1. Creó un nuevo rol llamado myapp-readonly .
  2. SELECT Employees Jobs. SELECT customers, .
  3. redash myapp-readonly.
  4. Redash redash.


, , Amazon PUBLIC :







public . , , , - public .







. , myapp-readonly . . ( , Redash ).







1.



CREATE ROLE myapp_readonly;
GRANT CONNECT ON DATABASE defaultdb TO myapp_readonly;
GRANT USAGE ON SCHEMA myapp TO myapp_readonly;
      
      





Amazon. GRANT USAGE , . PostgreSQL:







[USAGE] , ( , ). , «» .







2.



GRANT SELECT ON TABLE "myapp"."employees" TO myapp_readonly;
GRANT SELECT ON TABLE "myapp"."jobs" TO myapp_readonly;
GRANT SELECT (id, name) ON TABLE myapp.customers TO myapp_readonly;
      
      





employee jobs .







myapp_readonly . . . , Redash.







, Redash . *SELECT FROM customers**, . .







3. Redash .



CREATE USER redash WITH PASSWORD 'secret';
GRANT myapp_readonly TO redash;
      
      





redash — , Redash. secret .







4. Postgres



Redash . , , .













, , .







SELECT * FROM myapp.employees
      
      











, .







INSERT INTO myapp.employees (name) VALUES ('Hal')
      
      











. myapp_readonly INSERTS. Redash INSERT!







, customers:







SELECT * FROM myapp.customers;
      
      











Devuelve un error de permiso porque la función de solo lectura solo puede acceder a determinadas columnas.







SELECT id, name FROM myapp.customers;
      
      











Devuelve una lista completa de clientes, ya que solo solicitamos columnas de solo lectura para el usuario.







Conclusión



Los datos son uno de sus activos comerciales más importantes. Redash recomienda que aproveche las medidas de seguridad de su base de datos para mantenerla segura. Seguir estos pasos asegura que sus usuarios internos puedan preparar información útil mientras mantienen la información confidencial a salvo de errores de cumplimiento o miradas indiscretas.








All Articles