この記事は、Huawei クラウド コミュニティ「GuassDB データベースの GRANT & REVOKE」、著者: Gauss Squirrel Club Assistant 2 から共有されたものです。
1. GaussDB 権限の概要
データベースでは、オブジェクトの作成者がオブジェクトの所有者となり、オブジェクトを照会、変更、および削除する権限を持ちます。同時に、システム管理者も所有者と同じ権限を持ちます。したがって、他のユーザーがオブジェクトを使用できるようにするには、そのユーザーまたはそのユーザーを含むロールに必要な権限を付与する必要があります。
GaussDB データベース オブジェクトの権限:
物体 |
権限 |
説明する |
データベースDATABASE |
接続する |
ユーザーが指定されたデータベースに接続できるようにする |
作成する |
データベース内に新しいスキーマを作成できるようにします |
|
スキーマSCHEMA |
作成する |
スキーマ内に新しいオブジェクトを作成できるようにします |
使用法 |
指定されたスキーマに含まれるオブジェクトへのアクセスを許可します。この権限がないと、これらのオブジェクトの名前しか表示できません。 |
|
関数 |
実行する |
指定された関数と、これらの関数を使用して実装された演算子の使用を許可します。 |
テーブルスペース |
作成する |
表スペース内に表を作成できるようにし、データベースおよびスキーマの作成時にその表スペースをデフォルトの表スペースとして指定できるようにします。 |
テーブル |
入れる 消去 アップデート 選択する |
ユーザーが指定されたテーブルを追加、削除、変更、クエリできるようにする |
切り詰める |
TRUNCATE ステートメントを実行して、指定したテーブル内のすべてのレコードを削除できるようにします。 |
|
参考文献 |
外部キー制約を作成するには、参照テーブルと参照テーブルに対する REFERENCES 権限が必要です。 |
付与された権限を取り消すには、REVOKE を使用します。
オブジェクト所有者の権限 (ALTER、DROP、COMMENT、INDEX、VACUUM、GRANT、REVOKE など) は暗黙的に所有されます。つまり、オブジェクト所有者のこれらの暗黙的な権限は、オブジェクトが所有されている限り実行できます。オブジェクト所有者は、自身の通常のアクセス許可を取り消すことができます。
システム テーブルとシステム ビューは、システム管理者のみに表示されるか、すべてのユーザーに表示されます。システム管理者の権限を必要とするシステム テーブルとビューが識別され、システム管理者のみがそれらをクエリできます。
データベースはオブジェクト分離機能を提供します。オブジェクト分離機能がオンになっている場合、ユーザーはアクセス権限のあるオブジェクト (テーブル、ビュー、フィールド、関数) のみを表示でき、システム管理者は影響を受けません。
ユーザーがシステム テーブルおよびシステム ビューの権限を変更することはお勧めできません。
2. GaussDB 権限設計の提案
業務利用前に、システム管理者(rootユーザー)がデータベース、スキーマ(SCHEMA)、ユーザー(USER)を作成する必要があります。次に、関連するユーザーに、オブジェクトにアクセスするために必要な権限を付与する必要があります。ユーザーがスキーマの所有者ではない場合、スキーマ内のオブジェクトにアクセスするには、スキーマの使用権限と、オブジェクトの対応する権限の両方をユーザーに付与する必要があります。
DATABASE、SCHEMA、および USER 名には小文字を使用します。データベースはデフォルトでその名前を小文字に変換します。接続文字列に大文字のオブジェクト名が含まれる場合、データベースに接続できません。
ロールとユーザーを付与するときは、最小特権の原則を使用する必要があります。
ロールによる権限の管理を優先します。ロールを使用して権限を管理し、ユーザーにロールを割り当てます。例えば:
- ロールとユーザーの間には多対多の関係があります。ロールは複数のユーザーに割り当てることができます。ロール内の権限が変更された場合、そのロールに割り当てられているユーザーの権限も同時に更新できます。
- ユーザーを削除しても、ロールは影響を受けません。
- 新しいユーザーを作成した後、役割を割り当てることで、必要な権限をすぐに取得できます。
指定したデータベースを削除する場合、削除中にアクティブなデータベース接続がまだ存在することによる失敗を避けるために、データベースに対するユーザーの CONNECT 権限を取り消す必要があります。
3. GaussDBのGRANTコマンド
1. 機能説明
1)ロールまたはユーザーにシステム権限を付与します。
システム権限は、SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN、MONADMIN、OPRADMIN、POLADMIN、INHERIT、REPLICATION、VCADMIN、LOGIN などのユーザー属性とも呼ばれます。
システム権限は通常、CREATE/ALTER ROLE 構文を通じて指定されます。このうち、SYSADMIN 権限は、GRANT/REVOKE ALL PRIVILEGE によって付与または取り消しできます。ただし、システム権限を ROLE および USER の権限を通じて継承したり、PUBLIC に付与したりすることはできません。
2)データベースオブジェクトをロールまたはユーザーに認可する
データベース オブジェクト (テーブルとビュー、指定されたフィールド、データベース、関数、スキーマ、テーブル スペースなど) に対する関連するアクセス許可を特定のロールまたはユーザーに付与します。
GRANT コマンドは、データベース オブジェクトに対する特定の権限を 1 つ以上のロールに付与します。これらの権限は既存の権限に追加されます。
キーワード PUBLIC は、この権限が今後作成されるユーザーを含むすべてのロールに付与される必要があることを示します。PUBLIC は、常にすべてのロールを含む暗黙的に定義されたグループとして見ることができます。すべてのロールまたはユーザーは、GRANT によって直接付与されたアクセス許可と、それらが属するアクセス許可に加えて、PUBLIC のアクセス許可を持ちます。
WITH GRANT OPTIONが宣言されている場合、許可されたユーザーは他のユーザーにこの権限を付与することもできます。このオプションは PUBLIC (GaussDB 固有の属性) には指定できません。
GaussDB は、特定の種類のオブジェクトに対する権限を PUBLIC に付与します。デフォルトでは、テーブル、テーブルフィールド、シーケンス、外部データソース、外部サーバー、スキーマ、またはテーブルスペースオブジェクトに対する権限は PUBLIC に付与されませんが、次のオブジェクトに対する権限は PUBLIC に付与されます: データベースに対する CONNECT 権限および CREATE TEMP TABLE 、関数に対する EXECUTE 権限、言語およびデータ型 (フィールドを含む) に対する USAGE 権限。もちろん、オブジェクト所有者は、PUBLIC に付与されたデフォルトの権限を取り消し、他のユーザーに特別に権限を付与することができます。セキュリティを強化するには、他のユーザーがオブジェクトを使用できる時間枠を持たないように、同じトランザクションでオブジェクトを作成して権限を設定することをお勧めします。
オブジェクトの所有者は、デフォルトでオブジェクトに対するすべての権限を持ちます。セキュリティ上の理由から、所有者は一部の権限を放棄できます。ただし、ALTER、DROP、COMMENT、INDEX、VACUUM、およびオブジェクトの再付与可能な権限は、オブジェクトの固有の権限です。所有者と暗黙的にスタイルを所有しています。
3)ロールまたはユーザーの権限を他のロールまたはユーザーに認可します。
1 つのロールまたはユーザーの権限を 1 つ以上の他のロールまたはユーザーに付与します。この場合、各ロールまたはユーザーは 1 つ以上のデータベース権限の集合と考えることができます。
WITH ADMIN OPTIONが宣言されている場合、許可されたユーザーは、他のロールまたはユーザーにアクセス許可を再度付与し、そのロールまたはユーザーによって継承されたすべてのアクセス許可を取り消すことができます。承認されたロールまたはユーザーが変更または取り消されると、そのロールまたはユーザー権限を継承するすべてのユーザーの権限もそれに応じて変更されます。
データベース システム管理者は、任意のロールまたはユーザーに対して任意の権限を付与または取り消すことができます。CREATEROLE 権限を持つロールは、システム管理者以外のロールに対して権限を付与または取り消すことができます。
4)ロールまたはユーザーに任意の権限を付与します。
特定の役割とユーザーに任意の権限を付与します。WITH ADMIN OPTION が宣言されている場合、承認されたユーザーは、他のロール/ユーザーに ANY 権限を再度付与したり、他のロール/ユーザーから ANY 権限を取り消したりすることができます。ロールを介して任意の権限を継承できますが、PUBLIC に付与することはできません。権限の分離がオフになっている場合、初期ユーザーとシステム管理者ユーザーは、任意のロール/ユーザーに任意の権限を付与または取り消すことができます。
現在、次の任意の権限がサポートされています。
任意のテーブルを作成する |
任意のシーケンスを作成 |
任意のテーブルを変更する |
任意のインデックスを作成 |
テーブルを削除する |
あらゆる機能を作成 |
任意のテーブルを選択してください |
任意の関数を実行する |
任意のテーブルを挿入 |
任意のパッケージを作成 |
任意のテーブルを更新する |
任意のパッケージを実行 |
テーブルを削除する |
任意のタイプを作成 |
2. 注意事項
1) PUBLIC にいかなる許可を与えることも、PUBLIC からの許可を取り消すこともできません。
2) ANY 権限はデータベース内の権限に属し、権限が付与されているデータベース内のオブジェクトに対してのみ有効です。たとえば、SELECT ANY TABLE では、ユーザーは現在のデータベース内のすべてのユーザー テーブル データを表示することのみが許可されます。他のデータベースのユーザーテーブルの表示権限はありません。
3) ユーザーに任意の権限が付与されている場合でも、プライベート ユーザーの下のオブジェクトに対してアクセス操作 (INSERT、DELETE、UPDATE、SELECT) を実行することはできません。
4) いかなる権限も元の権限には影響しません。
5) ユーザーに CREATE ANY TABLE 権限が付与されている場合、同じ名前のスキーマの下に作成されたテーブルの所有者がスキーマの作成者となります。ユーザーがテーブルに対して他の操作を実行する場合、対応する操作権限を付与する必要があります。 。
6) 他のユーザーが SECURITY DEFINER タイプの関数を使用して権限を昇格させないように、ユーザーに CREATE ANY FUNMCTION の権限を付与する場合は注意する必要があります。
3. 共通文法
1) 指定されたユーザーまたはロールにテーブルまたはビューへのアクセス権を付与します。
許可 { { 選択 | 挿入 | 更新 | 削除 | 切り詰め | 参考資料 | トリガー | 変更 | ドロップ | コメント | インデックス | 真空 } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] テーブル名 [, ...] | スキーマ内のすべてのテーブル スキーマ名 [, ...] } TO { [グループ] 役割名 | PUBLIC } [, ...] [許可オプションあり];
2) テーブル内のフィールドへのアクセス権を指定されたユーザーまたはロールに付与します。
許可 { {{ 選択 | 挿入 | 更新 | 参考資料 | コメント } ( 列名 [, ...] )} [, ...] | ALL [ PRIVILEGES ] ( 列名 [, ...] ) } ON [ TABLE ] テーブル名 [, ...] TO { [ GROUP ] 役割名 | PUBLIC } [, ...] [許可オプションあり];
3) 指定したユーザーまたはロールにデータベースへのアクセス権を付与します。
許可 { { 作成 | 接続 | 一時的 | 温度 | 変更 | ドロップ | コメント } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE データベース名 [, ...] TO { [ グループ ] 役割名 | PUBLIC } [, ...] [許可オプションあり];
4) 指定したユーザーまたはロールに機能へのアクセス権を付与します。
許可 { { 実行 | 変更 | ドロップ | コメント } [, ...] | ALL [ PRIVILEGES ] } ON { FUNCTION {function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] | スキーマ内のすべての関数 スキーマ名 [, ...] } TO { [グループ] 役割名 | PUBLIC } [, ...] [許可オプションあり];
5) 指定されたユーザーまたはロールにストアド プロシージャへのアクセス権を付与します。
許可 { { 実行 | 変更 | ドロップ | コメント } [, ...] | ALL [ PRIVILEGES ] } ON { PROCEDURE {proc_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] TO { [ GROUP ] ロール名 | PUBLIC } [, ...] [許可オプションあり];
……
4. GaussDBのREVOKEコマンドの使い方
1. 機能説明
REVOKE は、1 つ以上のユーザーまたはロールから権限を取り消すために使用されます。
2. 注意事項
非オブジェクト所有者が REVOKE 権限を持っている場合、次のルールに従います。
1) 許可されたユーザーがオブジェクトに対する権限を持っていない場合、コマンドはただちに失敗します。
2) 認可されたユーザーが部分的な権限を持っている場合、認可オプションを持つ権限のみが取り消されます。
3) 許可されたユーザーに許可オプションがない場合、REVOKE ALL PRIVILEGES フォームはエラー メッセージを発行します。他の形式のコマンドの場合、コマンドで指定された名前の許可に対応する許可オプションがない場合、コマンドはエラー メッセージを発行します。警告を発します。
3. 共通文法
1) 指定されたテーブルまたはビューに対する権限を再利用します。
取り消し [ に対する付与オプション ] { { 選択 | 挿入 | 更新 | 削除 | 切り詰め | 参考資料 | 変更 | ドロップ | コメント | インデックス | 真空 }[, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] テーブル名 [, ...] | スキーマ内のすべてのテーブル スキーマ名 [, ...] } FROM { [ GROUP ] 役割名 | パブリック } [, ...] [ カスケード | 制限 ];
2) テーブル上の指定されたフィールドの権限を再利用します。
取り消し [ に対する付与オプション ] { {{ SELECT | 挿入 | 更新 | 参考資料 | コメント } ( 列名 [, ...] )}[, ...] | ALL [ PRIVILEGES ] ( 列名 [, ...] ) } ON [ TABLE ] テーブル名 [, ...] FROM { [ GROUP ] 役割名 | パブリック } [, ...] [ カスケード | 制限 ];
3) 指定したデータベースのアクセス許可を回復します
取り消し [ に対するオプションの付与 ] { { 作成 | 接続 | 一時的 | 温度 | 変更 | ドロップ | コメント } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE データベース名 [, ...] FROM { [ グループ ] 役割名 | パブリック } [, ...] [ カスケード | 制限 ];
4) 指定された機能に対する権限を再利用します。
取り消し [ に対する付与オプション ] { { 実行 | 変更 | ドロップ | コメント } [, ...] | ALL [ PRIVILEGES ] } ON { FUNCTION {function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] | スキーマ内のすべての関数 スキーマ名 [, ...] } FROM { [グループ] 役割名 | パブリック } [, ...] [ カスケード | 制限 ];
5) 指定されたストアド プロシージャのアクセス許可を回復します
取り消し [ に対する付与オプション ] { { 実行 | 変更 | ドロップ | コメント } [, ...] | ALL [ PRIVILEGES ] } ON { PROCEDURE {proc_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] | スキーマ内のすべてのプロシージャ スキーマ名 [, ...] } FROM { [ GROUP ] ロール名 | パブリック } [, ...] [ カスケード | 制限 ];
……
5. GaussDB の例
1.GRANT文の例
1) ユーザー user_name に、database_name.table_name テーブルに対する SELECT、INSERT、UPDATE、および DELETE 権限を付与します。
user_name に対して、database_name.table_name に対する SELECT、INSERT、UPDATE、DELETE を許可します。
2) ユーザー user_name に、database_name.table_name に対するすべての権限を付与します。
データベース名.テーブル名に対するすべての権限をユーザー名に付与します。
3) ユーザー user_name に、database_name.table_name に対する SELECT、INSERT、UPDATE、および DELETE 権限を付与し、その権限を他のユーザーに渡すことを許可します。
GRANT オプションを使用して、database_name.table_name に対する user_name に対する SELECT、INSERT、UPDATE、DELETE を許可します。
2.REVOKE ステートメントの例:
1) database_name.table_name テーブルに対するユーザー user_name の SELECT、INSERT、UPDATE、および DELETE 権限を取り消します。
user_name から、database_name.table_name に対する SELECT、INSERT、UPDATE、DELETE を取り消します。
2) データベース名.テーブル名に対するユーザー user_name のすべての権限を取り消します。
user_name から、database_name.table_name に対するすべての権限を取り消します。
3) database_name.table_name テーブルに対するユーザー user_name の SELECT、INSERT、UPDATE、および DELETE 権限を取り消します。
ヒント: ユーザーは、自分自身が直接付与したアクセス許可のみを取り消すことができます。依存するアクセス許可はまだ存在しますが、CASCADE が宣言されている場合は、依存するすべてのアクセス許可が取り消されます。
GRANT オプションを使用して、user_name からデータベース名.テーブル名に対する SELECT、INSERT、UPDATE、DELETE を取り消します。
概要:データベースの GRANT および REVOKE コマンドは、データベースのユーザー権限を管理するために使用されるコマンドです。これらのコマンドは通常、データベース内のユーザーにアクセス許可を割り当て、ユーザーがデータベース内のデータにアクセスして操作できるようにするために使用されます。GRANT & REVOKE は、GaussDB クラウド データベースの非常に重要なコマンドであり、データベース内のさまざまなオブジェクトへのアクセス権を取り消したり管理したりするために使用でき、これによりデータベースのセキュリティと信頼性が確保されます。
クリックしてフォローし、できるだけ早くHuawei Cloudの新しいテクノロジーについて学びましょう~
Lei Jun氏はXiaomiのThePaper OSの完全なシステムアーキテクチャを発表し、最下層が完全に再構築されたと述べ、 Yuque氏は10月23日に障害の原因と修復プロセスを発表 Microsoft CEOのナデラ氏「Windows Phoneとモバイル事業を放棄したのは間違った決断だった」 . Java 11 と Java 17 の使用率は両方とも Java 8 を上回りました . Hugging Face はアクセスを制限されました. Yuque ネットワークの停止は約 10 時間続きましたが、現在は通常に戻っています. Oracle は Visual Studio Code 用の Java 開発拡張機能を開始しました. The National Data Administration マスク氏、ウィキペディアを「魏事百科事典」に改名したら10億寄付 USDMySQL 8.2.0 GAを正式発表