设为首页 收藏本站
查看: 698|回复: 0

[经验分享] SQL Server 2008中的代码安全(四):主密钥

[复制链接]

尚未签到

发表于 2015-6-27 16:32:48 | 显示全部楼层 |阅读模式
  SQL Server 2008中SQL应用系列--目录索引
在SQL Server中的加密由层次结构形式进行处理以提供多级别的安全。SQL Server包含两个用于加密数据的密钥类型。如下图:
http://ccbqcw.blu.livefilestore.com/y1pPEPOeuKRxC3VCX72Agh6ETYiFSO3GgRoG6VnYyABoTbbTZ5e1A1FAGraciDcYf6rfjFvGV5KhXwqoBm9EXkPYMRD3G1ByqkI/clip_image001_3.png?psid=1
  1、服务器主密钥(Service Master Key),位于层次结构的最顶端,并且在安装SQL Server时自动创建,用于加密系统数据、链接的服务器登录名以及数据库主密钥。在第一次通过SQL Server使用服务主密钥来加密证书、数据库主密钥或链接的服务器主密码时,服务主密钥会自动生成,并且使用SQL Server服务账户的Windows证书来生成它。如果必须改变SQL Server服务账号,微软建议使用SQL Server配置管理器,因为这个工具将执行生成新服务主密钥需要的合适的解密和加密方法,而且可以使加密层次结构保持完整。服务主密钥也用于加密其下的数据库主密钥。
  2、数据库主密钥(Database Master Key),用于加密证书,以及非对称密钥和对称密钥。所有数据库都可以只包含一个数据库主密钥,在创建它时,通过服务主密钥对其加密。创建非对称密钥时,可以决定在加密非对称密钥对应的私钥是否包含密码。如果示包含密码,将使用数据库主密钥来加密私钥。
  我们看一组例子:
  示例一、备份及还原服务主密钥
  用到以下两个sql命令:
  BACKUP SERVICE MASTER KEY  导出服务主密钥。(http://msdn.microsoft.com/zh-cn/library/ms190337.aspx)
  RESTORE SERVICE MASTER KEY从备份文件中导入服务主密钥。(http://msdn.microsoft.com/zh-cn/library/ms187972.aspx)


--以下语句备份服务主密钥到C:\SqlBackup\SMK.bak

BACKUP SERVICE MASTER KEY
TOFILE='C:\SqlBackup\SMK.bak'
ENCRYPTION BY PASSWORD ='MakeItAGoodOne!1AB'----注意该密码可以使用单引号
go
--恢复服务主密钥
RESTORE SERVICE MASTER KEY
FROMFILE='H:\SqlBackup\SMK.bak'
DECRYPTION BY PASSWORD ='MakeItAGoodOne!1AB'
go  
  如果该密钥没有实际变化,而执行密钥恢复时,会收到提示:
  --The old and new master keys are identical. No data re-encryption is required.
  示例二、创建、再生成和删除数据库主密钥
  用到以下两个sql命令:
  CREATE MASTER KEY 创建数据库主密钥(http://technet.microsoft.com/zh-cn/library/ms174382.aspx)
  ALTER MASTER KEY 重新生成数据库主密钥(http://msdn.microsoft.com/en-us/library/ms186937%28SQL.90%29.aspx)
  DROP MASTER KEY 删除数据库主密钥(http://msdn.microsoft.com/en-us/library/ms180071.aspx)
  当数据库主密钥被显式创建时,会同时自动生成一个额外生成的安全层,用于加密数据库中的新证书和非对称密钥,更进一步保护已加密的数据。


IFNOTEXISTS (SELECT name
FROM sys.databases
WHERE name ='BookStore')
BEGIN
CREATEDATABASE BookStore
END
GO
USE BookStore
GO
--创建数据库主密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD ='password'
go
USE BookStore
GO
--重新生成数据库主密钥
ALTER MASTER KEY
[FORCE] REGENERATE WITH ENCRYPTION BY PASSWORD ='password'
--删除数据库主密钥
USE BookStore
GO
DROP MASTER KEY  
  注意:如果该数据库主密钥仍然被其他数据库对象使用,则不能被删除,这点与架构类似。
  同时一旦创建数据库主密钥,就立刻备份它是一个好的习惯。
  示例三、备份、恢复一个数据库主密钥
  语法:
  BACKUP MASTER KEY导出服务主密钥。(http://technet.microsoft.com/en-us/library/ms174387.aspx)
  RESTORE MASTER KEY从备份文件中导入数据库主密钥。(http://msdn.microsoft.com/en-us/library/ms186336.aspx)
  下面是一个完整示例:


--备份数据库主密钥
USE BookStore
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD ='MagneticFields!'
GO
BACKUP MASTER KEYTOFILE='H:\SqlBackup\BookStore_Master_Key.BAK'
ENCRYPTION BY PASSWORD ='4D280837!!!'
--恢复数据库主密钥
RESTORE MASTER KEYFROMFILE='H:\SqlBackup\BookStore_Master_Key.BAK'
DECRYPTION BY PASSWORD ='4D280837!!!'
ENCRYPTION BY PASSWORD ='MagneticFields!'  
  与服务主密钥类似,如果没有修改,则会收到如下提示:
  The old and new master keys are identical. No data re-encryption is required.
  示例三、从数据库主密钥删除服务主密钥
  当一个数据库主密钥被创建时,它被默认使用两种方式加密:服务主密钥和被使用CREATE MASTER KEY 命令中使用的密码。如果你不想使用服务主密码加密数据库主密钥(这种情况下,拥有sysadmin特权的login在不知道数据库主密钥的前提下将不能访问加密数据),你可以使用ALTER MASTER KEY 命令删除服务主密钥。
  简略语法如下:
  ALTER MASTER KEY
  ADD ENCRYPTION BY SERVICE MASTER KEY |
  DROP ENCRYPTION BY SERVICE MASTER KEY
  由于服务主密钥允许拥有足够许可(如sysadmin)的用户自动使用数据库主密钥解密,因此,一旦删除了服务主密钥的加密,而再想修改数据库主密钥时,你必须使用一个新的命令访问它。OPEN MASTER KEY, 语法如下:
  OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'
  下面是一个例子:


ALTER MASTER KEYDROP ENCRYPTION BY SERVICE MASTER KEY
--一旦执行,任何数据库主密钥的修改需要使用OPEN MASTER KEY的口令访问,这样是为了重新应用服务主密钥的加密
OPEN MASTER KEY DECRYPTION BY PASSWORD ='MagneticFieldS!'
--一旦服务主密钥被用于加密数据库主密钥,数据库主密钥不再需要被显式打开或关闭。
ALTER MASTER KEYADD ENCRYPTION BY SERVICE MASTER KEY
--关闭数据库主密钥
CLOSE MASTER KEY  
  小结:
  1、本文主要介绍服务主密钥的备份与还原,数据库的主密钥的创建、重新生成、删除和备份、还原。
  2、一旦创建主密钥,立刻备份它是一个很好的习惯。
  下文将主要介绍非对称密钥加密(Asymmetric Key Encryption)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81004-1-1.html 上篇帖子: SQL Server 2008中的代码安全(七):证书加密 下篇帖子: SQL Server 2005允许远程连接的配置说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表