PythonでSnowflakeのユーザー、ロール、付与を管理する¶
Pythonを使用して、Snowflakeのユーザー、ロール、および付与を管理できます。Snowflake におけるユーザーとその権限の管理については、 ユーザー管理 をご参照ください。
前提条件¶
このトピックの例では、Snowflakeと接続するコードを追加して Root オブジェクトを作成し、そこからSnowflake Python Snowflake Python APIs を使用することを想定しています。
たとえば、以下のコードでは、構成ファイルで定義された接続パラメーターを使用してSnowflakeへの接続を作成します。
出来上がった Session オブジェクトを使って、コードは API のタイプとメソッドを使う Root オブジェクトを作成します。詳細については、 Snowflake Python APIs によるSnowflakeへの接続 をご参照ください。
ユーザーの管理¶
Snowflakeでユーザーを管理することができます。ユーザーは、Snowflakeのアカウントレベルのオブジェクトです。 Snowflake Python APIs は、ユーザーを2つのタイプに分けて表しています。
User: ロールの名前などのプロパティを公開します。UserResource: 対応するUserオブジェクトを取得し、ユーザーをドロップするために使用できるメソッドを公開します。
ユーザーの作成¶
UserCollection.create メソッドを呼び出し、作成するデータベースを表す User オブジェクトを渡すと、データベースを作成できます。ユーザーを作成するには、まずユーザー名を指定する User オブジェクトを作成します。
次の例のコードは、 my_user という名前のデータベースを表す User オブジェクトを作成してから、 User オブジェクトを UserCollection.create メソッドに渡してデータベースを作成します。
ユーザーの詳細の取得¶
User オブジェクトを返す UserResource.fetch メソッドを呼び出すことで、ユーザーに関する情報を取得できます。
次の例のコードは、 my_user という名前のユーザーの情報を取得します。
ユーザーの作成または変更¶
User オブジェクトのプロパティをセットし、 UserResource.create_or_alter メソッドに渡すことで、ユーザーが存在しない場合は作成し、存在する場合はユーザー定義に従って変更することができます。 create_or_alter の動作はべき等であることを意図しています。つまり、メソッドを呼び出す前にユーザーが存在したかどうかに関係なく、結果として得られるユーザーオブジェクトは同じになります。
create_or_alter は、明示的に定義していない `ユーザー`__ プロパティのデフォルト値を使用します。</developer-guide/snowflake-python-api/reference/latest/_autosummary/snowflake.core.user.User>例えば、 snowflake_support をセットしない場合、ユーザーが以前別の値で存在していたとしても、その値は False がデフォルト値となります。
注釈
create_or_alter メソッドは現在、既存ユーザーの password の変更には対応していません。パスワードは新規ユーザー作成時にのみセットできます。
次の例のコードは、 my_user ユーザーの姓、名、 must_change_password プロパティを更新し、Snowflake 上のユーザーを変更します。
ユーザーをリストする¶
PagedIter 反復子を返す iter メソッドを使用して、データベースを一覧表示することができます。
次の例のコードは、名前が my で始まるデータベースを一覧表示します。
ユーザーのドロップ¶
UserResource.drop メソッドを使用してユーザーをドロップできます。
以下の例のコードは、 my_user ユーザーをドロップします。
ロールの管理¶
Snowflakeではロールを管理することができます。ロールはアカウントレベルのオブジェクトです。 Snowflake Python APIs は、ロールを2つのタイプに分けて表しています。
Role: ロールの名前などのプロパティを公開します。RoleResource:Roleオブジェクトに権限を付与したり管理したり、ロールを削除したりするためのメソッドを公開しています。
ロールの作成¶
ロールを作成するには、まずロール名を指定する Role オブジェクトを作成します。
次の例のコードでは、 Role オブジェクトが my_role という名前のデータベースを表します。
次に、コードは Role オブジェクトを RoleCollection.create メソッドに渡して、データベースロールを作成します。
セッションでロールを使用する¶
以下の例のコードは、現在のセッションでロール my_role に適用します。
ロールをリストする¶
iter メソッドを使用して、アカウント内のロールをリストすることができます。このメソッドは Role オブジェクトの PagedIter 反復子を返します。
次の例のコードは、アカウント内のすべてのロール名を一覧表示します。
ロールのドロップ¶
RoleResource.drop メソッドを使用してロールをドロップできます。
以下の例のコードは、 my_role ロールを削除します。
データベースロールの管理¶
Snowflakeで データベースロール を管理できます。データベース・ロールはデータベース・レベルのオブジェクトです。 Snowflake Python APIs はデータベースロールを2つのタイプに分けて表しています。
DatabaseRole: 名前とコメントなどのデータベース・ロールのプロパティを公開します。DatabaseRoleResource:DatabaseRoleオブジェクトに対する権限の付与や管理、データベースロールの削除に使用できるメソッドを公開しています。
データベースロールの作成¶
ロールを作成するには、まずロール名を指定する DatabaseRole オブジェクトを作成します。
次の例のコードでは、 DatabaseRole オブジェクトが my_db_role という名前のデータベースを表します。
次に、コードは DatabaseRole オブジェクトを DatabaseRoleCollection.create メソッドに渡して、データベースロールを作成します。
データベースロールのクローニング¶
以下の例のコードは、 my_db データベース内の既存の dr1 データベース・ロールのコピーとして、 my_db_2 ターゲット・データベース内に dr2 というデータベース・ロールを作成します。
データベースのロールをリストする¶
アカウント内のデータベース・ロールを一覧表示するには、 iter メソッドを使用します。このメソッドは DatabaseRole オブジェクトの PagedIter 反復子を返します。
以下の例のコードは、 my_db データベース内の my_db_role というデータベース・ロールをリストし、結果の数を 1 に制限しています。
データベース・ロールのドロップ¶
DatabaseRoleResource.drop メソッドを使用してデータベースロールをドロップできます。
以下の例のコードは、 my_db_role データベース・ロールを削除します。
アクセス権限の管理¶
API を使用して、アカウントロール、データベースロール、またはユーザーに対するセキュアな Snowflake オブジェクトのアクセス権限を管理できます。Snowflake のロール、セキュアなオブジェクト、およびアクセス制御フレームワークの詳細については、 アクセス制御の概要 をご参照ください。
アカウントロールの場合¶
以下のコード例は、 アカウントロール に対して、 API 権限の付与、権限の取り消し、および権限の一覧表示を行う操作を示しています。
権限を付与する¶
ロールの付与¶
すべてに対する権限の付与¶
将来の権限を付与する¶
権限の剥奪¶
ロールを取り消す¶
オブジェクトに対する権限を取り消しする¶
将来の権限を剥奪する¶
権限の付与オプションを取り消す¶
すべての権限の付与オプションを取り消す¶
将来の権限の付与オプションを取り消す¶
ロールの付与のリスト¶
ロールの付与のリスト¶
ロールの付与のリスト¶
ロールに対する将来の付与のリスト¶
ユーザーの場合¶
以下のコード例は、 API 操作、ロールの付与、ロールの取り消し、ユーザーのロール一覧表示の操作を示しています。
ユーザーにロールを付与する¶
ユーザーからロールを取り消す¶
ユーザーに付与されたロールのリスト¶
データベースロールの場合¶
以下のコード例は、 データベースロール に対して、 API 権限の付与、権限の取り消し、および付与の一覧表示を行う操作を示しています。
権限を付与する¶
ロールの付与¶
すべてに対する権限の付与¶
将来の権限を付与する¶
権限の剥奪¶
ロールを取り消す¶
すべての権限を剥奪する¶
将来の権限を剥奪する¶
権限の付与オプションを取り消す¶
すべての権限の付与オプションを取り消す¶
将来の権限の付与オプションを取り消す¶
ロールの付与のリスト¶
ロールに対する将来の付与のリスト¶
Grant リソースを使用して付与を管理する --- 非推奨¶
GRANT <権限> ... TO ROLE 操作を実行して、セキュアな Snowflake オブジェクトのアクセス権限をロールに付与することができます。
権限を付与する¶
Snowflake オブジェクトに権限を付与するには、まず以下の属性を指定した Grant オブジェクトを作成します。
grantee: 権限を付与されるロールまたはユーザー。securable: 権限によって保護されているSnowflakeオブジェクト。privileges: ロールに与えられている権限。
アカウントの CREATE 権限をロールに付与する¶
次の例のコードは、現在の Snowflake アカウントのロール my_role に権限 create_database と create_warehouse を付与する付与操作を表す Grant オブジェクトを作成します。このコードは root.grants.grant メソッドを使用して操作を実行します。
ロールへのデータベース権限の付与¶
以下の例のコードでは、 my_db のデータベース上の インポートされた権限 を my_role のロールに付与しています。
別のロールにロールを付与する¶
ロールを別のロールに付与すると、ロール間に「親子」関係が作成されます(ロール階層 とも呼ばれます)。
以下の例のコードは、 my_role ユーザー・ロールを ACCOUNTADMIN システム・ロールに付与します。