sql >> Database >  >> RDS >> Mysql

MySQL-gecodeerde kolommen

Ik weet niet of het veel zin heeft om gegevens te versleutelen met de wachtwoord-hash van de gebruiker, vooral als je hash zelf in de database houdt. In dat geval kan iedereen die toegang heeft tot de versleutelde gegevens ook toegang krijgen tot de wachtwoordhash en de gegevens ontsleutelen.

Een andere benadering zou zijn om de gegevens te versleutelen met de toepassingsspecifieke sleutel die is gezouten met enkele gebruikersspecifieke gegevens. Dan staat u echter voor een ander probleem:hoe u de applicatiesleutel veilig opslaat. Op die vraag weet ik geen eenvoudig antwoord, maar het in je broncode bewaren is waarschijnlijk goed genoeg als je bang bent dat je databasegegevens in gevaar kunnen komen, maar niet de broncode zelf, b.v. als uw database off-site is opgeslagen (denk aan Amazon S3).

Het zouten van de app-sleutel met het wachtwoord van de gebruiker helpt als u alleen de hash van het wachtwoord in de database bewaart, maar kan een andere beveiligingsfout introduceren:u moet het gebruikerswachtwoord in leesbare tekst houden in de applicatiesessie.

De technische oplossing is vrij eenvoudig en voorbeeldcode is beschikbaar . U kunt het als volgt wijzigen om de gegevens te coderen met het applicatiewachtwoord gezouten met wachtwoordhash:

INSERT INTO secure_table VALUES (
  1,
  AES_ENCRYPT(
    'plain text data',
    CONCAT(@application_password, @user_password))
);

In ieder geval zou je je applicatiewachtwoord ergens moeten opslaan, dus ik denk niet dat er een gemakkelijke aanpak is die perfecte beveiliging biedt.

Een andere benadering die ik kan bedenken, is om de gebruiker om een ​​korte pincode te vragen die u als coderingssleutel kunt gebruiken. De pincode zou niet worden opgeslagen in de database, maar je zou de gebruiker hier elke keer om moeten vragen als je zijn gegevens opent.

En natuurlijk moet je denken aan de haalbaarheid van de encryptie. U kunt het niet indexeren of doorzoeken zonder decodering. Het is waarschijnlijk vereist voor een beperkte set gegevens (bijvoorbeeld creditcardnummer), maar ik zou er niet te ver mee gaan.



  1. mysql-connector-java-8.0.12:krijg foutmelding voor 'Malay Peninsula Standard Time' server tijdzone

  2. Gegevens invoegen in SQL Server 2017

  3. Hoe ga ik om met het openen/sluiten van een Db-verbinding in een Go-app?

  4. Laad data infile standaardwaarde niet invoegen in tabel