共用方式為


Notification Services 的安全性考量

Notification Services 是利用資料庫角色和受限制的資料庫使用者帳戶,來實作安全性。本主題將描述 Notification Security 模型和建議的做法,來加強 Notification Services 應用程式的安全性。

Notification Services 安全性模型

Notification Services 具有引擎可以執行主控的事件提供者、產生器和散發者。同時它也可以有提交事件或管理訂閱的用戶端應用程式。

該引擎和用戶端應用程式所用的登入帳戶,是採用 Windows 驗證或 SQL Server 驗證來存取 SQL Server;它們是透過資料庫使用者帳戶,取得資料庫存取權,以及透過 Notification Services 資料庫角色中的成員資格,取得執行個體和應用程式資料庫的必要權限。

下圖顯示的是針對每個引擎元件、非主控事件提供者和訂閱管理介面,提供必要權限的資料庫角色。

Notification Services 安全性模型

資料庫權限是指派給資料庫角色。個別元件的資料庫使用者,是透過適當角色中的成員資格,取得其必要權限:

  • 事件提供者所用的帳戶,是透過 NSEventProvider 資料庫角色中的成員資格來取得權限。事件提供者主機會執行主控的事件提供者。非主控的事件提供者,則是獨立的應用程式。
  • 產生器所用的帳戶,是透過 NSGenerator 資料庫角色中的成員資格來取得權限。
  • 散發者所用的帳戶,是透過 NSDistributor 資料庫角色中的成員資格來取得權限。
  • 訂閱管理介面所用的帳戶,是透過 NSSubscriberAdmin 資料庫角色中的成員資格來取得權限。

如果引擎執行的是主控的事件提供者、產生器和散發者,其帳戶便可以透過 NSRunService 資料庫角色,取得所有必要的權限。

如需有關實作 Notification Services 安全性的資訊,請參閱<保全 Notification Services>。

條件動作的其他帳戶

在 Microsoft SQL Server 2005 中,Notification Services 有一個新的訂閱規則功能。現在,事件驅動規則和排定規則可以使用條件動作,讓訂閱者利用使用者自訂的查詢子句,定義更豐富的訂閱。

由於以條件動作為依據的訂閱,接受使用者自訂的查詢子句,因此查詢所能使用的資料應該是有限的。因此,您必須定義一個條件動作執行所用的資料庫使用者。資料庫使用者應該只能查詢含有輸入資料的資料表和檢視。

產生器會引發含有條件動作的規則。不過,條件動作查詢會受到指定資料庫使用者進一步的限制。您是在定義 Notification Services 應用程式時,指定資料庫使用者。

如需有關條件動作的詳細資訊,請參閱<定義條件動作>。

Windows 權限

除了資料庫權限之外,有的元件也需要具備其他 Windows 權限:

  • 用來執行 Notification Services 引擎的帳戶必須是 SQLServer2005NotificationServicesUser$ComputerName Windows 群組的成員。這會提供用來執行服務的 Notification Services 二進位檔之存取權。若使用 NS$instanceName Windows 服務來執行引擎,Notification Services 會在您註冊執行個體時,將服務帳戶加入 SQLServer2005NotificationServicesUser$ComputerName 群組中。
    需要存取 Notification Services 二進位檔的任何其他元件也都需要 SQLServer2005NotificationServicesUser$ComputerName 群組中的成員資格。Notification Services 組件與資源位在全域組件快取 (GAC) 中,因此使用它們時不需要此群組中的成員資格。
  • 事件提供者有時候需要資料夾和其他資料庫的權限。例如,檔案系統監看員事件提供者需要有權讀取 描述事件結構描述的 XML 結構描述定義 (XSD) 檔案,同時需要有權讀取和修改卸除事件檔案的資料夾。SQL Server 事件提供者需要有權存取作為事件來源的資料庫資料表或檢視。
  • 散發者需要有權傳遞通知給傳遞服務,例如,Simple Mail Transfer Protocol (SMTP) 伺服器、Short Message Service (SMS)、Web 伺服器或檔案系統。使用 XSL 轉換 (XSLT) 內容格式器的散發者,也需要有權存取 XSLT 檔。

