ESCUCHAR / NOTIFICAR privilegios

9

Tengo una sola base de datos postgres, con dos usuarios; Alice y Bob

Me gustaría poder hacer una NOTIFY alice_channel 'sensitive data'sin que Bob pueda entrar a escondidas LISTENcon solo adivinar que el nombre del canal es 'alice_channel'.

En la práctica, los nombres de los canales son muy difíciles de adivinar, pero esto es seguridad a través de la oscuridad en el mejor de los casos.

¿Estoy en lo cierto al creer que no hay forma de evitar que un usuario de la base de datos use (abuse) LISTENy NOTIFY? es decir , no parece haber ningún privilegio asociado que se pueda otorgar o revocar.

¿Es este un callejón sin salida?

Chris Farmiloe
fuente
No conozco una manera de excluir a los usuarios de escuchar. Pero si elige un nombre para el canal como elegiría una contraseña segura, ¿no haría esto el trabajo?
Erwin Brandstetter
Sí, eso es lo que estoy haciendo en este momento (usando cadenas grandes al azar), pero se siente sucio y es bastante limitante. Hay algunas cosas geniales que podría hacer con LISTEN/ NOTIFYsi pudiera bloquearlo un poco. Tal como está, se trata de una función de "pinchar a un cliente" para volver a sondear todos los datos que "pueda" necesitar.
Chris Farmiloe
Solo quería saber si las cosas han cambiado desde que esto fue respondido. ¿Pudiste implementar algo?
Phill Pafford
Si no puede confiar en sus aplicaciones, no debe dejarlas entrar. Creo que es un callejón sin salida en el sistema de producción. Sin embargo, ha habido una propuesta para privs relacionados. postgresql.org/message-id/51CC98FB.9040700%40agliodbs.com
Anssi

Respuestas:

4

No hay permisos en LISTENy NOTIFY. No habría tenido sentido tener ninguno hasta que se introdujera el soporte para notificar cargas en versiones más recientes.

Si desea control de acceso, cree una tabla con la información que desea y luego envíe una NOTIFYque esté vacía o que no tenga más que una clave principal para esa tabla. SELECTlas filas de interés de la tabla, que pueden tener control de acceso, para obtener los datos confidenciales. Esta solía ser la única forma de usar LISTENy NOTIFYenviar datos específicos antes de agregar las cargas útiles.

Craig Ringer
fuente
Gracias Craig, lo pensé. Podría echar un vistazo a la fuente y ver lo difícil que será implementarlo, pero supongo que requerirá un nivel de base de datos completamente nuevo AclModey pg_database_aclcheckllamar a alguna parte, ha pasado un tiempo desde que miré: /
Chris Farmiloe