On Tue, Mar 26, 2019 at 9:39 AM Kevin Brannen <kbran...@efji.com> wrote:

> -----Original Message-----
> From: Moreno Andreo <moreno.and...@evolu-s.it>
> Sent: Tuesday, March 26, 2019 11:09 AM
> To: Adrian Klaver <adrian.kla...@aklaver.com>; PostgreSQL mailing lists <
> pgsql-gene...@postgresql.org>
> Subject: Re: Key encryption and relational integrity
>
> In a master-detail relation, I need to encrypt one of master table PK or
> detail table FK, in order to achieve pseudonimization, required by GDPR in
> Europe when managing particular data Imagine I have Table users id
>  surname    last name
> 1    John            Doe
> 2    Jane            Doe
> 3    Foo             Bar
>
> Table medications
> id    user_id    med
> 1     1                Medication
> 2     1                Ear check
> ...
> ...
> medications.user_id is FK on users.id
> we should achieve
>
> Table medications
> id    user_id        med
> 1    sgkighs98    Medication
> 2    sghighs98    Ear check
>
> or the opposite (users.id encryption and medications.user_id kept plain)
>
> At a first glance, it IS breaking relational integrity, so is there a way
> to manage this encryption internally so RI is kept safe?
>
> ===
>
> To me, this is really more of an application question, not a DB question.
> When you dump or share the data, do your randomization then. If you want to
> do it in the DB, then add an extra column to your user table, let's call it
> "pseudonym" and when you insert a new user, fill that in with your
> randomization string. Then never dump or use the real name, but use the
> pseudonym column. Better if you can do it, just don't store the real name
> (though your application may not let you do that).
>
>
Agreed, OP could also encrypt the name columns with pgcrypto and keep the
key out of the database.

-Michel

Reply via email to