我有人力资源解决方案,最近我们对数据库的工资进行了加密。 我创建了一个2 C#函数,加密和解密。
我遇到了关于我们使用的sql命令和过程中的SQL SUM,MAX,MIN函数的问题,我们非常使用它。
作为一个解决方案,我创建了2个sql clr函数以在数据库中使用它们,但问题是这些2 clr函数可供任何可以访问数据库且可以使用这些函数的主体访问。
我想为这些2 clr函数更复杂化,所以我认为除非调用来自我的应用程序,否则此函数不应该工作。 我想在连接字符串的应用程序名称中传递一些内容并检查clr函数。
事情会更复杂,唯一的违反是,如果有人创建了一个应用程序并传递了相同的连接字符串。
有什么想法吗?
答案 0 :(得分:0)
在我看来,这是数据库系统安全管理的工作:
答案 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