安全性建議

下列幾節將提供有關保護 Notification Services 引擎、訂閱管理介面、自訂事件提供者、自訂傳遞通訊協定和其他自訂應用程式的建議。

Notification Services 引擎

當您部署 Notification Services 的執行個體時,請考慮下列有關 Notification Services 引擎的安全性建議:

  • 設定讓引擎使用資料庫存取的 Windows 驗證。
  • 以低權限網域或本機帳戶來執行引擎。請勿使用本機系統、本機服務或網路服務帳戶,或是管理員群組中的任何帳戶。
    不過,傳遞通訊協定可能需要其他權限,才能使用服務執行所用的帳戶。例如,如果您是利用本機 Internet Information Services (IIS) SMTP 服務來傳送通知,則引擎執行所用的帳戶,必須是本機管理員群組的成員才行。(如果是透過遠端機器上的 SMTP 服務來傳送通知,就不需要管理員權限)。
  • 當您部署 Notification Services 的執行個體時,請確定每個引擎只具備必要的權限。
    如果是進行單一伺服器的部署,引擎會執行所有執行個體主控的事件提供者、產生器和散發者。引擎所用的帳戶,應該透過 NSRunService 資料庫角色中的成員資格,取得必要的資料庫權限。
    如果是進行向外延展的部署,請限制個別引擎的權限。例如,如果引擎只執行事件提供者,請限制授與引擎帳戶的資料庫權限,方法是讓該帳戶成為 NSEventProvider 資料庫角色的成員,而不將其他資料庫或伺服器權限授與該帳戶。請勿使用 NSRunService 角色,除非該引擎執行所有的引擎元件。
    ms172604.note(zh-tw,SQL.90).gif附註:
    在定義應用程式時,針對每個主控的事件提供者、產生器和散發者指定系統名稱,來設定每個引擎要執行什麼。
  • 如果 Notification Services 引擎元件和 SQL Server Database Engine 位於不同的伺服器,請務必針對 Database Engine 而啟用 TCP/IP 或具名管道。為了加強 Database Engine 的安全性,大部分的網路通訊協定依預設都是關閉的。
  • 登入帳戶一定要採用增強式密碼。如需有關增強式密碼的詳細資訊,請參閱 Microsoft Windows 文件集中的 <建立增強式密碼>。
  • 確定所有該引擎執行的程式碼 (例如,自訂事件提供者、內容格式器和通訊協定),都是來自受信任的來源。Notification Services 假設執行個體組態和應用程式定義所列出的程式碼 (您用來建立和更新 Notification Services 的執行個體),是來自受信任的來源。在定義應用程式時,請使用完整的組件名稱,以確保載入的組件正確。
  • Notification Services 無法驗證通訊協定標頭欄位。因此,如果您的應用程式在通訊協定欄位中,使用訂閱者、訂閱者裝置或訂閱資訊,請驗證使用者輸入,或者使用應用程式定義 (而非使用者自訂) 的值。如需惡意使用者資料的範例,請參閱<SQL 資料隱碼>。
  • 保護所有包含組態檔或應用程式資料的資料夾。如需有關保護檔案和資料夾的詳細資訊,請參閱<保全檔案與資料夾>。

主控 Notification Services 引擎

通常 Notification Services 引擎是您在註冊 Notification Services 執行個體時所建立的 NS$instanceName Windows 服務。不過,您可以在自己的應用程式中主控引擎,而不必使用 Windows 服務。

引擎會登入 Database Engine,執行 Notification Services 的執行個體。如果您主控 Notification Services 引擎,請務必保護您的來源檔案和二進位檔案。

如需有關主控引擎的詳細資訊,請參閱<主控 Notification Services 引擎>。

訂閱管理介面

