使用 PowerShell 创建具有 SSAS 权限的角色

问题描述 投票:0回答:1

在 SQL Server SSAS 中,我想从服务器 A 到服务器 B 进行数据库恢复,其中数据库已存在于服务器 B 上。我想知道是否可以编写数据库权限脚本,以便稍后在服务器 B 上运行脚本来应用原来的设置。

我正在尝试使用 AMO,但我的编程知识有限,所以不完全确定它是如何工作的。

我知道我可以访问此信息:

[System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.AnalysisServices”)
$SSASServer = New-Object Microsoft.AnalysisServices.Server
$SSASServerName = 'serverNameA\PRD'
$SSASServer.Connect($SSASServerName)
$SSASServer.Version

$DBName = 'DB_A_PRD'
$SSASDatabase = $SSASServer.Databases.Item($DBName)
$SSASDatabase.Refresh()

稍后我可以获得有关特定角色的所有详细信息

foreach ($role in $SSASDatabase.Roles) {Write-Host $role.Name}
$SSASDatabase.DatabasePermissions.FindByRole($role.ID)

现在我可以在服务器 B 上重新创建角色

$roleToCreate = new-Object([Microsoft.AnalysisServices.Role])($var)
$SSASDatabase.Roles.Add($roleToCreate)
$roleToCreate.Update()

这就是我迷失的地方。我应该如何正确分配管理或处理权限给这个 $roleToCreate?

我见过另一个用户以这种方式应用读取设置,但我没有找到对管理或处理权限执行相同操作的方法:

$dbperm = $SSASDatabase.DatabasePermissions.Add($roleToCreate.ID)    
$dbperm.Read = [Microsoft.AnalysisServices.ReadAccess]::Allowed

根据我在这里读到的内容: https://learn.microsoft.com/en-us/analysis-services/amo/programming-amo-security-objects?view=sql-analysis-services-2022这是可能的,但我不知道如何让它在 PowerShell 中工作。

我不能这样做,因为 $dbpermissions.Process = True,ps 无法识别它。 我想我需要做一些与具有读取权限的枚举类似的事情,但我不知道该怎么做。

我使用此文档作为参考: https://learn.microsoft.com/en-us/dotnet/api/microsoft.analysisservices?view=analysisservices-dotnet

.net sql-server powershell ssas
1个回答
0
投票

我很难使用

$SSASDatabase.Roles.Add($roleToCreate)
添加角色。它会在终端上记录 0,表示没有添加任何内容。

我决定继续前进,并通过 TMSL 找到了不同的方法。该解决方案创建了一个新角色,但您也可以将其修改为createOrReplace。

$tabularName = "tableName"
$sqlServer = "ssasServer"

$json = @"
{   
    "create":{   
       "parentObject":{   
          "database":"$($tabularName)"  
       },  
       "role":{  
          "name":"NewRoleName",  
          "modelPermission":"read",
          "members":[   
             {  
                "memberName": "domain\\username"
             }
          ]
       }  
    }  
 }
"@

$connectionString = "Data Source=$sqlServer;Initial Catalog=$tabularName"
Invoke-ASCmd -ConnectionString $connectionString -Query $json

有用的文档

https://learn.microsoft.com/en-us/analysis-services/tmsl/roles-object-tmsl?view=asallproducts-allversions

https://learn.microsoft.com/en-us/analysis-services/tmsl/createorreplace-command-tmsl?view=asallproducts-allversions

© www.soinside.com 2019 - 2024. All rights reserved.