SQLServer 2008中的代碼安全(四) 主密鑰_Mssql數據庫教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:SQL Server 2008 安裝和配置圖解教程(附官方下載地址)
      最近很多朋友選用sqlserver2008,據說SQL Server 2008的性能與功能上比2005更好,這里就將sql server 2008的安裝與配置分享下,希望能幫到需要的朋友

      如下圖:

      邀月工作室

      1、服務器主密鑰(Service Master Key),位于層次結構的最頂端,并且在安裝SQL Server時自動創建,用于加密系統數據、鏈接的服務器登錄名以及數據庫主密鑰。在第一次通過SQL Server使用服務主密鑰來加密證書、數據庫主密鑰或鏈接的服務器主密碼時,服務主密鑰會自動生成,并且使用SQL Server服務賬戶的Windows證書來生成它。如果必須改變SQL Server服務賬號,微軟建議使用SQL Server配置管理器,因為這個工具將執行生成新服務主密鑰需要的合適的解密和加密方法,而且可以使加密層次結構保持完整。服務主密鑰也用于加密其下的數據庫主密鑰。

      2、數據庫主密鑰(Database Master Key),用于加密證書,以及非對稱密鑰和對稱密鑰。所有數據庫都可以只包含一個數據庫主密鑰,在創建它時,通過服務主密鑰對其加密。創建非對稱密鑰時,可以決定在加密非對稱密鑰對應的私鑰是否包含密碼。如果示包含密碼,將使用數據庫主密鑰來加密私鑰。

      我們看一組例子:

      示例一、備份及還原服務主密鑰

      用到以下兩個sql命令:

      BACKUP SERVICE MASTER KEY 導出服務主密鑰。()

      RESTORE SERVICE MASTER KEY從備份文件中導入服務主密鑰。()

      復制代碼 代碼如下:www.wf0088.com

      --以下語句備份服務主密鑰到C:\SqlBackup\SMK.bak
      BACKUP SERVICE MASTER KEY
      TO FILE = 'C:\SqlBackup\SMK.bak'
      ENCRYPTION BY PASSWORD = 'MakeItAGoodOne!1AB'----注意該密碼可以使用單引號
      go
      --恢復服務主密鑰
      RESTORE SERVICE MASTER KEY
      FROM FILE = '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 創建數據庫主密鑰()

      ALTER MASTER KEY 重新生成數據庫主密鑰()

      DROP MASTER KEY 刪除數據庫主密鑰()

      當數據庫主密鑰被顯式創建時,會同時自動生成一個額外生成的安全層,用于加密數據庫中的新證書和非對稱密鑰,更進一步保護已加密的數據。

      復制代碼 代碼如下:www.wf0088.com

      IF NOT EXISTS (SELECT name
      FROM sys.databases
      WHERE name = 'BookStore')
      BEGIN
      CREATE DATABASE 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導出服務主密鑰。()

      RESTORE MASTER KEY從備份文件中導入數據庫主密鑰。()

      下面是一個完整示例:

      復制代碼 代碼如下:www.wf0088.com

      --備份數據庫主密鑰
      USE BookStore
      GO
      CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MagneticFields!'
      GO
      BACKUP MASTER KEY TO FILE = 'H:\SqlBackup\BookStore_Master_Key.BAK'
      ENCRYPTION BY PASSWORD = '4D280837!!!'

      --恢復數據庫主密鑰
      RESTORE MASTER KEY FROM FILE = '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'

      下面是一個例子:

      復制代碼 代碼如下:www.wf0088.com

      ALTER MASTER KEY DROP ENCRYPTION BY SERVICE MASTER KEY
      --一旦執行,任何數據庫主密鑰的修改需要使用OPEN MASTER KEY的口令訪問,這樣是為了重新應用服務主密鑰的加密
      OPEN MASTER KEY DECRYPTION BY PASSWORD = 'MagneticFieldS!'
      --一旦服務主密鑰被用于加密數據庫主密鑰,數據庫主密鑰不再需要被顯式打開或關閉。
      ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
      --關閉數據庫主密鑰
      CLOSE MASTER KEY

      小結:

      1、本文主要介紹服務主密鑰的備份與還原,數據庫的主密鑰的創建、重新生成、刪除和備份、還原。

      2、一旦創建主密鑰,立刻備份它是一個很好的習慣。

      下文將主要介紹非對稱密鑰加密(Asymmetric Key Encryption)

      邀月

      分享:SQL Server 2008 阻止保存要求重新創建表的更改問題的設置方法
      不是很理解為什么在2008中會加入阻止保存要求重新創建表的更改這個選項.癥狀表現為修改表結構的時候會阻止你.而且我遇到的情況是居然有的時候阻止你,有的時候不阻止你,摸不到頭腦.

      來源:模板無憂//所屬分類:Mssql數據庫教程/更新時間:2013-04-23
      相關Mssql數據庫教程