パッケージのアクセス制御がサポートされています。 パッケージがインストールされた後、パッケージ内のオブジェクトのアクセス制御リスト (ACL) を指定することできめ細かいアクセス制御を実行し、MaxComputeのLabelSecurityメカニズムを有効にしてパッケージへのアクセスを制御することできめ細かいアクセス制御を実行できます。 たとえば、パッケージ内の指定されたリソースまたはパッケージのテーブル内の指定された列にのみアクセスする権限をユーザーまたはロールに付与できます。 このトピックでは、2つのアクセス制御ポリシーを使用して、パッケージ内のリソースに対するアクセス許可をユーザーまたはロールに付与または取り消す方法について説明します。
背景情報
次の表に、MaxComputeが提供するパッケージのアクセス制御ポリシーを示します。
アクセス制御ポリシー | 説明 | 承認された | 操作プラットフォーム |
パッケージがインストールされているプロジェクトでは、オブジェクトのACLを指定することで、パッケージ内の一部のリソースに対する権限を付与または取り消すことができます。 権限を付与すると、パッケージがインストールされているプロジェクトのユーザーは、指定されたオブジェクトに対して指定された操作を実行できます。 | プロジェクトの所有者または管理者ロールが割り当てられているユーザー | ||
パッケージがインストールされているプロジェクトでは、LabelSecurityを使用して、パッケージ内のテーブルリソースに対する権限を付与または取り消すことができます。 権限を付与すると、パッケージがインストールされているプロジェクトのユーザーは、セキュリティレベルが指定されたセキュリティレベル以下の機密データにのみアクセスできます。 これにより、データ権限をより細かく管理できます。 LabelSecurityの詳細については、「ラベルベースのアクセス制御」をご参照ください。 |
ACLベースのアクセス制御
パッケージ内の一部のリソースにアクセス許可を付与するACLを指定します。 構文:
-- Grant permissions on a specified object. grant <actions> on <object_type> <object_name> to [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>"); -- Grant permissions on specified columns in a specified table. grant <actions> on table <table_name>[(<column_list>)] to [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");パッケージ内のリソースに対するACLベースの権限を表示します。 構文:
show grants on <object_type> <object_name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");パッケージ内の一部のリソースからACLベースの権限を取り消します。 構文:
-- Revoke permissions from a specified object. revoke <actions> on <object_type> <object_name> from [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>"); -- Revoke permissions from the columns in a specified table. revoke <actions> on table <table_name>[(<column_list>)] from [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
構文のパラメータ:
actions: 必須です。 付与する権限。
describe package project_name.package_name;コマンドを実行して、パッケージの権限を照会できます。object_type: 必須です。 パッケージ内のオブジェクトの型。
describe package project_name.package_name;コマンドを実行して、パッケージに含まれるオブジェクトの型を照会できます。object_name: 必須です。 パッケージ内のオブジェクトの名前。
describe package project_name.package_name;コマンドを実行して、パッケージに含まれるオブジェクトの名前を照会できます。name: 必須です。 権限を付与するユーザーまたはロールの名前。 ユーザーまたはロールの情報を取得する方法の詳細については、「ユーザーの表示」または「ロールの表示」をご参照ください。
table_name: 必須です。 権限を付与するテーブルの名前。
describe package project_name.package_name;コマンドを実行して、パッケージに含まれるテーブルの名前を照会できます。colum_list: オプションです。 テーブルの列の名前。 複数の列名を指定する場合は、コンマ (,) で区切ります。
"refobject"="true": 必須です。 この値trueは、パッケージにきめ細かいアクセス制御が使用されていることを示します。
"refproject"="<project_name>": 必須です。 パッケージが属するMaxComputeプロジェクトの名前。
"package"="<package_name>": 必須です。 パッケージの名前。
ラベルベースのアクセス制御
ACLベースのアクセス制御を実行した後、LabelSecurityを使用してパッケージ内のテーブルにアクセス許可を付与できます。 これにより、指定されたセキュリティレベルのテーブルデータのみにアクセスできます。
LabelSecurityを使用して、パッケージ内のテーブルに対する権限を付与します。 構文:
grant label <number> on table <table_name[(<column_list>)]> to [user|role] <name>[with exp <days>] privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");パッケージ内のテーブルに対するラベルベースの権限を表示します。 構文:
show label grants on table <table_name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");パッケージ内のテーブルからラベルベースの権限を取り消します。 構文:
revoke label on table <table_name>[(<column_list>)] from [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
構文のパラメータ:
number: 機密データのセキュリティレベル。 ラベルベースのアクセス制御の詳細については、「ラベルベースのアクセス制御」をご参照ください。
table_name: 必須です。 権限を付与するテーブルの名前。
describe package project_name.package_name;コマンドを実行して、パッケージに含まれるテーブルの名前を照会できます。colum_list: オプションです。 テーブルの列の名前。 複数の列名を指定する場合は、コンマ (,) で区切ります。
name: 必須です。 権限を付与するユーザーまたはロールの名前。 ユーザーまたはロールの情報を取得する方法の詳細については、「ユーザーの表示」または「ロールの表示」をご参照ください。
days: オプション。 権限が有効な日数。 単位: 日。 このパラメーターを指定しない場合、デフォルト値は180です。
"refobject"="true": 必須です。 この値trueは、パッケージにきめ細かいアクセス制御が使用されていることを示します。
"refproject"="<project_name>": 必須です。 パッケージが属するMaxComputeプロジェクトの名前。
"package"="<package_name>": 必須です。 パッケージの名前。
例
次の例は、[パッケージに基づくプロジェクト間リソースアクセス] のシナリオ例に基づいた前述のアクセス制御方法を示しています。
例1: ACLベースのアクセス制御を実行します。 Johnは、パッケージ内のsampletableテーブルに対するSELECT権限をBobに付与します。
use prj2; -- Grant the SELECT permission on the sampletable table in the package to Bob. grant Select on table sampletable to user aliyun$bob@aliyun.com privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining"); -- View the ACL-based permissions on the sampletable table in the package. show grants on table sampletable privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining"); -- Revoke ACL-based permissions from Bob. revoke Select on table sampletable from user aliyun$bob@aliyun.com privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");例2: ラベルベースのアクセス制御を実行します。 この例では、サンプルテーブルは、3つの列t1、t2、およびt3を有し、t1は1のセキュリティレベルを有し、t2は2のセキュリティレベルを有し、t3は3のセキュリティレベルを有する。 Johnは、パッケージ内のsampletableテーブルでセキュリティレベル2のデータに対する権限をBobに付与します。 権限の有効期間は7日です。
use prj2; -- Enable LabelSecurity. set LabelSecurity=true; -- Specify the security level for each column in the sampletable table. set label 1 to table sampletable(t1); set label 2 to table sampletable(t2); set label 3 to table sampletable(t3); -- Grant Bob the permissions on the data that has a security level of 2 in the sampletable table. Set the validity period of the permissions to seven days. In the preceding example, Bob has the permissions to read data from the table. After you enable LabelSecurity, Bob has the permissions to read data from the t2 column of the table. grant label 2 on table sampletable(t2) to user aliyun$bob@aliyun.com with exp 7 privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining"); -- View the label-based permissions on the sampletable table in the package. show label grants on table sampletable privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining"); -- Revoke label-based permissions from Bob. revoke label 2 on table sampletable(t2) from user aliyun$bob@aliyun.com privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");説明ラベルベースのアクセス制御がパッケージ内のテーブルリソースに対して実行される場合、リソースプロバイダーは、パッケージ内のリソースを使用する権限を他のプロジェクトに付与するときに、ラベルとラベルのセキュリティレベルを指定する必要があります。 サンプルコマンド:
allowproject<project_name>toinstallpackage<package_name>usinglabel<number>;