すべてのプロダクト
Search
ドキュメントセンター

PolarDB:アカウントと権限の管理

最終更新日:May 28, 2024

分散リレーショナルデータベースサービス (PolarDB-X 1.0) のアカウントとアクセス許可を管理する方法は、MySQLの場合と同じです。 DRDSは、GRANTREVOKESHOW GRANTSCREATE USERDROP USERSET PASSWORDなどのステートメントをサポートしています。

アカウント

アカウントの説明

アカウント名は、ユーザー名とホスト名で構成されます。 形式はusername @ 'host' です。 2つのアカウントのユーザー名が同じでホスト名が異なる場合、アカウントはそれぞれ異なるアカウントと見なされます。 たとえば、lily@30.9.73.96lily@30.9.73.100は2つの異なるアカウントです。 2つのアカウントのパスワードと権限は異なる場合があります。

その後、

PolarDB-X 1.0コンソールでデータベースが作成された場合、システムは自動的にデータベースの2つのシステムアカウント (管理者アカウントと読み取り専用アカウント) を作成します。 これらのアカウントは組み込みアカウントです。 削除したり、権限を変更したりすることはできません。

  • 管理者アカウント名はデータベース名と同じです。 たとえば、データベース名がeasydbの場合、管理者アカウント名もeasydbです。

  • 読み取り専用アカウント名は、接尾辞が _ROのデータベース名です。 たとえば、データベース名がeasydbの場合、読み取り専用アカウント名はeasydb_ROです。

たとえば、dreamdbandordbの2つのデータベースが作成されます。 dreamdbデータベースには、dreamdbという名前の管理者アカウントと、dreamdb_ROという名前の読み取り専用アカウントがあります。 andordbデータベースには、andordbという名前の管理者アカウントと、andordb_ROという名前の読み取り専用アカウントがあります。

説明

PolarDB-X 1.0でCREATE USERステートメントを実行して作成されたアカウントは PolarDB-X 1.0 これらのアカウントはApsaraDB RDSで使用できないため、ApsaraDB RDSと同期されません。

アカウント権限

  • 管理者アカウントには完全な権限があります。

  • 管理者アカウントのみを使用して、他のアカウントを作成し、作成したアカウントに権限を付与できます。

  • 管理者アカウントはデータベースにバインドされており、他のデータベースに対する権限はありません。 管理者アカウントは、アカウントにバインドされているデータベースへのアクセスにのみ使用できます。 管理者アカウントを使用して、他のデータベースに対する権限を他のアカウントに付与することはできません。 たとえば、easydb管理者アカウントを使用して、easydbデータベースにのみ接続でき、easydbデータベースまたはeasydbデータベース内のテーブルに対してのみ権限を他のアカウントに付与できます。

  • 読み取り専用アカウントにはSELECT権限のみがあります。

名前付け規則

  • アカウント名は大文字と小文字を区別します。

  • アカウント名は4 ~ 20文字である必要があります。

  • アカウント名は文字で始まる必要があります。

  • アカウント名には、文字と数字を使用できます。

パスワードの複雑さの要件

  • パスワードの長さは6 ~ 20文字である必要があります。

  • パスワードには、文字、数字、および次の特殊文字を含めることができます: @#$%^& +=

