/ / MS SQL Server: Sichern von Daten auf Spaltenebene - Java, SQL Server, Sicherheit, Verschlüsselung, Hash

MS SQL Server: Sichern von Daten auf Spaltenebene - Java, SQL Server, Sicherheit, Verschlüsselung, Hash

Wir haben bereits eine Anwendung in der Entwicklung und möchten nun die Tabellenspalten in der Datenbank sichern (verschlüsseln) (MS SQL Server 2008). Diese wenigen Spalten sind wie Passwörter, Kreditkartennummern, SSN usw.

Es ist Java (1.5) basierte Anwendung und wir verwenden keine APIs wie Hibernate. Alles wurde von Grund auf neu gemacht.

Ich möchte diese Daten so sichern, dass sie für niemanden, der sie liest, nützlich sind. Kann mir bitte jemand einen Rat geben, wie dies zu tun ist (Best Practices) und was sind die Nachteile in Bezug auf die Leistung?

Kann dies auf Datenbankebene erfolgen (ich spreche nicht über die gesamte Datenbankverschlüsselung)?

Vielen Dank

Antworten:

1 für die Antwort № 1

In SQL Server ist eine Verschlüsselung integriert. Hier ist ein Beispielcode aus meinem Sicherheitsbuch (SQL Server 2012 Security Cookbook):

USE marketing ;

-- create the database master key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = "a very strong password";

-- a sample table
CREATE TABLE dbo.Customer (
CustomerId int NOT NULL IDENTITY(1,1) PRIMARY KEY,
Firstname varchar(50) NOT NULL,
Lastname varchar(50) NOT NULL,
CreditCardInfo varbinary(2000) NOT NULL
)

-- a certificate to protect the encryption key
CREATE CERTIFICATE KeyProtectionCert
WITH SUBJECT = "to protect symmetric encryption keys";

-- the symmetric encryption key
CREATE SYMMETRIC KEY CreditCardSKey
WITH ALGORITHM = AES_256,
KEY_SOURCE = "4frT-7FGHFDfTh98#6erZ3dq#«",
IDENTITY_VALUE = "l·Fg{(ZEfd@23fz4fqeRHY&4efVql"
ENCRYPTION BY CERTIFICATE KeyProtectionCert;

-- using the encryption key
OPEN SYMMETRIC KEY CreditCardSKey
DECRYPTION BY CERTIFICATE KeyProtectionCert;

INSERT INTO dbo.Customer (Firstname, LastName, CreditCardInfo)
VALUES ("Jim", "Murphy",
EncryptByKey(Key_Guid("CreditCardSKey"), "1111222233334444;12/13,456", 1, "JimMurphy")
);

CLOSE SYMMETRIC KEY CreditCardSKey;

--To read the data and get back the original unencrypted data (the plaintext), we use the DecryptByKey() function:
OPEN SYMMETRIC KEY CreditCardSKey DECRYPTION BY CERTIFICATE KeyProtectionCert;

SELECT Firstname, Lastname,
CAST(DecryptByKey(CreditCardInfo, 1, Firstname + Lastname) as varchar(50))
FROM dbo.Customer;

CLOSE SYMMETRIC KEY CreditCardSKey;

-- or without opening it :
SELECT Firstname, Lastname,
CAST(DecryptByKeyAutoCert(CERT_ID("KeyProtectionCert"), NULL, CreditCardInfo, 1, Firstname + Lastname) as varchar(50))
FROM dbo.Customer;