📣新登場!TiDB Cloud BYOC、TiDB Cloud Filesystem、PostgreSQL-compatible TiDB Cloud Starter がパブリックプレビュー中。このページは自動翻訳されたものです。原文はこちらからご覧ください。

所有権



所有権は、TiDB Cloud Lake 内の特定のデータオブジェクト(現在はデータベース、テーブル、UDF、stage を含む)に対して、あるロールが持つ排他的な権利と責任を示す特別な権限です。

所有権の付与

オブジェクトの所有権は、そのオブジェクトを作成したユーザーのロールに自動的に付与され、GRANT コマンドを使用してロール間で移譲できます。

  • オブジェクトの所有権を新しいロールに付与すると、完全な所有権が新しいロールに移譲され、以前のロールからは削除されます。たとえば、最初はロール A がテーブルを所有していて、その所有権をロール B に付与した場合、ロール B が新しい所有者となり、ロール A はそのテーブルに対する所有権を失います。
  • セキュリティ上の理由から、組み込みロール public に所有権を付与することは推奨されません。ユーザーが public ロールに属した状態でオブジェクトを作成すると、すべてのユーザーがそのオブジェクトの所有権を持つことになります。これは、各ユーザーがデフォルトで public ロールを持っているためです。TiDB Cloud Lake では、所有権を明確に管理するために、public ロールを使用する代わりにカスタムロールを作成してユーザーに割り当てることを推奨しています。組み込みロールの詳細については、組み込みロール を参照してください。
  • default データベース内のテーブルについては、組み込みロール account_admin が所有しているため、所有権を付与できません。

所有権の取り消しは不可

すべてのオブジェクトには所有者が必要なため、所有権の取り消しはサポートされていません。

  • オブジェクトが削除されると、元のロールによる所有権は保持されません。オブジェクトが復元された場合(可能であれば)も、所有権は自動的には再割り当てされず、account_admin が手動でロールに所有権を再割り当てする必要があります。
  • オブジェクトを所有しているロールが削除された場合、account_admin はそのオブジェクトの所有権を別のロールに移譲できます。

例

ロールに所有権を付与するには、GRANT コマンドを使用します。以下の例では、異なるデータベースオブジェクトの所有権をロール 'data_owner' に付与する方法を示します。

-- Grant ownership of all tables in the 'finance_data' database to the role 'data_owner' GRANT OWNERSHIP ON finance_data.* TO ROLE 'data_owner'; -- Grant ownership of the table 'transactions' in the 'finance_data' schema to the role 'data_owner' GRANT OWNERSHIP ON finance_data.transactions TO ROLE 'data_owner'; -- Grant ownership of the stage 'ingestion_stage' to the role 'data_owner' GRANT OWNERSHIP ON STAGE ingestion_stage TO ROLE 'data_owner'; -- Grant ownership of the user-defined function 'calculate_profit' to the role 'data_owner' GRANT OWNERSHIP ON UDF calculate_profit TO ROLE 'data_owner';

次の例は、TiDB Cloud Lake におけるロールベースの所有権の確立を示しています。管理者はロール 'role1' を作成し、それをユーザー 'u1' に割り当てます。'db' スキーマ内でテーブルを作成する権限は 'role1' に付与されます。その結果、'u1' がログインすると 'role1' の権限を持つため、'db' 配下でテーブルを作成して所有できます。一方で、'role1' が所有していないテーブルへのアクセスは制限されており、'db.t_old_exists' に対するクエリが失敗することからもそれが分かります。

-- Admin creates roles and assigns roles to corresponding users CREATE ROLE role1; CREATE USER u1 IDENTIFIED BY '123' WITH DEFAULT ROLE 'role1'; GRANT CREATE ON db.* TO ROLE role1; GRANT ROLE role1 TO u1; -- After u1 logs into TiDB Cloud Lake, role1 has been granted to u1, so u1 can create and own tables under db: u1> CREATE TABLE db.t(id INT); u1> INSERT INTO db.t VALUES(1); u1> SELECT * FROM db.t; u1> SELECT * FROM db.t_old_exists; -- Failed because the owner of this table is not role1

次の例は、ユーザーが自分のロールのみに所有されるデータベースを作成できるようにし、明示的にアクセス権が付与されない限り他のユーザーがそれを参照できないようにする方法を示しています。

CREATE ROLE part1_role; GRANT CREATE DATABASE ON *.* TO ROLE part1_role; CREATE USER user1 IDENTIFIED BY 'abc123' WITH DEFAULT ROLE 'part1_role'; GRANT ROLE part1_role TO user1; -- When user1 creates a database, ownership is assigned to part1_role. -- Other users will not be able to see or access that database unless -- privileges or ownership are granted to their roles.

このページは役に立ちましたか?