Sql-Server
如何在 SSAS 伺服器上編寫管理員權限腳本?
有時我需要將 SSAS 實例安裝或遷移到不同的機器甚至不同的 AD 域(我們在信任關係中有幾個不同的 AD 域)。
與sql server 一樣,我需要能夠在實例之間導出和導入登錄名和權限。
此外,作為維護計劃的一部分,我喜歡保存登錄名和權限以及備份 ssas 數據庫。
我會通過腳本 T-SQL 或Powershell編寫管理登錄腳本,以便我可以自動化它。
此刻,因為趕時間,我是這樣做的:
- 以管理員身份連接到原始伺服器,並將所有權限寫入 mdx 文件。
- 複製此腳本並在目標伺服器上執行它。
如何在 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>