17-SQLServer使用證書認證的方式搭建數據庫鏡像


一、注意點

1.數據庫的模式要是完整模式。

2.要對數據庫完整備份和事務日志備份,分別還原到鏡像庫上,使用NORECOVERY模式。

3.鏡像數據庫是不允許刪除和操作,即便查看屬性也不行。

4.先刪除端點,再刪除證書,再刪除主密鑰。

5.只有是同步模式的時候,才能手動故障轉移,異步模式不能手動故障轉移。

 

 

 

二、搭建步驟

1、創建主密鑰(主庫和鏡像庫上都執行)

命令:

use master
go
create master key encryption by password='$a123456'
go

查看主密鑰

創建主密鑰之前:

創建主密鑰之后:

 2、創建主庫和鏡像庫的證書(分別在主庫和鏡像庫上執行)

命令:

主庫上執行:

use master
go
create certificate mirror01_cert with subject='mirror01 certificate',expiry_date='2099-1-1'
go

鏡像庫上執行:

use master
go
create certificate mirror02_cert with subject='mirror02 certificate',expiry_date='2099-1-1'
go

 

 

  3、創建主庫和鏡像庫的端點

命令:

主庫上執行:

use master
go
create endpoint Endpoint_Mirroring
state=started
as tcp ( listener_port = 5022,listener_ip = all )
for database_mirroring ( authentication = certificate mirror01_cert, encryption = required algorithm aes, role = all )
go

鏡像庫上執行:

use master
go
create endpoint Endpoint_Mirroring
state=started
as tcp ( listener_port = 5022,listener_ip = all )
for database_mirroring ( authentication = certificate mirror02_cert, encryption = required algorithm aes, role = all )
go

SSMS查看創建的端點

 

 

 4、備份證書(主庫和鏡像的庫的都備份,並互相拷貝過去,保證每個服務器上都有2個證書)

命令:

主庫上執行:

use master
go
backup certificate mirror01_cert to file = 'D:\cert\mirror01_cert.cer'
go

鏡像庫上執行:

use master
go
backup certificate mirror02_cert to file = 'D:\cert\mirror02_cert.cer'
go

 

 5、創建登錄名(這個要和證書關聯,所以1創建2的,2創建1的)

命令:

主庫上執行:

use master
go
create login mirror02_login with password='abc@123456'
go

鏡像庫上執行:

use master
go
create login mirror01_login with password='abc@123456'
go

 

 

  

 6、創建使用該登錄名的用戶

命令:

主庫上執行:

use master
go
create user mirror02_user for login mirror02_login
go

鏡像庫上執行:

use master
go
create user mirror01_user for login mirror01_login
go

 

 

 7、證書與用戶關聯

命令:

主庫上執行:

use master
go
create certificate mirror02_cert
authorization mirror02_user
from file='D:\cert\mirror02_cert.cer'
go

鏡像庫上執行:

use master
go
create certificate mirror01_cert
authorization mirror01_user
from file='D:\cert\mirror01_cert.cer'
go

 

 

 

 

8、授予對遠程數據庫端點的登錄名的CONNECT權限

命令:

主庫上執行:

use master
go
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [mirror02_login];
go

鏡像庫上執行:

use master
go
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [mirror01_login];
go

 

 9、對需要做鏡像的數據庫做完整備份和事務日志備份,然后在鏡像庫上做還原(先還原完整備份,再還原事務日志),使用NORECOVERY模式,這里不做闡述,最后還原后的數據庫狀態如下:

 

 10.連接鏡像(先在鏡像庫上操作,然后在主庫上操作)

注:sqlmirror01和sqlmirror02是2台機器的機器名

命令:

鏡像庫上執行:(做完這個操作后,數據庫的狀態:正在恢復)

use master
go
ALTER DATABASE test SET PARTNER = 'TCP://sqlmirror01:5022';
go

主庫上執行:(做完這個操作,鏡像就搭建好了)

use master
go
ALTER DATABASE test SET PARTNER = 'TCP://sqlmirror02:5022';
go

此時主庫的狀態:

 鏡像庫的狀態:

 鏡像的狀態:(只能在主庫上右鍵-->屬性查看)

 注:如果狀態不對,先刷新一下SSMS

11.查看的選項

(1)啟用數據庫監視器查看鏡像是否正常(主庫上查看)

 

 

 

 (2)查看鏡像服務器是否授權主庫服務器

 12 .主庫宕機后,怎么恢復鏡像庫為可用狀態

--第一步:脫離鏡像
alter database test set partner off

--第二步;修改數據庫的狀態為recovery
restore database test with recovery

 

三、涉及到的系統SQL

--1.查看所有的主秘鑰
select * from sys.key_encryptions

--刪除主秘鑰(要先刪除使用秘鑰的證書)
drop master key

--2.查看所有的證書
select * from sys.certificates

--刪除證書(要先刪除使用證書的端點)
drop certificate sqlmirror02_cert

--3.查看所有的端點(endpoint)
select * from sys.endpoints

--刪除端點
drop endpoint Endpoint_Mirroring

 

四、遇到的錯誤

1.數據庫鏡像監視器的報錯

(1)錯誤截圖

 

 (2)解決辦法

注:這是有可能連接鏡像服務器的認證失效了,比如windows認證的administrator或SQLServer認證的sa密碼改了

 

 

 

 

 

 再次查看已經OK了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM