閱讀934 返回首頁    go 阿裏雲 go 技術社區[雲棲]


RDS-SQLSERVER不支持MSDTS的原因分析

一、Msdtc 的描述及使用方法

Msdtc 在就是windows中的一個服務,稱為分布式事務處理服務。它幫助我們實現分布式數據庫服務器之間集合事務處理,即遠程異地事務處理功能,例如:有多個SQL SERVER 服務器,我們要讓它互相執行更新操作,但又要保證事務的完整性,就要可以開啟msdtc功能進行實現:

SqL server 分布式事務腳本舉例:

{

Set XACT_ABORT on

Being tran

Insert into [遠程機器ip].databaseName.dbo.tableName(id,name )

Select  ‘1’,’遠程’

Insert into tablename(id,name)

Select ‘1’,’本地’

COMMIT

}

這個語句,啟動了分布式事務, 保證遠程數據庫服務器和本地數據庫都要插入一條數據,要麼都插入,要麼誰都不插入,保證數據的一致性。

二、Msdtc的配置:

網上寫的很詳細,我這裏就不一一累述了

參考鏈接:

https://www.cnblogs.com/ryanding/archive/2010/07/17/1779668.html

 

三、RDS不支持的原因:

1、  msdtc 服務啟動,是依賴於RPC服務的,該服務需要開啟135端口,而我們現在鏈路層在轉發vip時,沒有考慮135端口包的轉發。另外135端口是一個不建議開啟的端口,在黑客有鏈接用戶名、密碼時可以遠程直接通過該端口控製dbnode節點的,在沒有用戶名密碼的情況也可以通過135端口,獲取服務器的目錄結構、用戶名、共享目錄等信息,這些信息如果被黑客獲取,將是對RDS是致命的。這個原因跟安全專家林淼進行確認過的。

2、 msdtc 設置時需要客戶端與服務器端都要配置,通過NT Authority\Network Service進行遠程訪問,而且不做驗證。Network Service 帳戶是一個內置帳戶,比 Users 組的成員擁有更多的對資源和對象的訪問權限。相當於服務器的操作係統級別權限,開放給了一個客戶端(或者是用戶)

四、     建議解決方案:

1、  暫時的處理該需求的方法,建議用戶在應用端實現。

2、  後期可以考慮讓用戶購買兩個RDS,來做分布式。這樣是兩個RDS主機之間相互暴露,而對用戶(客戶端)沒有直接訪問dbnode節點權限的問題。但需要現有的RDS考慮兩件事情,一是考慮支持別名訪問或者真實ip暴露給用戶的問題 ,二是配置所有節點的msdtc服務。

最後更新:2017-04-03 08:26:18

  上一篇:go RDS最佳實踐(一)–如何選擇RDS
  下一篇:go 中國移動擬將部分服務價格下調至多50%