この記事では、ユーザーを作成する方法について説明します。
ユーザーを作成できるのは誰か
データベースが稼働している間、さまざまなユーザーを作成し、それぞれに適切な権限を付与する必要があります。一般的に、CREATE USER 権限が付与されたユーザーはユーザーを作成できます。
CREATE USER 権限は非常に強力なため、デフォルトではクラスタ管理者とテナント管理者のみがこのシステム権限を持っています。他のユーザーがユーザーを作成する必要がある場合は、CREATE USER 権限を付与される必要があります。権限付与に関する操作については、直接権限付与を参照してください。
ユーザー名のルール
ユーザーに名前を指定する際は、以下の制限に注意する必要があります:
ユーザー名の一意性:各ユーザー名はテナント内で一意である必要があります。
ユーザー名はテナント内で一意であり、異なるテナントのユーザーは同名であっても構いません。そのため、
ユーザー名@テナント名の形式でシステム全体で一意に特定のテナントユーザーを識別できます。システムテナントとMySQLテナントは同一の互換モードに属しているため、システムテナントと通常のテナントのユーザーを区別するために、システムテナントのユーザー名には特定のプレフィックスを使用することを推奨します。
ユーザー名の命名規則:
OBClientやODCなどのクライアントを使用してユーザーを作成する場合、ユーザー名の長さは64バイトを超えないようにしてください。
OCPを使用してユーザーを作成する場合、ユーザー名は英字で始まり、大文字、小文字、数字、アンダースコアを含むことができ、長さは2~64文字です。
SQLステートメントを使用して最小限のデータベース権限を持つユーザーを作成する
CREATE USER ステートメントを使用してユーザーを作成できます。ユーザーを作成するには、CREATE USER のシステム権限が必要です。ユーザーを作成する際は、最小権限原則を守ることを推奨します。これは、すべてのユーザーがタスク実行に必要な最小限の権限のみを持つことを意味します。
ユーザーを作成するSQLステートメントは次のとおりです:
CREATE USER [IF NOT EXISTS] user_specification_list
[REQUIRE {NONE | SSL | X509 | tls_option}];
user_specification_list:
user_specification [, user_specification ...]
user_specification:
user IDENTIFIED BY 'authstring'
| user IDENTIFIED BY PASSWORD 'hashstring'
tls_option:
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
ステートメントの説明:
IF NOT EXISTS:作成予定のユーザー名が既に存在し、IF NOT EXISTSが指定されていない場合、システムはエラーを報告します。IDENTIFIED BY:オプションのIDENTIFIED BY句を使用して、アカウントにパスワードを指定できます。その中で:
user IDENTIFIED BY 'authstring'ステートメントのパスワードは平文であり、mysql.userテーブルに保存された後、サーバー側で暗号化されます。user IDENTIFIED BY PASSWORD 'authstring'ステートメントのパスワードは暗号化されています。
REQUIREは、ユーザーが使用する暗号化プロトコルを指定するために使用され、NONE、SSL、X509、tls_optionのいずれかの一つです。
最小限のデータベース権限を持つユーザー test2 を作成する例を以下に示します。
rootユーザーでクラスタのMySQLテナントにログインします。以下のコマンドを実行して、ユーザー
test2を作成します。obclient> CREATE USER 'test2' IDENTIFIED BY '******';以下のコマンドを実行して、ユーザー
test2にデータベースdb1内のすべてのテーブルへのアクセス権限を付与します。obclient> GRANT SELECT ON db1.* TO test2;