多維度模型組件管理

適用于:SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

Microsoft SQL Server SQL Server Analysis Services提供許多內建函數來搭配多維度運算式使用, (MDX) 和資料採礦延伸模組 (DMX) 語言,其設計目的是要完成從標準統計計算到周遊階層中成員的所有專案。 但是,就如同其他複雜且強固的產品一樣,總是有進一步擴充產品功能的需求。

因此,SQL Server Analysis Services可讓您將元件新增至SQL Server Analysis Services實例或資料庫。 組件可讓您使用任何 Common Language Runtime (CLR) 語言 (例如 Microsoft Visual Basic .NET 或 Microsoft Visual C#) 來建立外部使用者自訂函數。 您也可以使用元件物件模型 (COM) 自動化語言 (例如 Microsoft Visual Basic 或 Microsoft Visual C++)。

重要

COM 組件可能會造成安全性風險。 由於此風險和其他考慮,SQL SERVER 2008 Analysis Services (SSAS) 中已淘汰 COM 元件。 在未來的版本中,可能不再支援 COM 組件。

組件可以讓您延伸 MDX 和 DMX 的商務功能。 您可以將您想要的功能建置到程式庫中,例如動態連結程式庫 (DLL) ,並將程式庫新增為SQL Server Analysis Services實例或SQL Server Analysis Services資料庫的實例。 程式庫中的公用方法便公開給 MDX 和 DMX 運算式、程序、計算、動作,以及用戶端應用程式,作為使用者自訂函數。

具有新程序和函數的組件可加入到伺服器。 您可以使用組件來增強或加入伺服器未提供的自訂功能。 藉由使用組件,便可以將新的功能加入多維度運算式 (MDX)、資料採礦延伸模組 (DMX) 或預存程序。 組件會從自訂應用程式執行所在的位置載入,而且會將組件二進位檔案的複本連同資料庫資料儲存在伺服器中。 當移除組件時,複製的組件也會從伺服器中移除。

組件可以有兩種不同類型:COM 和 CLR。 CLR 組件是使用 .NET Framework 程式設計語言 (如 C#、Visual Basic .NET、Managed C++) 開發的組件。 COM 組件是必須在伺服器上註冊的 COM 程式庫。

組件可加入 ServerDatabase 物件。 伺服器組件可由連接到伺服器或伺服器中任何物件的任何使用者所呼叫。 資料庫組件只能由連接到資料庫的 Database 物件或使用者所呼叫。

簡單 Assembly 物件是由基本資訊 (名稱和識別碼)、檔案集合和安全性規格所組成。

檔案集合指的是載入的組件檔案以及其對應的偵錯 (.pdb) 檔案 (如果這些偵錯檔案與組件檔案一起載入)。 組件檔案會從應用程式定義檔案的位置載入,而且會將複本連同資料儲存在伺服器中。 組件檔案的複本是用在每次啟動服務時載入組件。

安全性指定包含用來執行組件的權限集合和模擬。

呼叫使用者自訂函數

在組件中呼叫使用者自訂函數的方式,與呼叫內建函數的方式相同,只不過您需要使用完整名稱。 例如,傳回 MDX 所預期類型的使用者自訂函數,會包含在 MDX 查詢中,如下列範例所示:

Select MyAssembly.MyClass.MyStoredProcedure(a, b, c) on 0 from Sales  

使用者自訂函數亦可使用 CALL 關鍵字呼叫。 針對會傳回資料錄集或空值的使用者自訂函數,您必須使用 CALL 關鍵字;但如果使用者自訂函數是取決於 MDX 或 DMX 陳述式或指令碼內容中的物件 (例如目前的 Cube 或資料採礦模型),則不可使用 CALL 關鍵字。 在 MDX 或 DMX 查詢之外呼叫函數的常見用途是使用 AMO 物件模型來執行管理功能。 例如,如果您想要在 MDX 陳述式中使用 MyVoidProcedure(a, b, c) 函數,就應使用下列語法:

Call MyAssembly.MyClass.MyVoidProcedure(a, b, c)  

組件的使用讓通用程式碼只需要開發一次,並儲存於單一位置,以簡化資料庫的開發。 用戶端軟體發展人員可以針對SQL Server Analysis Services建立函式程式庫,並將其與其應用程式一起散發。

元件和使用者定義函式可以複製SQL Server Analysis Services函式程式庫或其他元件的函式名稱。 只要您使用使用者定義函數的完整名稱呼叫,SQL Server Analysis Services就會使用正確的程式。 基於安全性目的,以及排除在不同類別庫中呼叫重複名稱的機會,SQL Server Analysis Services要求您只針對預存程式使用完整名稱。

若要從特定 CLR 組件呼叫使用者自訂函數,該使用者自訂函數將置於組件名稱、完整類別名稱,以及程序名稱之後,如下所示:

AssemblyNameFullClassNameProcedureName (Argument1、 Argument2、 ...)

為了與舊版SQL Server Analysis Services的回溯相容性,也可以接受下列語法:

AssemblyName!FullClassName!ProcedureName(Argument1, Argument2, ...)

如果 COM 程式庫支援多重介面,則介面識別碼也可以用來解析程序名稱,如下所示:

AssemblyName!InterfaceID!ProcedureName(Argument1, Argument2, ...)

安全性

組件的安全性是以 .NET Framework 安全性模型為基礎,它是一種程式碼存取安全性模型。 .NET Framework 支援程式碼存取安全性機制,而這個機制假設執行階段可以主控完全信任和部份信任的程式碼。 受 .NET Framework 程式碼存取安全性保護的資源,一般都是以 Managed 程式碼包裝,而 Managed 程式碼在存取資源前會要求對應的權限。 唯有在呼叫堆疊中所有的呼叫者 (在組件層級) 都具有對應的資源權限時,權限的要求才會被滿足。

針對組件,執行的權限會透過 Assembly 物件的 PermissionSet 屬性傳遞。 Managed 程式碼所接收的權限是由實行中的安全性原則決定。 非SQL Server Analysis Services託管環境中已經有三種原則層級有效:企業、電腦和使用者。 程式碼所接收的有效權限清單是由這三個層級所取得的權限交集決定。

SQL Server Analysis Services裝載時,會將主機層級的安全性原則層級提供給 CLR;此原則是低於一律有效之三個原則層級的額外原則層級。 此原則是針對SQL Server Analysis Services所建立的每個應用程式域所設定。

SQL Server Analysis Services主機層級原則是系統元件和使用者元件使用者指定原則SQL Server Analysis Services固定原則的組合。 SQL Server Analysis Services主機原則的使用者指定部分是以元件擁有者為基礎,為每個元件指定三個許可權貯體之一:

權限設定 Description
保險箱 提供內部計算權限。 這個權限值區不會指派權限,來存取 .NET Framework 中的所有受保護資源。 如果未使用 PermissionSet 屬性指定任何權限,這就會是組件的預設權限值區。
ExternalAccess 提供和 Safe 設定相同的存取權,並附帶存取外部系統資源的能力。 這個權限值區不提供安全性保證 (雖然是可以確保此情況的安全),但是可以提供可靠性的保證。
安全 不提供限制。 在此權限設定下執行的 Managed 程式碼,無法提供安全性或可靠性的保證。 任何權限,即使是管理員納入的自訂權限,皆可被授與在本信任層級執行的程式碼。

當 CLR 由 SQL Server Analysis Services 裝載時,堆疊逐步解說型許可權檢查會在具有原生SQL Server Analysis Services程式碼的界限停止。 SQL Server Analysis Services元件中的任何 Managed 程式碼一律屬於先前所列的三個許可權類別之一。

COM (或 Unmanaged) 組件常式不支援 CLR 安全性模型。

模擬

每當 Managed 程式碼存取SQL Server Analysis Services以外的任何資源時,SQL Server Analysis Services遵循元件之 ImpersonationMode屬性設定相關聯的規則,以確保存取發生在適當的 Windows 安全性內容中。 由於使用安全許可權設定的元件無法存取SQL Server Analysis Services以外的資源,因此這些規則僅適用于使用ExternalAccessUnsafe許可權設定的元件。

  • 如果目前的執行內容對應到 Windows 已驗證的登入,而且與原始呼叫端的內容相同 (,則中間) 沒有 EXECUTE AS,SQL Server Analysis Services會在存取資源之前模擬 Windows 驗證登入。

  • 如果有中繼 EXECUTE AS 變更了來自原始呼叫者的內容,對外部資源存取的嘗試就會失敗。

可將 ImpersonationMode 屬性設定為 ImpersonateCurrentUserImpersonateAnonymous。 預設值是 ImpersonateCurrentUser,會用來以目前使用者的網路登入帳戶執行組件。 如果使用 ImpersonateAnonymous 設定,則執行內容會對應到伺服器上的 Windows 登入使用者帳戶 IUSER_servername 。 這是網際網路 Guest 帳戶,在伺服器上的權限有限。 在這個內容中執行的組件,在本機伺服器上只能存取有限的資源。

應用程式定義域

SQL Server Analysis Services不會直接公開應用程式域。 因為組件集是在相同的應用程式定義域中執行,所以應用程式定義域可以在執行時使用 .NET Framework 中的 System.Reflection 命名空間或其他方式,來發現彼此,也可用晚期繫結方式呼叫它們。 這類呼叫將受限於SQL Server Analysis Services授權型安全性所使用的許可權檢查。

因為應用程式網域界限和每個網域中的組件都是由實作所定義,所以您不應該依賴在同一應用程式網域中尋找組件。

另請參閱

設定預存程序的安全性
定義預存程式