0

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

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

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

我想让这两个 clr 函数更复杂,所以我认为这个函数不应该工作,除非调用来自我的应用程序。我正在考虑在连接字符串的应用程序名称中传递一些东西并检查 clr 函数内部。

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

任何想法?

4

3 回答 3

0

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

于 2013-10-24T07:25:13.747 回答
0

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

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
于 2013-10-24T09:22:50.183 回答
0

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

  1. 为您的应用程序创建一个数据库用户(不要使用sa!)。
  2. 授予该用户执行 CLR 功能的权限
  3. “取消”所有其他用户执行这些功能的权利
于 2013-10-24T07:23:15.950 回答