Sql-Server

如何在 SSAS 伺服器上編寫管理員權限腳本?

  • October 7, 2020

我是一堆SSAS實例的管理員。

有時我需要將 SSAS 實例安裝或遷移到不同的機器甚至不同的 AD 域(我們在信任關係中有幾個不同的 AD 域)。

sql server 一樣,我需要能夠在實例之間導出和導入登錄名權限。

此外,作為維護計劃的一部分,我喜歡保存登錄名和權限以及備份 ssas 數據庫

我會通過腳本 T-SQL 或Powershell編寫管理登錄腳本,以便我可以自動化它。

此刻,因為趕時間,我是這樣做的:

  1. 以管理員身份連接到原始伺服器,並將所有權限寫入 mdx 文件。
  2. 複製此腳本並在目標伺服器上執行它。

在此處輸入圖像描述

如何在 SSAS 伺服器上編寫管理員權限腳本?

我強烈建議您查看分析管理對象 (AMO) - 我使用它來執行 SSAS 中的所有維護任務,例如創建角色、權限、數據庫和模型。

我更喜歡使用 C#,但網上有很多在 PowerShell 中使用相同類的範例。您需要確保根據您擁有的安裝類型(多維或表格)使用正確的類。看起來您在上面的範例中有 Tabular,因此請主要參考Microsoft.AnalysisServices.Tabular 命名空間

這就是我使用 AMO 在 c# 中執行某些任務的方式:

// Copy Roles

var sourceServer = new Server();
var targetServer = new Server();

sourceServer.Connect("DEV1"); // replace with IP address, DNS etc...
targetServer.Connect("DEV2");

foreach (Role sourceRole in sourceServer.Roles)
{
   var targetRole = new Role();
   sourceRole.CopyTo(targetRole);
   targetServer.Roles.Add(targetRole);
}

targetServer.Update();

// Backup Database
foreach (Databse db in sourceServer.Databases)
{
   db.Backup($"{db.Name}.abf"); // or whatever file you want to back it up to.
}

您可以在維護計劃腳本任務中使用 c#,也可以使用相同的類創建獨立的 PowerShell 腳本。一旦你了解了對像模型,就很容易做任何你需要的事情。

如果您在 SQL 伺服器上使用儲存過程的另一種方法:

為了在數據庫級別創建管理員權限,我以程式方式創建了以下 XMLA 語句,並通過連結伺服器(EXEC (@XMLA) AT LINKED_SSAS)從 SQL 在 SSAS 上執行它:

<Create xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
   <ParentObject>
       <DatabaseID>Your_SSAS_DB_Name</DatabaseID>
   </ParentObject>
   <ObjectDefinition>
       <Role xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400" xmlns:ddl500="http://schemas.microsoft.com/analysisservices/2013/engine/500" xmlns:ddl500_500="http://schemas.microsoft.com/analysisservices/2013/engine/500/500">
           <ID>Admin</ID>
           <Name>Admin</Name>
           <Members>
               <Member>
                   <Name>domain\user1</Name>
                   <Sid>user1_SID</Sid>
               </Member>
               <Member>
                   <Name>domain\user2</Name>
                   <Sid>user2_SID</Sid>
               </Member>
           </Members>
       </Role>
   </ObjectDefinition>
</Create>
<Alter AllowCreate="true" ObjectExpansion="ObjectProperties" xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
   <Object>
       <DatabaseID>Your_SSAS_DB_Name</DatabaseID>
       <DatabasePermissionID>DatabasePermission 1</DatabasePermissionID>
   </Object>
   <ObjectDefinition>
       <DatabasePermission xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400" xmlns:ddl500="http://schemas.microsoft.com/analysisservices/2013/engine/500" xmlns:ddl500_500="http://schemas.microsoft.com/analysisservices/2013/engine/500/500">
           <ID>DatabasePermission 1</ID>
           <Name>DatabasePermission 1</Name>
           <RoleID>Admin</RoleID>
           <Process>true</Process>
           <ReadDefinition>Allowed</ReadDefinition>
           <Read>Allowed</Read>
           <Administer>true</Administer>
       </DatabasePermission>
   </ObjectDefinition>
</Alter>

引用自:https://dba.stackexchange.com/questions/265811