Privilèges ECOUTER / NOTIFIER

9

J'ai une seule base de données postgres, avec deux utilisateurs; Alice et Bob.

Je voudrais pouvoir faire un NOTIFY alice_channel 'sensitive data'sans que Bob puisse LISTENse faufiler dedans juste en devinant que le nom du canal est 'alice_channel'.

Dans la pratique, les noms de canaux sont très difficiles à deviner, mais c'est au mieux la sécurité grâce à l'obscurité.

Ai-je raison de croire qu'il n'y a aucun moyen d'empêcher un utilisateur de base de données d'utiliser (abuser) LISTEN& NOTIFY? c'est-à-dire qu'il ne semble pas y avoir de privilèges associés pouvant être accordés ou révoqués.

Est-ce une impasse?

Chris Farmiloe
la source
Je ne connais aucun moyen d'exclure les utilisateurs de l'écoute. Mais si vous choisissez un nom pour la chaîne comme vous choisiriez un mot de passe sécurisé, cela ne ferait-il pas l'affaire?
Erwin Brandstetter
Oui, c'est ce que je fais en ce moment (en utilisant de grosses cordes aléatoires), mais ça semble sale et est plutôt limitant. Il y a des choses assez sympas que je pourrais faire avec LISTEN/ NOTIFYsi je pouvais le verrouiller un peu. Dans l'état actuel des choses, il s'agit plutôt d'une fonction «pousser un client à interroger à nouveau toutes les données dont vous pourriez avoir besoin».
Chris Farmiloe
Je voulais juste savoir si les choses avaient changé depuis la réponse. Avez-vous pu mettre en œuvre quelque chose?
Phill Pafford
Si vous ne pouvez pas faire confiance à vos applications, vous ne devez pas les laisser entrer. Je pense que c'est une impasse dans le système de production. Il y a cependant eu une proposition pour des services connexes. postgresql.org/message-id/51CC98FB.9040700%40agliodbs.com
Anssi

Réponses:

4

Il n'y a aucune autorisation sur LISTENet NOTIFY. Il n'aurait pas été logique d'en avoir jusqu'à ce que la prise en charge des notifications de charges utiles soit introduite dans des versions plus récentes.

Si vous souhaitez contrôler l'accès, créez une table avec les informations souhaitées, puis envoyez-en une NOTIFYqui est vide ou qui n'a rien d'autre qu'une clé primaire pour cette table. SELECTla ou les lignes d'intérêt de la table, qui peuvent avoir un contrôle d'accès, pour obtenir les données sensibles. C'était la seule façon d'utiliser LISTENet NOTIFYd'envoyer des données spécifiques avant d'ajouter des charges utiles.

Craig Ringer
la source
Merci Craig, j'y pensais autant. Je pourrais jeter un œil à la source et voir à quel point il sera difficile à mettre en œuvre, mais je suppose que cela nécessitera un niveau de base de données complètement nouveau AclModeet pg_database_aclcheckappeler quelque part, cela fait un moment que je n'ai pas regardé: /
Chris Farmiloe