SQLServer 2008中的代碼安全(四) 主密鑰_Mssql數(shù)據(jù)庫教程
推薦:SQL Server 2008 安裝和配置圖解教程(附官方下載地址)最近很多朋友選用sqlserver2008,據(jù)說SQL Server 2008的性能與功能上比2005更好,這里就將sql server 2008的安裝與配置分享下,希望能幫到需要的朋友
如下圖:
1、服務(wù)器主密鑰(Service Master Key),位于層次結(jié)構(gòu)的最頂端,并且在安裝SQL Server時自動創(chuàng)建,用于加密系統(tǒng)數(shù)據(jù)、鏈接的服務(wù)器登錄名以及數(shù)據(jù)庫主密鑰。在第一次通過SQL Server使用服務(wù)主密鑰來加密證書、數(shù)據(jù)庫主密鑰或鏈接的服務(wù)器主密碼時,服務(wù)主密鑰會自動生成,并且使用SQL Server服務(wù)賬戶的Windows證書來生成它。如果必須改變SQL Server服務(wù)賬號,微軟建議使用SQL Server配置管理器,因為這個工具將執(zhí)行生成新服務(wù)主密鑰需要的合適的解密和加密方法,而且可以使加密層次結(jié)構(gòu)保持完整。服務(wù)主密鑰也用于加密其下的數(shù)據(jù)庫主密鑰。
2、數(shù)據(jù)庫主密鑰(Database Master Key),用于加密證書,以及非對稱密鑰和對稱密鑰。所有數(shù)據(jù)庫都可以只包含一個數(shù)據(jù)庫主密鑰,在創(chuàng)建它時,通過服務(wù)主密鑰對其加密。創(chuàng)建非對稱密鑰時,可以決定在加密非對稱密鑰對應(yīng)的私鑰是否包含密碼。如果示包含密碼,將使用數(shù)據(jù)庫主密鑰來加密私鑰。
我們看一組例子:
示例一、備份及還原服務(wù)主密鑰
用到以下兩個sql命令:
BACKUP SERVICE MASTER KEY 導(dǎo)出服務(wù)主密鑰。()
RESTORE SERVICE MASTER KEY從備份文件中導(dǎo)入服務(wù)主密鑰。()
--以下語句備份服務(wù)主密鑰到C:\SqlBackup\SMK.bak
BACKUP SERVICE MASTER KEY
TO FILE = 'C:\SqlBackup\SMK.bak'
ENCRYPTION BY PASSWORD = 'MakeItAGoodOne!1AB'----注意該密碼可以使用單引號
go
--恢復(fù)服務(wù)主密鑰
RESTORE SERVICE MASTER KEY
FROM FILE = 'H:\SqlBackup\SMK.bak'
DECRYPTION BY PASSWORD = 'MakeItAGoodOne!1AB'
go
如果該密鑰沒有實際變化,而執(zhí)行密鑰恢復(fù)時,會收到提示:
--The old and new master keys are identical. No data re-encryption is required.
示例二、創(chuàng)建、再生成和刪除數(shù)據(jù)庫主密鑰
用到以下兩個sql命令:
CREATE MASTER KEY 創(chuàng)建數(shù)據(jù)庫主密鑰()
ALTER MASTER KEY 重新生成數(shù)據(jù)庫主密鑰()
DROP MASTER KEY 刪除數(shù)據(jù)庫主密鑰()
當(dāng)數(shù)據(jù)庫主密鑰被顯式創(chuàng)建時,會同時自動生成一個額外生成的安全層,用于加密數(shù)據(jù)庫中的新證書和非對稱密鑰,更進(jìn)一步保護(hù)已加密的數(shù)據(jù)。
IF NOT EXISTS (SELECT name
FROM sys.databases
WHERE name = 'BookStore')
BEGIN
CREATE DATABASE BookStore
END
GO
USE BookStore
GO
--創(chuàng)建數(shù)據(jù)庫主密鑰
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password'
go
USE BookStore
GO
--重新生成數(shù)據(jù)庫主密鑰
ALTER MASTER KEY
[FORCE] REGENERATE WITH ENCRYPTION BY PASSWORD = 'password'
--刪除數(shù)據(jù)庫主密鑰
USE BookStore
GO
DROP MASTER KEY
注意:如果該數(shù)據(jù)庫主密鑰仍然被其他數(shù)據(jù)庫對象使用,則不能被刪除,這點(diǎn)與架構(gòu)類似。
同時一旦創(chuàng)建數(shù)據(jù)庫主密鑰,就立刻備份它是一個好的習(xí)慣。
示例三、備份、恢復(fù)一個數(shù)據(jù)庫主密鑰
語法:
BACKUP MASTER KEY導(dǎo)出服務(wù)主密鑰。()
RESTORE MASTER KEY從備份文件中導(dǎo)入數(shù)據(jù)庫主密鑰。()
下面是一個完整示例:
--備份數(shù)據(jù)庫主密鑰
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!!!'
--恢復(fù)數(shù)據(jù)庫主密鑰
RESTORE MASTER KEY FROM FILE = 'H:\SqlBackup\BookStore_Master_Key.BAK'
DECRYPTION BY PASSWORD = '4D280837!!!'
ENCRYPTION BY PASSWORD = 'MagneticFields!'
與服務(wù)主密鑰類似,如果沒有修改,則會收到如下提示:
The old and new master keys are identical. No data re-encryption is required.
示例三、從數(shù)據(jù)庫主密鑰刪除服務(wù)主密鑰
當(dāng)一個數(shù)據(jù)庫主密鑰被創(chuàng)建時,它被默認(rèn)使用兩種方式加密:服務(wù)主密鑰和被使用CREATE MASTER KEY 命令中使用的密碼。如果你不想使用服務(wù)主密碼加密數(shù)據(jù)庫主密鑰(這種情況下,擁有sysadmin特權(quán)的login在不知道數(shù)據(jù)庫主密鑰的前提下將不能訪問加密數(shù)據(jù)),你可以使用ALTER MASTER KEY 命令刪除服務(wù)主密鑰。
簡略語法如下:
ALTER MASTER KEY
ADD ENCRYPTION BY SERVICE MASTER KEY |
DROP ENCRYPTION BY SERVICE MASTER KEY
由于服務(wù)主密鑰允許擁有足夠許可(如sysadmin)的用戶自動使用數(shù)據(jù)庫主密鑰解密,因此,一旦刪除了服務(wù)主密鑰的加密,而再想修改數(shù)據(jù)庫主密鑰時,你必須使用一個新的命令訪問它。OPEN MASTER KEY, 語法如下:
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'
下面是一個例子:
ALTER MASTER KEY DROP ENCRYPTION BY SERVICE MASTER KEY
--一旦執(zhí)行,任何數(shù)據(jù)庫主密鑰的修改需要使用OPEN MASTER KEY的口令訪問,這樣是為了重新應(yīng)用服務(wù)主密鑰的加密
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'MagneticFieldS!'
--一旦服務(wù)主密鑰被用于加密數(shù)據(jù)庫主密鑰,數(shù)據(jù)庫主密鑰不再需要被顯式打開或關(guān)閉。
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
--關(guān)閉數(shù)據(jù)庫主密鑰
CLOSE MASTER KEY
小結(jié):
1、本文主要介紹服務(wù)主密鑰的備份與還原,數(shù)據(jù)庫的主密鑰的創(chuàng)建、重新生成、刪除和備份、還原。
2、一旦創(chuàng)建主密鑰,立刻備份它是一個很好的習(xí)慣。
下文將主要介紹非對稱密鑰加密(Asymmetric Key Encryption)
分享:SQL Server 2008 阻止保存要求重新創(chuàng)建表的更改問題的設(shè)置方法不是很理解為什么在2008中會加入阻止保存要求重新創(chuàng)建表的更改這個選項.癥狀表現(xiàn)為修改表結(jié)構(gòu)的時候會阻止你.而且我遇到的情況是居然有的時候阻止你,有的時候不阻止你,摸不到頭腦.
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數(shù)的用法實例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- 解讀sql中獲得部分時間的方法
- sql server 中刪除默認(rèn)約束的通用sql腳本
- 怎樣利用SQL Server復(fù)制技術(shù)實現(xiàn)數(shù)據(jù)同步更新
- SQL Server 2008 阻止保存要求重新創(chuàng)建表的更改問題的設(shè)置方法
- 兩條經(jīng)典SQL語句
- 如何檢測你的SQL Server是否有特洛伊木馬
- 淺析管理SQL Server數(shù)據(jù)庫和應(yīng)用元數(shù)據(jù)
- 基于存儲過程的詳細(xì)介紹
- 解讀VB實現(xiàn)SQL Server 2000存儲過程調(diào)用
- 解析應(yīng)對SQL Server數(shù)據(jù)庫崩潰的方法
猜你也喜歡看這些
- CentOS6.4系統(tǒng)中Mysql數(shù)據(jù)庫卸載、安裝與配置
- SQL2005錯誤:2812 的解決方法
- 深入理解SQL的四種連接-左外連接、右外連接、內(nèi)連接、全連接
- MySQL SELECT同時UPDATE同一張表問題發(fā)生及解決
- MySQL數(shù)據(jù)庫InnoDB數(shù)據(jù)恢復(fù)工具的使用小結(jié)詳解
- mysql隨機(jī)查詢的優(yōu)化
- sql語句:SQLServer字段排序(按筆畫,拼音,拼音首字母)
- SQL字符型字段按數(shù)字型字段排序?qū)崿F(xiàn)方法
- 解析MySQL中INSERT INTO SELECT的使用
- MySQL自增列插入0值的解決方案
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-SQLServer 2008中的代碼安全(四) 主密鑰
。