以编程方式添加角色和数据库权限

时间:2015-06-26 16:00:36

标签: c# sql-server-2012 ssas

我正在尝试为我的SSAS DB添加一个角色,但是当我尝试设置数据库权限时,我遇到了问题。

以下代码将无误运行

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中的角色时,我收到以下错误消息

  

无法显示请求的对话框   补充信息:
    密钥不能为空。
    参数名称:key(系统)

如果我删除了databasePersmisson对象的创建,那么我可以在Management Studio中查看该角色。但最终我需要为角色设置数据库权限。我也尝试获取权限,但以下只返回null

 database.DatabasePermissions.FindByRole(role.ID);

我也尝试使用以下命令创建数据库权限并获得相同的结果。

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

最后,我还尝试使用不同的名称和ID来获取角色的数据库权限,但这又无效。

我认为我缺少一些步骤,但我发现这样做的例子并没有说明这个问题。

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

1 个答案:

答案 0 :(得分: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的教程。