AMO セキュリティオブジェクトのプログラミング
適用対象:
SQL Server Analysis Services
Azure Analysis Services
Power BI Premium
Analysis Services では、セキュリティオブジェクトをプログラミングするか、AMO セキュリティオブジェクトを使用するアプリケーションを実行するには、サーバー管理者グループまたはデータベース管理者グループのメンバーである必要があります。 サーバー管理者とデータベース管理者。
Analysis Services、任意のオブジェクトに対するユーザーアクセスは、そのオブジェクトに割り当てられたロールとアクセス許可の組み合わせによって取得されます。 詳細については、「 AMO セキュリティクラス」を参照してください。
Role オブジェクトと permission オブジェクト
サーバー ロールのコレクションに含まれる唯一のロールが Administrators ロールです。 新しいロールをサーバー ロールのコレクションに追加することはできません。 Administrators ロールのメンバーは、サーバー内のすべてのオブジェクトに完全にアクセスできます。
Role オブジェクトはデータベース レベルで作成されます。 ロールのメンテナンスでは、ロールとの間でのメンバーの追加または削除、およびオブジェクトへの Database ロールの追加または削除のみが必要です。 ロールに関連付けられているオブジェクトが Permission ある場合、ロールを削除することはできません。 ロールを削除するには、をから Database 削除する前に Role 、オブジェクト内 Database のすべて Permission のオブジェクトを検索し Role 、をアクセス許可から削除する必要があります。
権限は、権限が設定されたオブジェクトに対する有効なアクションを定義します。 権限は、、、、 CubeMiningStructure 、、および MiningModel の各オブジェクト DatabaseDataSourceDimension に指定できます。 権限のメンテナンスには、対応するアクセス プロパティによる、有効なアクセスの許可や取り消しが含まれます。 それぞれの有効なアクセスには、必要なアクセス レベルを設定できるプロパティがあります。 Process、ReadDefinition、Read、Write、および Administer の各操作に対してアクセスを定義できます。 アクセスの管理は、 Database オブジェクトでのみ定義されます。 Administer データベース権限をロールに付与すると、データベース管理者のセキュリティ レベルが得られます。
次のサンプルでは、Database Administrators、Processors、Writers、Readers の 4 つのロールを作成します。
Database Administrators は指定されたデータベースを管理できます。
Processors は、データベース内のすべてのオブジェクトを処理して結果を検証できます。 結果を検証するには、指定されたキューブに対してデータベース オブジェクトへの読み取りアクセスを明示的に有効にする必要があります。読み取り権限は子オブジェクトに適用されないためです。
Writers は、指定されたキューブの読み取りおよび書き込みが可能です。また、セルへのアクセスは顧客ディメンションの "United States" に制限されます。
Readers は指定されたキューブの読み取りが可能です。また、セルへのアクセスは顧客ディメンションの "United States" に制限されます。
static public void CreateRolesAndPermissions(Database db, Cube cube)
{
Role role;
DatabasePermission dbperm;
CubePermission cubeperm;
#region Create the Database Administrators role
// Create the Database Administrators role.
role = db.Roles.Add("Database Administrators");
role.Members.Add(new RoleMember("")); // e.g. domain\user
role.Update();
// Assign administrative permissions to this role.
// Members of this role can perform any operation within the database.
dbperm = db.DatabasePermissions.Add(role.ID);
dbperm.Administer = true;
dbperm.Update();
#endregion
#region Create the Processors role
// Create the Processors role.
role = db.Roles.Add("Processors");
role.Members.Add(new RoleMember("")); // e.g. myDomain\johndoe
role.Update();
// Assign Read and Process permissions to this role.
// Members of this role can process objects in the database and query them to verify results.
// Process permission applies to all contained objects, i.e. all dimensions and cubes.
// Read permission does not apply to contained objects, so we must assign the permission explicitly on the cubes.
dbperm = db.DatabasePermissions.Add(role.ID);
dbperm.Read = ReadAccess.Allowed;
dbperm.Process = true;
dbperm.Update();
cubeperm = cube.CubePermissions.Add(role.ID);
cubeperm.Read = ReadAccess.Allowed;
cubeperm.Update();
#endregion
#region Create the Writers role
// Create the Writers role.
role = db.Roles.Add("Writers");
role.Members.Add(new RoleMember("")); // e.g. redmond\johndoe
role.Update();
// Assign Read and Write permissions to this role.
// Members of this role can discover, query and writeback to the Adventure Works cube.
// However cell access and writeback is restricted to the United States (in the Customer dimension).
dbperm = db.DatabasePermissions.Add(role.ID);
dbperm.Read = ReadAccess.Allowed;
dbperm.Update();
cubeperm = cube.CubePermissions.Add(role.ID);
cubeperm.Read = ReadAccess.Allowed;
cubeperm.Write = WriteAccess.Allowed;
cubeperm.CellPermissions.Add(new CellPermission(CellPermissionAccess.Read, "[Customer].[Country-Region].CurrentMember is [Customer].[Country-Region].[Country-Region].&[United States]"));
cubeperm.CellPermissions.Add(new CellPermission(CellPermissionAccess.ReadWrite, "[Customer].[Country-Region].CurrentMember is [Customer].[Country-Region].[Country-Region].&[United States]"));
cubeperm.Update();
#endregion
#region Create the Readers role
// Create the Readers role.
role = db.Roles.Add("Readers");
role.Members.Add(new RoleMember("")); // e.g. redmond\johndoe
role.Update();
// Assign Read permissions to this role.
// Members of this role can discover and query the Adventure Works cube.
// However the Customer dimension is restricted to the United States.
dbperm = db.DatabasePermissions.Add(role.ID);
dbperm.Read = ReadAccess.Allowed;
dbperm.Update();
cubeperm = cube.CubePermissions.Add(role.ID);
cubeperm.Read = ReadAccess.Allowed;
Dimension dim = db.Dimensions.GetByName("Customer");
DimensionAttribute attr = dim.Attributes.GetByName("Country-Region");
CubeDimensionPermission cubedimperm = cubeperm.DimensionPermissions.Add(dim.ID);
cubedimperm.Read = ReadAccess.Allowed;
AttributePermission attrperm = cubedimperm.AttributePermissions.Add(attr.ID);
attrperm.AllowedSet = "{[Customer].[Country-Region].[Country-Region].&[United States]}";
cubeperm.Update();
#endregion
}