ホスト名マッチングルール

  • ホスト名は、1つ以上のIPアドレスを表す値である必要があります。 アンダースコア (_) とワイルドカード (%) を含めることができます。 アンダースコア (_) は文字を表し、ワイルドカード (%) は0文字以上を表します。 ワイルドカードを含むホスト名は、lily @ '30.9.%.% 'やdavid @' % 'などの単一引用符 (') で囲む必要があります。

  • DRDSの2つのアカウントがホストのログオンユーザーと一致する場合、ホスト名に長いプレフィックスが含まれているアカウントがログオンアカウントです。 ホストの名前プレフィックスは、ホストのIPアドレスのワイルドカードの前にあるIPセグメントです。 たとえば、david @ '30.9.12_.xxx' アカウントとdavid @ '30.9.1%.234 'アカウントがDRDSに存在し、davidユーザー名を使用して30.9.127.xxxホストにログインした場合、ログインアカウントはdavid @ '30.9.12_.xxx' です。

  • Virtual Private Cloud (VPC) が有効化されると、ホストのIPアドレスが変更されます。

    重要

    無効なアカウントおよび権限設定を防ぐために、すべてのIPアドレスと一致するようにホスト名を '%' に設定することを推奨します。

権限

さまざまなレベルの権限のサポート

  • データベースレベルの権限がサポートされています。

  • テーブルレベルの権限がサポートされています。

  • グローバル権限はサポートされていません。

  • 列レベルの権限はサポートされていません。

  • サブプログラムレベルの権限はサポートされていません。

権限の説明

CREATE、DROP、ALTER、INDEX、INSERT、DELETE、UPDATE、SELECTの8つの基本テーブル権限がサポートされています。

  • テーブルに対してTRUNCATEステートメントを実行するには、テーブルに対するDROP権限が必要です。

  • テーブルに対してREPLACEステートメントを実行するには、テーブルに対するINSERTおよびDELETE権限が必要です。

  • CREATE INDEXおよびDROP INDEXステートメントを実行するには、テーブルに対するINDEX権限が必要です。

  • CREATE SEQUENCEステートメントを実行するには、データベースレベルのCREATE権限が必要です。

  • DROP SEQUENCEステートメントを実行するには、データベースレベルのDROP権限が必要です。

  • ALTER SEQUENCEステートメントを実行するには、データベースレベルのALTER権限が必要です。

  • テーブルに対してINSERT ON DUPLICATE UPDATEステートメントを実行するには、テーブルに対するINSERT権限とUPDATE権限が必要です。

権限ルール

  • 権限は、ユーザー名 (username) ではなくアカウント (username @ 'host') にバインドされます。

  • アカウントにテーブルの権限を付与すると、システムはテーブルが存在するかどうかを確認します。 テーブルが存在しない場合、エラーが報告される。

  • 次のデータベースアカウントのアクセス許可は、グローバルアクセス許可、データベースレベルのアクセス許可、テーブルレベルのアクセス許可、および列レベルのアクセス許可の降順で表示されます。 グローバル権限はサポートされていません。

  • 付与された上位レベルの権限は、下位レベルの権限を上書きします。 上位レベルの権限を削除すると、下位レベルの権限も削除されます。

  • USAGE権限はサポートされていません。

複数のデータベースに対する権限をアカウントに付与

For

PolarDB-X 1.0 V5.3.6以降の場合、次のメソッドを使用して、複数のデータベースに対して単一のアカウント権限を付与できます。

  • Alibaba Cloudで

    PolarDB-X 1.0コンソールで、アカウント管理ページに移動してアカウントを作成し、アカウントに必要な権限を付与します。 この方法を使用することを推奨します。

  • CREATE USERステートメントを実行してアカウントを作成し、GRANTステートメントを実行してアカウントに必要な権限を付与します。

    説明

    SQL文を実行する場合は、次の制限に注意してください。

    1. 管理者アカウントのみを使用してユーザーを作成し、権限を付与できます。

    2. 管理者アカウントは、バインドされたデータベースに対する権限を他のアカウントにのみ付与できます。 たとえば、データベースAの管理者アカウントを使用してnew_user @ '%' という名前のアカウントを作成し、データベースAおよびデータベースBの権限をnew_userに付与するとします。 この要求を満たすには、データベースAの管理者アカウントを使用してデータベースAのアクセス許可をnew_userに付与し、データベースBの管理者アカウントを使用してデータベースBのアクセス許可をnew_userに付与する必要があります。

複数のデータベースで権限が付与されたアカウントを使用する

DRDS V5.3.6以降では、単一のアカウントに複数のデータベースに対する権限を付与できます。 たとえば、new_user @ '%' という名前のアカウントがデータベースAおよびデータベースBに対するSELECTおよびINSERT権限を持っている場合、このアカウントを使用するときは次の制限に注意してください。

  • アカウントを使用してデータベースAにログインし、データベースBのデータをクエリする場合は、SELECT * FROM B.table_in_B; ステートメントの代わりに、use B; SELECT * FROM table_in_B; ステートメントを実行します。 これは、クロスデータベースクエリがサポートされていないためです。

  • アカウントを使用してデータベースAにログインし、データベースBにデータを書き込む場合は、INSERT INTO B.table_in_B VALUES('value'); ステートメントの代わりに、使用B; INSERT INTO table_in_B VALUES('value'); ステートメントを実行します。 これは、データベース間データ挿入がサポートされていないためです。

  • 同じ制限が他のSQL文にも適用されます。

関連ステートメント

アカウントの作成に使用するユーザーの作成

  • 構文

    CREATE USER user_specification [, user_specification] ...
    user_specification: ユーザー [auth_option]
    auth_option: 'auth#string 'で識別
                
    • lily@30.9.73.96という名前のアカウントを作成します。 アカウントのパスワードが123456です。 lilyはユーザー名です。 このアカウントは、IPアドレスが30.9.73.96であるホストからのみデータベースにログオンするために使用できます。

      '123456' によって識別されるユーザーlily@30.9.73.96を作成します。
    • david @ '%' という名前のアカウントを作成します。 このアカウントにはパスワードがありません。 davidはユーザー名です。 このアカウントは、すべてのホストからデータベースにログインするために使用できます。

      CREATE USER david @ '%';

DROP USERアカウントの削除

  • 構文

    DROP USERユーザー [、ユーザー]...
  • lily@30.9.73.96アカウントを削除します。

    DROP USER lily@30.9.73.96;

アカウントのパスワードを変更するためのパスワード設定

  • 構文

    SETパスワードFOR user = password_option
    
    password_option: {
        パスワード ('auth_string ')
    } 
  • lily@30.9.73.96アカウントのパスワードを123456に変更します。

    SET PASSWORD FOR lily@30.9.73.96 = PASSWORD('123456')

アカウントに権限を付与するために使用されるGRANT

  • 構文

    GRANT
        priv_type[, priv_type] ...
        ON priv_level
        TO user_specification [, user_specification] ...
        [GRANTオプション付き]
    priv_level: {
      | db_name.*
      | db_name.tbl_name
      | tbl_name
    }
    user_specification:
        ユーザー [auth_option]
    auth_option: {
        「auth#string」による識別
    }
                
    説明

    GRANTステートメントで指定されたアカウントが存在せず、IDENTIFIED BY句が使用されていない場合、エラーメッセージが返されます。 エラーメッセージは、アカウントが存在しないことを示します。 GRANTステートメントで指定されたアカウントが存在せず、IDENTIFIED BY句が使用されている場合、指定されたアカウントが作成され、権限が付与されます。

    • easydbデータベース用にdavid @ '%' という名前のアカウントを作成します。 davidはユーザー名です。 このアカウントは、すべてのホストからeasydbデータベースにログインするために使用でき、easydbデータベースに対する完全な権限を持っています。

      # 方法1: ステートメントを実行してアカウントを作成し、別のステートメントを実行してアカウントに権限を付与します。
      CREATE USER david @ '%' 「あなたの# パスワード」によって識別されます。easydb.* のすべての特権をdavid @ '%' に付与します。# 方法2: ステートメントを1つだけ実行してアカウントを作成し、そのアカウントに権限を付与します。
      easydbですべての特権を付与します。* david @ 「 % 」に「あなたの# パスワード」で識別されます。
    • easydbデータベース用にhanson @ '%' という名前のアカウントを作成します。 hansonはユーザー名です。 このアカウントは、すべてのホストからeasydbデータベースにログインするために使用でき、easydb.employeesテーブルに対する完全な権限を持ちます。

      easydb.employeesのすべての特権をhanson @ '%' に付与
      「あなたの# パスワード」によって識別されます。
    • easydbデータベースのhanson@192.168.3.10という名前のアカウントを作成します。 hansonはユーザー名です。 このアカウントは、192.168.3.10からのみeasydbデータベースにログインするために使用でき、easydb.empテーブルに対するINSERTおよびSELECT権限を持ちます。

      GRANT INSERT、SELECT ON easydb.empからhanson @ '192.168.3.10'
      「あなたの# パスワード」によって識別されます。
    • easydbデータベース用にactro @ '%' という名前の読み取り専用アカウントを作成します。 actroはユーザー名です。 このアカウントを使用して、すべてのホストからeasydbデータベースにログインできます。

      GRANT SELECT ON easydb.* to actro @ '%' IDENTIFIED BY your#password ';

権限を取り消すために使用されるREVOKE

  • 構文

    • アカウントから特定のレベルの権限を削除します。 権限レベルはpriv_levelで指定します。

      REVOKE
      priv_type
      [, priv_type] ...
      ON priv_レベル 
    • アカウントからデータベースレベルとテーブルレベルの権限を削除します。

      はすべての特権、承認オプションを取り消す
      ユーザー [、ユーザー] から... 
    • hanson @ '%' アカウントからeasydb.empテーブルのCREATE、DROP、およびINDEX権限を削除します。

      REVOKE CREATE、DROP、INDEX ON easydb.emp FROM hanson @ '%';
    • lily@30.9.73.96アカウントからすべての権限を削除します。

      すべての特権、lily@30.9.73.96からの承認オプションを取り消します。
      説明

      MySQLとの互換性を確保するには、上記のステートメントにGRANT OPTIONを追加する必要があります。

付与された権限のクエリに使用されるSHOW GRANTS

  • 構文

    SHOW GRANTS[ FOR user @ host];
  • SHOW GRANTS FOR user1 @ host;
説明

DRDS V5.3.6以降では、SHOW GRANTSステートメントを実行して、現在のアカウントの権限のみを照会できます。 にログオンできます。

PolarDB-X 1.0コンソールを使用して、すべてのアカウントと権限に関する情報を表示します。