このセクションでは、ユーザーを作成する方法について説明します。
ユーザーを作成できるユーザー
データベースの運用においては、多様なユーザーを作成し、それぞれに適切な権限を付与する必要が生じることがよくあります。一般的に、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;