PolarDB-X 1.0 は、MySQL と同一のアカウントおよび権限モデルを採用しています。サポートされる SQL ステートメントには、GRANT、REVOKE、SHOW GRANTS、CREATE USER、DROP USER、および SET PASSWORD があります。
アカウントモデル
アカウントの形式
アカウントはユーザー名とホスト名で構成され、username@'host' の形式で表されます。ユーザー名が同一でもホスト名が異なる場合は、それぞれ独立したアカウントであり、パスワードおよび権限も個別に管理されます。たとえば、lily@30.9.73.96 と lily@30.9.73.100 は、別々のアカウントです。
組み込みアカウント
PolarDB-X 1.0 コンソールでデータベースを作成すると、システムが自動的に以下の 2 種類の組み込みアカウントを作成します。
| アカウント種別 | 命名規則 | 例(データベース easydb) |
|---|---|---|
| 管理者アカウント | データベース名と同一 | easydb |
| 読み取り専用アカウント | データベース名+_RO | easydb_RO |
組み込みアカウントは削除できず、その権限を変更することもできません。
CREATE USER で作成されたアカウントは PolarDB-X 1.0 内でのみ有効であり、ApsaraDB RDS へは同期されません。アカウントの権限
管理者アカウントは、バインドされたデータベースに対して完全な権限を持ちます。ただし、1 つのデータベースにのみバインドされ、他のデータベースに対する権限付与は行えません。
アカウントの作成および権限の付与は、管理者アカウントのみが実行できます。
読み取り専用アカウントは、SELECT 権限のみを持ちます。
アカウント名およびパスワードの要件
アカウント名:
4~20 文字(大文字・小文字を区別)
英字で始める必要があります
英字および数字のみ使用可能
パスワード:
6~20 文字
英字、数字、および以下の特殊文字:
@#$%^&+=を使用可能
ホスト名のマッチング
ホスト名ではワイルドカードがサポートされています。_ はちょうど 1 文字にマッチし、% は 0 文字以上にマッチします。ワイルドカードを含むホスト名は、シングルクォーテーションで囲む必要があります(例: lily@'30.9.%.%' や david@'%')。
ログイン時に同一のユーザーおよびホストにマッチするアカウントが複数存在する場合、最初のワイルドカードより前のプレフィックスが長い方のホスト名を持つアカウントが優先されます。たとえば、david@'30.9.12_.xxx' と david@'30.9.1%.234' の両方が存在し、david が 30.9.127.xxx からログインする場合、マッチするのは david@'30.9.12_.xxx' となります。
Virtual Private Cloud (VPC) を有効化すると、ホストの IP アドレスが変更される場合があります。アカウント構成が無効になるのを防ぐため、ホスト名を '%' に設定することを推奨します。
権限モデル
サポートされる権限レベル
PolarDB-X 1.0 では、データベースレベルおよびテーブルレベルの権限がサポートされています。グローバル権限、カラムレベル権限、およびサブプログラムレベル権限はサポートされていません。
以下の表は、ON 句の構文と、GRANT ステートメントにおける権限レベルとの対応関係を示しています。
| 権限レベル | ON 句の構文 | 例 |
|---|---|---|
| データベースレベル | db_name.* | ON easydb.* |
| テーブルレベル | db_name.tbl_name または tbl_name | ON easydb.employees |
利用可能な権限
8 種類の基本的なテーブル権限がサポートされています: CREATE、DROP、ALTER、INDEX、INSERT、DELETE、UPDATE、および SELECT。
以下の表は、SQL 操作とその実行に必要な権限の対応関係を示しています。
| SQL 操作 | 必要な権限 |
|---|---|
| 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@'host')に紐付けられます。テーブルに対する権限を付与する場合、そのテーブルは事前に存在している必要があります。存在しない場合はエラーが返されます。
上位レベルの権限は下位レベルの権限を上書きします。上位レベルの権限を削除すると、それに含まれる下位レベルの権限もすべて削除されます。
USAGE 権限はサポートされていません。
複数データベースへの権限付与
PolarDB-X 1.0 V5.3.6 以降では、単一のアカウントが複数のデータベースに対する権限を持つことが可能です。
オプション 1(推奨): PolarDB-X 1.0 コンソールのアカウント管理ページからアカウントを作成し、権限を割り当てます。
オプション 2: SQL ステートメントを使用します。以下の制約にご注意ください。
アカウントの作成および権限の付与は、管理者アカウントのみが実行できます。
管理者アカウントは、自身がバインドされたデータベースに対してのみ権限を付与できます。たとえば、
new_user@'%'に Database A および Database B の両方の権限を付与するには、Database A の管理者アカウントで Database A の権限を付与し、Database B の管理者アカウントで Database B の権限を付与する必要があります。
マルチデータベースアカウントの制限事項: 複数データベース間のクエリ(クロスデータベースクエリ)およびデータ挿入(クロスデータベース挿入)はサポートされていません。Database A にログインした状態で Database B にアクセスするには、USE ステートメントでデータベースを切り替える必要があります。
-- Database B のデータをクエリ
USE B;
SELECT * FROM table_in_B;
-- Database B にデータを挿入
USE B;
INSERT INTO table_in_B VALUES('value');SQL ステートメント リファレンス
アカウントの作成
構文:
CREATE USER user_specification [, user_specification] ...
user_specification: user [ auth_option ]
auth_option: IDENTIFIED BY 'auth_string'例:
パスワード 123456 を持つ lily@30.9.73.96 を作成します。このアカウントは 30.9.73.96 からのみ接続可能です。
CREATE USER lily@30.9.73.96 IDENTIFIED BY '123456';パスワードなしの david@'%' を作成します。このアカウントは任意のホストから接続可能です。
CREATE USER david@'%';アカウントの削除
構文:
DROP USER user [, user] ...例:
DROP USER lily@30.9.73.96;アカウントパスワードの変更
構文:
SET PASSWORD FOR user = PASSWORD('auth_string')例:
SET PASSWORD FOR lily@30.9.73.96 = PASSWORD('123456');権限の付与
構文:
GRANT
priv_type [, priv_type] ...
ON priv_level
TO user_specification [, user_specification] ...
[WITH GRANT OPTION]
priv_level:
db_name.*
| db_name.tbl_name
| tbl_name
user_specification:
user [ IDENTIFIED BY 'auth_string' ]GRANTステートメント内のアカウントが存在せず、かつIDENTIFIED BY句が指定されていない場合、エラーが返されます。IDENTIFIED BYが指定されている場合は、アカウントの作成と権限の付与が 1 つのステートメントで実行されます。
例:
david@'%' を作成し、easydb に対する完全な権限を付与します。
-- 2 ステップ:アカウント作成 → 権限付与
CREATE USER david@'%' IDENTIFIED BY 'your#password';
GRANT ALL PRIVILEGES ON easydb.* TO david@'%';
-- 1 ステップ:アカウント作成と権限付与を同時実行
GRANT ALL PRIVILEGES ON easydb.* TO david@'%' IDENTIFIED BY 'your#password';easydb.employees テーブルに対する完全な権限を hanson@'%' に付与します。
GRANT ALL PRIVILEGES ON easydb.employees TO hanson@'%'
IDENTIFIED BY 'your#password';easydb.emp に対して INSERT および SELECT 権限を hanson@192.168.3.10 のみに付与します:
GRANT INSERT, SELECT ON easydb.emp TO hanson@'192.168.3.10'
IDENTIFIED BY 'your#password';actro@'%' を easydb の読み取り専用アカウントとして作成します。
GRANT SELECT ON easydb.* TO actro@'%' IDENTIFIED BY 'your#password';権限の取消し
構文:
特定のレベルで権限を取消す場合:
REVOKE
priv_type [, priv_type] ...
ON priv_level
FROM user [, user] ...アカウントからデータベースレベルおよびテーブルレベルのすべての権限を取消す場合:
REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user [, user] ...GRANT OPTION を明示的に指定する必要があります。例:
easydb.emp に対する CREATE、DROP、および INDEX 権限を hanson@'%' から取り消します:
REVOKE CREATE, DROP, INDEX ON easydb.emp FROM hanson@'%';lily@30.9.73.96 からすべての権限を取消します。
REVOKE ALL PRIVILEGES, GRANT OPTION FROM lily@30.9.73.96;付与済み権限の確認
構文:
SHOW GRANTS [FOR user@host];例:
SHOW GRANTS FOR actro@'%';PolarDB-X 1.0 V5.3.6 以降では、SHOW GRANTS は現在のアカウントに対する権限情報のみを返します。すべてのアカウントの権限を確認するには、PolarDB-X 1.0 コンソールのアカウント管理ページをご利用ください。