多維度模型元件管理
適用於: 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 實例或資料庫。 元件可讓您使用任何通用語言執行平臺 (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 連結庫
元件可以新增至 Server 或 Database 物件。 任何連線到伺服器或伺服器中任何對象的使用者都可以呼叫伺服器元件。 資料庫元件只能由 Database 對象或連接到資料庫的使用者呼叫。
簡單的 Assembly 物件是由基本資訊(名稱和標識符)、檔案集合和安全性規格所組成。
如果偵錯檔案已載入元件檔,則檔案集合是指載入的元件檔及其對應的偵錯 (.pdb) 檔案。 元件檔案會從應用程式定義檔案的位置載入,而複本會連同數據一起儲存在伺服器中。 每次啟動服務時,會使用元件檔案的復本來載入元件。
安全性規格包括許可權集合和用來執行元件的模擬。
呼叫 User-Defined 函式
在元件中呼叫使用者定義函式就像呼叫內部函數一樣執行,但您必須使用完整名稱。 例如,傳回 MDX 預期類型的使用者定義函數包含在 MDX 查詢中,如下列範例所示:
Select MyAssembly.MyClass.MyStoredProcedure(a, b, c) on 0 from Sales
您也可以使用 CALL 關鍵詞來呼叫使用者定義函數。 您必須針對傳回記錄集或 void 值的使用者定義函數使用 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元件呼叫使用者定義函式,使用者定義函數前面會加上元件名稱、完整類別名稱和程式名稱,如下所示:
AssemblyName。FullClassName。ProcedureName(Argument1,Argument2...)
為了與舊版 SQL Server Analysis Services 的回溯相容性,也可以接受下列語法:
AssemblyName!FullClassName!ProcedureName(Argument1,Argument2...)
如果 COM 連結庫支援多個介面,介面識別碼也可以用來解析程式名稱,如下所示:
AssemblyName!InterfaceID!ProcedureName(Argument1,Argument2...)
安全
元件的安全性是以 .NET Framework 安全性模型為基礎,這是程式代碼存取安全性模型。 .NET Framework 支援程式代碼存取安全性機制,假設運行時間可以同時裝載完全信任和部分信任的程序代碼。 受 .NET Framework 程式代碼存取安全性保護的資源通常會由 Managed 程式代碼包裝,這些程式碼會要求對應的許可權,才能啟用資源的存取權。 只有在呼叫堆疊中的所有呼叫端(在元件層級)都有對應的資源許可權時,才會滿足許可權的需求。
針對元件,執行的許可權會與 Assembly 物件上的 PermissionSet 屬性一起傳遞。 受管理程式代碼接收的許可權是由安全策略所決定。 非 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 主機原則的使用者指定部分是以元件擁有者為基礎,為每個元件指定三個許可權貯體之一:
許可權設定 | 描述 |
---|---|
安全 | 提供內部計算許可權。 此許可權貯體不會指派許可權來存取 .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 安全性內容中。 由於使用 Safe 許可權設定的元件無法存取 SQL Server Analysis Services 外部的資源,所以這些規則僅適用於使用 ExternalAccess 和 Unsafe 許可權設定的元件。
如果目前的執行內容對應至 Windows 驗證登入,且與原始呼叫端的內容相同(也就是中間沒有 EXECUTE AS),SQL Server Analysis Services 會在存取資源之前模擬 Windows 驗證的登入。
如果有中繼 EXECUTE AS 從原始呼叫端變更內容,嘗試存取外部資源將會失敗。
ImpersonationMode 屬性可以設定為 ImpersonateCurrentUser 或 ImpersonateAnonymous。 默認設定 ImpersonateCurrentUser,會在目前使用者的網路登入帳戶下執行元件。 如果使用 ImpersonateAnonymous 設定,則執行內容會對應至伺服器上的 Windows 登入使用者帳戶IUSER_servername。 這是因特網來賓帳戶,在伺服器上具有有限的許可權。 在此內容中執行的元件只能存取本地伺服器上的有限資源。
應用程式域
SQL Server Analysis Services 不會直接公開應用程式域。 由於在同一個應用程式域中執行的一組元件,應用程式域可以在運行時間使用 .NET Framework 中的 System.Reflection 命名空間,或以其他方式相互探索,並以晚期綁定方式呼叫它們。 這類呼叫將受限於 SQL Server Analysis Services 授權型安全性所使用的許可權檢查。
您不應該依賴在相同的應用程式域中尋找元件,因為實作會定義進入每個網域的應用程式域界限和元件。