SQL Server 2008中的加密和密钥管理(二)

日期: 2009-04-20 作者:Kamal Hathi 来源:TechTarget中国 英文

  扩展的密钥管理

  随着法规遵从性需求的不断增长以及对数据隐私的整体关注,越来越多的组织将加密用作提供深层防御解决方案的手段。随着组织越来越多地使用加密和密钥来保护数据,密钥管理也变得更加复杂。一些高安全性数据库要使用数千个密钥,并且必须部署一个系统来存储、注销和重新生成这些密钥。而且,应该将这些密钥与数据分开存储以增强安全性。

  SQL Server 2008 为第三方供应商的使用公开了加密功能。这些解决方案可以与 SQL Server 2005 和 SQL Server 2008 数据库无缝地一起工作并提供了企业级专用密钥管理。这将密钥管理工作负载从 SQL Server 转移到了专用密钥管理系统。

  SQL Server 2008 中扩展的密钥管理还支持使用 HSM 提供密钥与数据的物理分离。

  代码模块签名

  在 SQL Server 中提供加密的一个好处就是它提供了使用证书对代码模块(存储过程、函数、触发器和事件通知)进行数字签名的能力。这提供了对数据库表和其他对象访问的更细粒度的控制。像加密数据一样,您使用证书中的私钥签名代码。其结果是在该经过签名的代码模块中使用的表只能通过该代码访问并且不允许在代码模块之外。换句话说,只能使用已经用于签名该模块的证书获得对该表的访问。

  对于存储过程而言,效果也是一样的。例如,如果有完整的所有权链,您可以谨慎控制哪些用户获得该过程的 EXECUTE 权限,并且可以拒绝他们对基础表的直接访问。但这在过程的所有权链被破坏或执行动态 SQL 时不起作用,此时要求执行该过程的用户拥有对基础表的权限。实现同样效果的另一种方式是使用 EXECUTE AS,但这改变了过程执行的安全上下文。这可能不是理想的情况,例如,需要在表中记录实际使该过程运行的用户时(没有要求将用户名作为过程的参数)。

  签名代码模块的另一个好处就是防止对代码模块作出未经授权的更改。像其他经过数字签名的文档一样,在代码改变时,证书将失效。代码不在证书上下文中执行,因此任何被提供了证书访问权限的对象都将不可访问。

  要继续访问它们,需要创建一个证书,将该证书与新用户关联并使用该证书签名过程。授予该用户执行该存储过程必要的任何权限。实质上,已经将该用户作为次级身份标识添加到了存储过程安全上下文中。然后,授予需要执行该过程的任何用户或角色执行权限。以下代码展示了这些步骤。假设您想要签名 mySchema.GetSecretStuff 过程,并且所有引用的对象已经存在于数据库中:

CREATE CERTIFICATE certCodeSigning
ENCRYPTION BY PASSWORD = ‘cJI%V4!axnJXfLC’
WITH SUBJECT = ‘Code signing certificate’
GO
— Sign the stored procedure 
ADD SIGNATURE TO mySchema.GetSecretStuff BY CERTIFICATE certCodeSigning
WITH PASSWORD = ‘cJI%V4!axnJXfLC’
GO
— Map a user to the certificate
CREATE USER certUser FOR CERTIFICATE certCodeSigning
GO
–Assign SELECT permissions to new certUser
GRANT SELECT ON SocialSecurity TO certUser
GO
— Grant execute permission to the user who will run the code
GRANT EXECUTE ON mySchema.GetSecretStuff TO ProcedureUser
GO
 
  现在只有明确授予对该存储过程具有 EXECUTE 权限的用户能够访问该表的数据。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