/ / MS SQL Server: Zabezpieczanie danych na poziomie kolumny - Java, SQL Server, bezpieczeństwo, szyfrowanie, skrót

MS SQL Server: Zabezpieczanie danych na poziomie kolumny - java, serwer sql, bezpieczeństwo, szyfrowanie, hash

Mamy już opracowywaną aplikację i teraz chcemy zabezpieczyć (szyfrowanie szyfrowania) kolumny tabeli w bazie danych (MS SQL Server 2008). Te kilka kolumn to hasła, numery kart kredytowych, SSN itp.

To jest Jawa (1.5) i nie używamy żadnych aplikacji takich jak hibernacja. Wszystko zostało zrobione od zera.

Chcę zabezpieczyć te dane w taki sposób, aby nie były przydatne dla osób je czytających. Czy ktoś może doradzić, jak to zrobić (najlepsze praktyki) i jakie są wady wydajności?

Czy można to zrobić na poziomie bazy danych (nie mówię o całym szyfrowaniu bazy danych)?

Dzięki

Odpowiedzi:

1 dla odpowiedzi № 1

Serwer SQL ma wbudowane szyfrowanie. Oto przykładowy kod zaczerpnięty z mojej książki na temat bezpieczeństwa (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;