数据库级别的数据加密

时间:2013-10-24 07:17:36

标签: sql sql-server encryption

我有人力资源解决方案,最近我们对数据库的工资进行了加密。 我创建了一个2 C#函数,加密和解密。

我遇到了关于我们使用的sql命令和过程中的SQL SUM,MAX,MIN函数的问题,我们非常使用它。

作为一个解决方案,我创建了2个sql clr函数以在数据库中使用它们,但问题是这些2 clr函数可供任何可以访问数据库且可以使用这些函数的主体访问。

我想为这些2 clr函数更复杂化,所以我认为除非调用来自我的应用程序,否则此函数不应该工作。 我想在连接字符串的应用程序名称中传递一些内容并检查clr函数。

事情会更复杂,唯一的违反是,如果有人创建了一个应用程序并传递了相同的连接字符串。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

在我看来,这是数据库系统安全管理的工作:

  1. 为您的应用程序创建数据库用户(不要使用 sa !)。
  2. 授予该用户执行CLR功能的权利
  3. “Ungrant”所有其他用户有权执行这些功能

答案 1 :(得分:0)

您还可以使用app_name()来检查请求是否来自您的应用程序

答案 2 :(得分:0)

MSDN EncryptionByKey。并确保您需要盛大/撤销证书/加密凯斯的权利

USE YourDB
GO
IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101)
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'xxxYOURxSECURExPASSWORDxxx'
GO

ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
GO

CREATE CERTIFICATE EncryptionCert
    WITH SUBJECT = 'EncryptionCert',EXPIRY_DATE = '12/31/2014';
GO

CREATE SYMMETRIC KEY EncryptionKey
    WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE EncryptionCert;
GO
-------- Example ----
DECLARE @EncryptionKeyGUID uniqueidentifier
DECLARE @EncryptedValue varbinary(256)
DECLARE @DecryptedValue nvarchar(100) = N'Test';

OPEN SYMMETRIC KEY EncryptionKey DECRYPTION BY CERTIFICATE EncryptionCert

SET @EncryptionKeyGUID = Key_GUID('EncryptionKey');
SET @EncryptedValue = EncryptByKey(@EncryptionKeyGUID, @DecryptedValue);

SELECT CAST(DecryptByKey(@EncryptedValue) as nvarchar(100))
GO