Pet*_*tai 10 sql-server digital-signature
有没有办法以某种方式用特定用户的证书或AD凭证等以数字方式对数据库记录或特定字段的当前状态进行签名?我需要实现某种记录级别的批准,其中特定字段或字段或行的正确性和有效性由用户名/密码组合或某些证书签名.数据应始终在记录中可见,我所需要的只是能够告诉:谁和何时批准数据.我不需要阻止状态更改(锁定),只需要验证当前状态是否已签名.
您可以使用SIGNBYASYMKEY函数使用非对称密钥创建签名:
DECLARE @id = 2; -- The primary key of the row we need to sign
DECLARE @keyid = AsymKey_Id( 'KeyID_for_the_User' );
DECLARE @keypw = N'pGFD4bb925DGvbd2439587y';
-- Password the user entered to sign the values
DECLARE @clear_text_data nvarchar(max);
set @clear_text_data = function_that_returns_a_concatenation_of_the_columns(@id)
UPDATE table
SET signature = SignByAsymKey( @keyid, @clear_text_data, @keypw )
WHERE id = @id;
Run Code Online (Sandbox Code Playgroud)
[披露:我为CoSign工作]
您想要多么标准的数字签名?你想要一个X.509签名,"真实的东西?"
如果是这样:
您还需要提供签名验证服务,以确保人员(或机器)自签署以来数据未被更改,并且签名者的身份是可信的:
如果要提高系统的审计功能,则应启用序列化数据和外部签名的下载.这将启用审核检查:使用第三方软件复制验证软件的效果.
理想情况下,应轻松检查数据的序列化版本是否与明文数据匹配.例如,序列化为json,csv或xml utf-8格式而不是二进制格式.可以对任何位包进行签名,但是纯文本格式将更容易审计.
如果您还希望签名库处理正确保护签名者私钥的所有安全问题,请查看CoSign SAPI API.
请记住,将签名者的私钥存储在文件系统上的文件中意味着整个应用程序不提供签名证明.提供真实签名证明的唯一方法是使用安全签名创建设备(SSCD).一种简单的方法是使用CoSign Central签名设备或类似设备.主要的替代方案是智能卡,在客户端/服务器/ Web浏览器环境中很难实现.