このトピックでは、アカウントと権限の管理方法について説明します。
PolarDB-X のアカウントと権限システムは MySQL 5.7 と互換性があります。GRANT、REVOKE、SHOW GRANTS、CREATE USER、DROP USER、SET PASSWORD などのステートメントをサポートしています。データベースレベルおよびテーブルレベルで権限を付与できます。グローバルレベルおよびカラムレベルの権限はサポートされていません。
アカウントの作成
構文
CREATE USER [IF NOT EXISTS] user IDENTIFIED BY 'password';
パラメーター
user パラメーターはアカウントを指定します。アカウントはユーザー名とホスト名の組み合わせです。形式は 'username'@'host' です。
-
usernameは次のルールに従う必要があります。-
大文字と小文字を区別します。
-
長さは 4 文字以上 20 文字以内です。
-
文字で始まる必要があります。
-
大文字、小文字、数字を含めることができます。
-
-
hostは、ユーザーがログインできるホストを指定します。アカウントは、ユーザー名とホスト名の組み合わせによって一意に識別されます。hostは次のルールに従う必要があります。-
hostは IP アドレスでなければなりません。_および%ワイルドカードを使用できます。ワイルドカードを含むhost値は、単一引用符で囲む必要があります。例:lily@'30.9.%.%'およびdavid@'%'。説明_は 1 文字に一致し、%は 0 文字以上に一致します。 -
ログイン試行に 2 つのユーザーアカウントが一致する場合、システムはプレフィックスが最も長く一致するアカウントを使用します。例えば、システムに
david@'30.9.12_.234'とdavid@'30.9.1%.234'という 2 つのユーザーがいる場合、ホスト30.9.127.234からのdavidのログイン試行では、david@'30.9.12_.234'アカウントが使用されます。 -
仮想プライベートクラウド (VPC) を使用する場合、ホスト IP アドレスが変更される可能性があります。アカウントと権限の設定が無効にならないようにするには、
hostを'%'に設定することで、任意の IP アドレスに一致させることができます。
-
-
password パラメーターは次の要件を満たす必要があります。
-
長さは 6 文字以上 20 文字以内です。
-
大文字、小文字、数字、および次の特殊文字を含めることができます:
@#$%^&+=。
-
例
CREATE USER 'user1'@'127.0.0.1' IDENTIFIED BY '123456';
CREATE USER IF NOT EXISTS 'user2'@'%' identified by '123456';
アカウントパスワードの変更
構文
SET PASSWORD FOR user = PASSWORD('auth_string')
例
SET PASSWORD FOR 'user1'@'127.0.0.1' = PASSWORD('654321');
SQL ステートメントを使用して特権アカウントのパスワードを変更することはできません。
アカウントの削除
構文
DROP USER user;
例
DROP USER 'user2'@'%';
SQL ステートメントを使用して特権アカウントを削除することはできません。
アカウントへの権限の付与
構文
GRANT privileges ON database.table TO user;
パラメーター
privileges パラメーターは特権タイプを指定します。権限レベルは、上位から順に、グローバルレベル (サポート対象外)、データベースレベル、テーブルレベル、カラムレベルです。PolarDB-X は、テーブルに関する 8 つの基本特権をサポートしています: CREATE、DROP、ALTER、INDEX、INSERT、DELETE、UPDATE、SELECT。
-
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特権が必要です。
例
GRANT SELECT,UPDATE ON `db1`.* TO 'user1'@'127.0.0.1';
SQL ステートメントを使用して特権アカウントに権限を付与することはできません。
アカウント権限の表示
構文
SHOW GRANTS [FOR user];
current_user() を使用して、現在のユーザーを表示できます。
例
SHOW GRANTS FOR 'user1'@'127.0.0.1';
+------------------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1' |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1' |
| GRANT SELECT, UPDATE ON db1.* TO 'user1'@'127.0.0.1' |
+------------------------------------------------------+
SHOW GRANTS FOR current_user();
+------------------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1' |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1' |
| GRANT SELECT, UPDATE ON db1.* TO 'user1'@'127.0.0.1' |
+------------------------------------------------------+
アカウントからの権限の取り消し
構文
REVOKE privileges ON database.table FROM user;
例
REVOKE UPDATE ON db1.* FROM 'user1'@'127.0.0.1';
SHOW GRANTS FOR 'user1'@'127.0.0.1';
+----------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1' |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1' |
| GRANT SELECT ON db1.* TO 'user1'@'127.0.0.1' |
+----------------------------------------------+
SQL ステートメントを使用して特権アカウントから権限を取り消すことはできません。