訂閱管理介面可讓使用者訂閱通知應用程式,以及建立訂閱。訂閱管理介面是透過 NSSubscriberAdmin 資料庫角色中的成員資格,以取得執行個體和應用程式資料庫中的資料庫權限。

當您開發訂閱管理介面時,請考慮下列安全建議:

  • 在加入、刪除或修改訂閱者和訂閱資料之前,請先驗證訂閱者的識別,然後尋找符合該識別的訂閱者識別碼。
  • 任何使用者或應用程式,只要其帳戶具有 NSSubscriberAdmin 資料庫角色的成員資格 (或更高的有效權限),就可以修改訂閱者和訂閱資料。請勿授與不必要的權限,以及保護訂閱管理介面所用的使用者名稱和密碼。
  • 不要以純文字儲存機密資訊,例如,應用程式資料庫連接所用的使用者名稱和密碼。請使用資料保護應用程式發展介面 (DPAPI),為機密資訊加密,然後將資訊儲存在登錄中。
  • 如果您的應用程式必須使用機密資訊作為使用者識別 (例如,社會安全號碼),可以提供使用者非機密的使用者識別碼,然後在資料庫中使用查閱資料表,尋找與機密資訊相符的資料。

訂閱管理介面常常是 Web 應用程式。如需有關 ASP.NET 應用程式安全性選項的資訊,請參閱<部署訂閱管理介面>。

自訂事件提供者

事件提供者會提交事件資料給 Notification Services 應用程式。您可以為應用程式開發自訂事件提供者 (主控或非主控)。當您開發自訂事件提供者時,請考慮下列安全性建議:

  • 確定事件提供者是使用 NSEventProvider 資料庫角色來提交事件。
  • 任何使用者或應用程式,只要具備有效的事件提供者名稱,以及具有您應用程式資料庫中 NSEventProvider 資料庫角色成員資格 (或更高的有效權限) 的帳戶,都可以提交事件。請勿授與不必要的權限,以及保護非主控事件提供者所用的使用者名稱和密碼。
  • 不要以純文字儲存機密資訊,例如,使用者名稱和密碼。請使用 DPAPI 為機密資訊加密,然後將資訊儲存在登錄中。
  • 保護所有的自訂元件來源檔案和二進位檔案。

自訂、主控的事件提供者會在事件提供者主機內容中提交事件;您不必在主控事件提供者程式碼中,提供任何安全性認證來提交事件。下列建議特別適用於主控的事件提供者:

  • 當您建立應用程式時,會在應用程式定義中,提供有關自訂主控事件提供者的資訊。Notification Services 信任應用程式定義中所有的資訊。請使用完整的組件名稱,以確保載入的組件正確。

非主控的事件提供者是在 Notification Services 應用程式內容外面執行。下列建議特別適用於非主控的事件提供者:

  • 非主控的事件提供者,並未獲得 Notification Services 明確的信任。您必須在非主控的事件提供者程式碼中,提供安全性認證。指定的帳戶必須能夠登入 Database Engine 的執行個體,而相關聯的資料庫使用者帳戶,必須是每個執行個體和應用程式資料庫中 NSEventProvider 資料庫角色的成員。

自訂傳遞通訊協定

自訂傳遞通訊協定是在 Notification Services 引擎的內容中執行。與所有的自訂元件一樣,請保護您的來源檔案和二進位檔案,以保護任何機密資訊。

Notification Services Management Objects

如果您是使用 Notification Services Management Objects (NMO) 來設定 Notification Services 的執行個體、定義應用程式、或開發管理應用程式,請務必保護來源檔案和二進位檔案。含有執行個體和應用程式資料庫的檔案,可以包含伺服器名稱、使用者名稱和密碼等機密資訊。

如需有關執行個體和應用程式中繼資料和其他檔案的詳細資訊,請參閱<保全檔案與資料夾>。

請參閱

概念

保全 Notification Services

其他資源

SQL Server 的安全性考量
部署 Notification Services

說明及資訊

取得 SQL Server 2005 協助