Я пытаюсь добавить разрешение на столбец для роли в табличной модели, используя C#. Ниже приведен мой фрагмент кода.
using Microsoft.AnalysisServices;
using Microsoft.AnalysisServices.Tabular;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
namespace RoleCreation
{
class Program
{
static void Main(string[] args) { RoleCreation(); }
public static void RoleCreation()
{
string serverName = "*******";
string databaseName = "*******";
string serverConnectionString = string.Format("Provider=MSOLAP;Data Source=Provider=MSOLAP.8;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog="*******";;Data Source="*******";;MDX Compatibility=1;MDX Missing Member Mode=Error;Update Isolation Level=2", serverName);
Microsoft.AnalysisServices.Tabular.Server server = new Microsoft.AnalysisServices.Tabular.Server();
server.Connect(serverConnectionString);
Microsoft.AnalysisServices.Tabular.Database db = server.Databases[databaseName];
Model model = db.Model;
Table TableSampl = db.Model.Tables.Find("MyTable");
ModelRole newRole = new ModelRole
{
Name = "TestRole"
};
TablePermission newTablePer = new TablePermission
{
Name = "MyTable",
FilterExpression = "[Col1] in {11}"
};
ColumnPermission newColumnPesr = new ColumnPermission()
{
Name = "Data",
MetadataPermission = MetadataPermission.None
};
newTablePer.Table = TableSampl;
newTablePer.ColumnPermissions.Add(newColumnPesr); //Adding ColumnPermission to a Tablepermission
newRole.TablePermissions.Add(newTablePer); //Adding TablePermission to a Role
newRole.ModelPermission = ModelPermission.Read;
model.Roles.Add(newRole);
db.Update(UpdateOptions.ExpandFull);
}
}
}
Здесь я добавляю новую роль и разрешение таблицы для роли. Эти две вещи работают. Но при попытке добавить разрешение столбца я получаю сообщение об ошибке:
Microsoft.AnalysisServices.OperationException: 'Не удалось сохранить изменения на сервере. Возвращена ошибка: «Произошла непредвиденная ошибка (файл tmsavepoint. cpp, строка 1528, функция TMSavePoint :: GetProxyImpl»).