安全性概觀 (Service Broker)
Service Broker 會協助您撰寫具有高擴充性而又安全可靠的資料庫應用程式。Service Broker 安全性可讓由不同 SQL Server 執行個體所主控的服務都能安全地進行通訊,甚至是在彼此沒有其他信任關聯性之不同電腦上的執行個體或是在同一時間未連接到同一網路的來源和目的地電腦亦可。
Service Broker 安全性依賴於「憑證」。一般方法是使用憑證建立遠端資料庫的認證,然後從遠端資料庫將作業對應至本機使用者。本機使用者的權限會套用至代表遠端服務的任何作業。憑證在資料庫之間共用。不會共用該使用者的其他資訊。
Service Broker 提供兩種相異的安全性類型:「對話安全性」和「傳輸安全性」。了解這兩種類型的安全性以及如何搭配使用,將有助於您設計、部署和管理 Service Broker 應用程式。
Dialog security - 加密個別對話交談中的訊息並驗證對話中參與者的識別。對話安全性還提供遠端授權和訊息完整性檢查。對話安全性會在兩個服務間建立經驗證和加密的通訊。
Transport security - 防止未經授權的資料庫將 Service Broker 訊息傳送至本機執行個體中的資料庫。傳輸安全性會在兩個資料庫間建立經驗證的網路連接。
請注意,對話通訊協定和相鄰 Broker 通訊協定的設計目標是在兩個資料庫之間傳遞訊息,而不是在遠端資料庫上執行命令。這種樣式的通訊可讓 Service Broker 提供不需要要求資料庫就能共用 SQL Server 登入或 Windows 安全性認證的服務。
如需有關憑證的詳細資訊,請參閱<CREATE CERTIFICATE (Transact-SQL)>。
Adventure Works Cycles 安全性案例
在範例商務案例中,Adventure Works Cycles (一家虛構的公司) 會建立傳遞零件訂單給零售商的 Service Broker 服務。此服務需要 Adventure Works 和零售商兩者的安全性。每個零售商都必須能夠保證只有現有客戶可提交訂單。Adventure Works 必須能夠保證只有限定的零售商可接收訂單。在 AdventureWorks2008R2 資料庫和零售商之間傳遞的訊息必須經過加密,以防止第三方閱讀訊息。為了確保可能的最高安全性層級,只有限定的零售商才可以連接到 AdventureWorks2008R2 資料庫。
為了滿足必須加密訊息的需求,Adventure Works 和零售商會使用 Service Broker 對話安全性:
若要設定對話安全性,AdventureWorks2008R2 管理員會建立名為 VendorOutgoing 的本機使用者並為該使用者建立金鑰組。
管理員會將包含金鑰組之公開金鑰的憑證散髮給需要存取服務的零售商。
每個零售商都要將來自 Adventure Works Cycles 的憑證安裝到資料庫中,並建立擁有該憑證的使用者。
然後,零售商會建立金鑰組,並將有關零售商服務之服務名稱的資訊以及具有該金鑰組之公開金鑰的憑證傳送給 AdventureWorks2008R2 管理員。
AdventureWorks2008R2 管理員會為每個零售商建立一個使用者,並將來自該零售商的憑證與使用者產生關聯。
管理員還會為每個零售商建立一個遠端服務繫結,其會使零售商服務的名稱與為該零售商建立的使用者產生關聯。
為了滿足只有限定的零售商才能連接到 AdventureWorks2008R2 資料庫的需求,AdventureWorks2008R2 管理員會使用 Service Broker 傳輸安全性:
若要設定傳輸安全性,AdventureWorks2008R2 管理員會在要傳送訊息之 SQL Server 執行個體的 master 資料庫中建立憑證。
AdventureWorks2008R2 管理員會將憑證傳送給每個零售商。
每個零售商管理員會在 master 資料庫中建立一個擁有憑證的使用者,然後在要接收訊息的 SQL Server 執行個體中安裝憑證。
零售商管理員接下來會在執行個體的 master 資料庫中建立憑證,並將該使用者的公開金鑰傳送給 AdventureWorks2008R2 管理員。
最後,AdventureWorks2008R2 管理員會在 master 資料庫中建立要擁有每個零售商公開金鑰憑證的使用者,並在資料庫中安裝每個零售商的憑證。
傳輸安全性和對話安全性一起使用有助於 AdventureWorks2008R2 管理員符合此應用程式的安全性需求。請注意,在此案例中,零售商無法登入 AdventureWorks2008R2 資料庫,而 Adventure Works 管理員也無法登入零售商資料庫。只有 Service Broker 訊息可在這兩個資料庫之間進行交換。