2015-06-26 3 views
2

Я пытаюсь добавить роль в мою базу данных SSAS, но у меня возникают проблемы при попытке установить разрешения базы данных.Программно добавление роли с разрешениями базы данных

Следующий код будет работать без ошибок

var server = new Microsoft.AnalysisServices.Server(); 
server.Connect("localhost\\SQLSERVER2012"); 

var database = server.Databases["LRTabDB"]; 
var role = database.Roles.Add(database.Roles.GetNewName("DataHubRole")); 
var databasePermission = new Microsoft.AnalysisServices.DatabasePermission 
{ 
    RoleID = role.ID, 
    ID = role.Name, 
    Name = role.Name, 
    Read = Microsoft.AnalysisServices.ReadAccess.Allowed 
}; 
database.DatabasePermissions.Add(databasePermission); 

var member = new Microsoft.AnalysisServices.RoleMember { Name = "NETWORK SERVICE" }; 
role.Members.Add(member); 

role.Update(); 
databasePermission.Update(); 
database.Update(); 

Но когда я пытаюсь смотреть на роль в среде SQL Server Management Studio, я получаю следующее сообщение об ошибке

не может показать требуемый диалог.
Дополнительная информация:
Ключ не может быть пустым. Имя
Параметр: ключ (система)

Если я удалю создание databasePersmisson объекта, то я могу просмотреть роль в Management Studio. Но в конечном счете мне нужно установить разрешения базы данных для этой роли. Я также попытался получить разрешения, но следующее возвращает null.

database.DatabasePermissions.FindByRole(role.ID); 

Я также попытался использовать следующие для создания разрешений базы данных и получил те же результаты.

var databasePermissions = database.DatabasePermissions.Add(
    database.DatabasePermissions.GetNewName(role.Name)); 

Наконец я также попытался использовать другое имя и идентификатор для разрешения базы данных от роли, но опять же это не поможет.

Я предполагаю, что есть какой-то шаг, который мне не хватает, но примеры, которые я нашел для этого, не проливают свет на проблему.

https://bennyaustin.wordpress.com/2011/05/24/ssas-using-amo-to-secure-analysis-service-cube/

ответ

0

Я не знаю, как я могу получить свою ошибку, но я сделал что-то, что работает для меня.

Вот код:

Server server = new Server(); 
server.Connect("Data source=" + cubeServerName + ";Timeout=7200000;Integrated Security=SSPI;"); 

Database db = server.Databases.FindByName(cubeName); 

if (db.Roles.Find("MyRole") == null) 
{ 
    Role newRole = db.Roles.Add("MyRole"); 
    RoleMember r = new RoleMember(userDomain + "\\" + userName); 
    newRole.Members.Add(r); 
    newRole.Update(); 
} 

DatabasePermission dbperm; 

var role = db.Roles.Find("MyRole"); 

dbperm = db.DatabasePermissions.Add(role.ID); 
dbperm.Process = true; //I want to add process permission 
dbperm.Update();  

Я использовал учебник от msdn.

Смежные вопросы