我正在尝试为我的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/
答案 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的教程。