AMO セキュリティ オブジェクトのプログラミング
新規 : 2005 年 12 月 5 日
Microsoft SQL Server 2005 Analysis Services (SSAS) でセキュリティ オブジェクトをプログラミングしたり、AMO セキュリティ オブジェクトを使用するアプリケーションを実行するには、Server Administrator グループまたは Database Administrator グループのメンバである必要があります。Server Administrator および Database Administrator は、SQL Server 2005 Analysis Services (SSAS) が提供するアクセス レベルです。
Analysis Services では、オブジェクトに割り当てられたロールと権限の組み合わせを使用してオブジェクトへのユーザー アクセスが行われます。詳細については、「AMO セキュリティ クラス」を参照してください。
Role オブジェクトと Permission オブジェクト
サーバー ロールのコレクションに含まれる唯一のロールが Administrators ロールです。新しいロールをサーバー ロールのコレクションに追加することはできません。Administrators ロールのメンバは、サーバー内のすべてのオブジェクトに完全にアクセスできます。
Role オブジェクトはデータベース レベルで作成されます。ロールのメンテナンスで必要な作業は、ロールへのメンバの追加またはロールからのメンバの削除と、Database オブジェクトへのロールの追加または削除だけです。ロールに関連付けられた Permission オブジェクトが存在する場合は、ロールを削除できません。ロールを削除するには、Database オブジェクト内の Permission オブジェクトをすべて検索し、Role を権限から削除する必要があります。その後、Role を Database から削除できます。
権限は、権限が設定されたオブジェクトに対する有効なアクションを定義します。権限は、Database、DataSource、Dimension、Cube、MiningStructure、および MiningModel の各オブジェクトに対して設定できます。権限のメンテナンスには、対応するアクセス プロパティによる、有効なアクセスの許可や取り消しが含まれます。それぞれの有効なアクセスには、必要なアクセス レベルを設定できるプロパティがあります。Process、ReadDefinition、Read、Write、および Administer の各操作に対してアクセスを定義できます。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
}
参照
関連項目
概念
AMO クラスの概要
AMO セキュリティ オブジェクトのプログラミング
その他の技術情報
権限とアクセス権 (SSAS)
Analysis Services のセキュリティ保護
Analysis Services の概念とオブジェクト
Analysis Services オブジェクト