CREATE USER
新しいデータベースユーザーを作成します。データベースユーザーは、権限とロールに応じて、データベースでデータを取得したり、コマンドを実行したり、その他のアクションを実行したりできます。このコマンドを実行するには、データベースのスーパーユーザー権限を持つ必要があります。
必要な権限
以下に、CREATE USER に必要な権限を示します。
スーパーユーザー
CREATE USER の権限を持つユーザー
構文
CREATE USER name [ WITH ] PASSWORD { 'password' | 'md5hash' | 'sha256hash' | DISABLE } [ option [ ... ] ] where option can be: CREATEDB | NOCREATEDB | CREATEUSER | NOCREATEUSER | SYSLOG ACCESS { RESTRICTED | UNRESTRICTED } | IN GROUP groupname [, ... ] | VALID UNTIL 'abstime' | CONNECTION LIMIT { limit | UNLIMITED } | SESSION TIMEOUT limit | EXTERNALID external_id
パラメータ
- name
-
作成するユーザーの名前。ユーザー名を
PUBLIC
にすることはできません。有効な名前の詳細については、「名前と識別子」を参照してください。 - WiTH
-
オプションキーワード Amazon Redshift では WITH は無視されます
- PASSWORD { 'password' | 'md5hash' | 'sha256hash' | DISABLE }
-
ユーザーのパスワードを設定します。
デフォルトでは、ユーザーはパスワードが無効になっていない限り、自分のパスワードを変更できます。ユーザーのパスワードを無効にするには、DISABLE を指定します。ユーザーのパスワードが無効になると、パスワードはシステムから削除され、ユーザーは AWS Identity and Access Management (IAM) ユーザーの一時的認証情報を使用してのみログオンできます。詳細については、「IAM 認証を使用したデータベースユーザー認証情報の生成」を参照してください。スーパーユーザーのみが、パスワードを有効または無効にできます。スーパーユーザーのパスワードを無効にすることはできません。パスワードを有効にするには、ALTER USERを実行し、パスワードを指定します。
パスワードの指定は、クリアテキスト、MD5 ハッシュ文字列、もしくは SHA256 ハッシュ文字列の形式で行うことができます。
注記
AWS Management Console、AWS CLI、または Amazon Redshift API を使用して新しいクラスターを起動する場合、初期データベースユーザーのパスワードはクリアテキストで指定する必要があります。ALTER USER を使用して、パスワードを後で変更できます。
クリアテキストでは、パスワードは以下の制約を満たす必要があります:
-
8 から 64 文字の長さにする必要があります。
-
少なくとも 1 つの大文字、1 つの小文字、および 1 つの数字を使用する必要があります。
-
ASCII 文字 (ASCII コード 33~126) のうち、' (一重引用符)、" (二重引用符)、\、/、@ を除く任意の文字を使用できます。
クリアテキストで CREATE USER パスワード パラメータを通過するための安全な代替方法として、パスワードとユーザー名を含む文字列の MD5 ハッシュを指定できます。
注記
MD5 ハッシュ文字列を指定すると、CREATE USER コマンドが MD5 ハッシュ文字列の有効性を確認しますが、パスワード部分の文字列は検証されません。この場合、データベースにログインするために利用できないパスワード (空の文字列など) を作成することができます。
MD5 パスワードを指定するには、以下のステップに従います:
-
パスワードとユーザー名を連結します。
例えば、パスワードが
ez
、ユーザーがuser1
の場合、連結した文字列はezuser1
です。 -
連結した文字列を 32 文字の MD5 ハッシュ文字列に変換します。ハッシュ文字列を作成するために任意の MD5 ユーティリティを使用できます。次の例では、Amazon Redshift MD5 関数 と連結演算子 ( || ) を使用し、32 文字の MD5 ハッシュ文字列を使用しています。
select md5('ez' || 'user1');
md5 -------------------------------- 153c434b4b77c89e6b94f12c5393af5b
-
MD5 ハッシュ文字列の前に「
md5
」を連結し、md5hash 引数として連結した文字列を指定します。create user user1 password 'md5153c434b4b77c89e6b94f12c5393af5b';
-
サインイン認証情報を使用してデータベースにログオンします。
この例では、パスワード
ez
を使用してuser1
としてログオンします。
もう 1 つの安全な方法は、パスワード文字列の SHA-256 ハッシュを指定することです。または、ダイジェストの作成に使用された、独自の有効な SHA-256 ダイジェストと 256 ビットのソルトを指定することもできます。
Digest – ハッシュ関数の出力。
Salt – ハッシュ関数の出力のパターンを減らすために、パスワードと組み合わされて、ランダムに生成されたデータ。
'sha256|Mypassword'
'sha256|digest|256-bit-salt'
次の例では、Amazon Redshift によりソルトの生成および管理を行っています。
CREATE USER admin PASSWORD 'sha256|Mypassword1';
次の例では、ダイジェストの作成に使用された有効な SHA-256 ダイジェストと 256 ビットのソルトが提供されます。
パスワードを指定して独自のソルトでハッシュするには、次の手順に従います。
-
256 ビットのソルトを作成します。ソルトを取得するには、任意の 16 進文字列ジェネレータを使用して 64 文字の文字列を生成します。この例で、ソルトは
c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6
です。 FROM_HEX 関数を使用して、ソルトをバイナリに変換します。SHA2 関数にはソルトのバイナリ表現が必要であるためです。次のステートメントをご覧ください。
SELECT FROM_HEX('c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6');
CONCAT 関数を使用して、パスワードにソルトを追加します。この例で、パスワードは
Mypassword1
です。次のステートメントをご覧くださいSELECT CONCAT('Mypassword1',FROM_HEX('c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6'));
SHA2 関数を使用して、パスワードとソルトの組み合わせからダイジェストを作成します。次のステートメントをご覧ください。
SELECT SHA2(CONCAT('Mypassword1',FROM_HEX('c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6')), 0);
これまでの手順のダイジェストとソルトを使用して、ユーザーを作成します。次のステートメントをご覧ください。
CREATE USER admin PASSWORD 'sha256|821708135fcc42eb3afda85286dee0ed15c2c461d000291609f77eb113073ec2|c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6';
-
サインイン認証情報を使用してデータベースにログオンします。
この例では、パスワード
Mypassword1
を使用してadmin
としてログオンします。
ハッシュ関数を指定せずにプレーンテキストによりパスワードを設定した場合は、ユーザーネームをソルトとして使用して MD5 ダイジェストの生成が行われます。
-
- CREATEDB | NOCREATEDB
-
CREATEDB オプションを使用すると、新規ユーザーはデータベースを作成できます。デフォルトは NOCREATEDB です。
- CREATEUSER | NOCREATEUSER
-
CREATEUSER オプションを使用すると、CREATE USER を含め、データベースに関するすべての権限を持つスーパーユーザーが作成されます。デフォルトは NOCREATEUSER です。詳細については、「superuser」を参照してください。
- SYSLOG ACCESS { RESTRICTED | UNRESTRICTED }
-
Amazon Redshift のシステムテーブルとビューに対するユーザーのアクセスレベルを指定する句です。
SYSLOG ACCESS RESTRICTED アクセス許可を持つ通常のユーザーは、ユーザーが表示できるシステムテーブルとビューで自分が生成した行のみを表示できます。デフォルトは RESTRICTED です。
SYSLOG ACCESS UNRESTRICTED アクセス許可を持つ通常のユーザーは、ユーザーが表示できるシステムテーブルとビューのすべての行 (別のユーザーが生成した行を含む) を表示できます。UNRESTRICTED を指定しても、スーパーユーザーが表示可能なテーブルへのアクセス権が、通常のユーザーに付与されるわけではありません。スーパーユーザーが表示可能なテーブルを表示できるのはスーパーユーザーだけです。
注記
システムテーブルに対する無制限のアクセス権限を付与されたユーザーは、別のユーザーが生成したデータへの可視性が提供されます。例えば、STL_QUERY と STL_QUERYTEXT には INSERT、UPDATE、および DELETE ステートメントのフルテキストが含まれており、ユーザーが生成した機密データがこれらに含まれている可能性があります。
SVV_TRANSACTIONS のすべての行は、すべてのユーザーが表示可能です。
詳細については、「システムテーブルとビューのデータの可視性」を参照してください。
- IN GROUP groupname
-
ユーザーが属する既存のグループ名を指定します。複数のグループ名を指定できます。
- VALID UNTIL abstime
-
VALID UNTIL オプションでは、ユーザーのパスワードが無効になるまでの絶対時間を設定します。デフォルトでは、パスワードには期限がありません。
- CONNECTION LIMIT { limit | UNLIMITED }
-
ユーザーが同時に開けるデータベース接続の最大数。この制限はスーパーユーザーには適用されません。同時接続の最大数を許可するには、UNLIMITED キーワードを使用します。データベースごとの接続数の制限が適用される場合もあります。詳細については、「CREATE DATABASE」を参照してください。デフォルトは UNLIMITED です。現在の接続を確認するには、STV_SESSIONSシステムビューに対してクエリを実行します。
注記
ユーザーとデータベースの両方の接続制限が適用される場合は、ユーザーが接続しようとしたときに、両方の制限内に未使用の接続スロットがなければなりません。
- SESSION TIMEOUT limit
-
セッションが非アクティブまたはアイドル状態を維持する最大時間 (秒) です。指定できる範囲は 60 秒 (1 分) から 1,728,000 秒 (20 日) です。ユーザーに対しセッションタイムアウトが設定されていない場合は、クラスターの設定値が適用されます。詳細については、「Amazon Redshift 管理ガイド」の「Amazon Redshift のクォータと制限」を参照してください。
設定されたセッションタイムアウトは、新しいセッションにのみ適用されます。
開始時刻、ユーザー名、セッションタイムアウトなど、アクティブなユーザーセッションに関する情報を表示するには、STV_SESSIONSシステムビューを参照します。ユーザーセッションの履歴に関する情報を表示するには、STL_SESSIONSビューを参照します。セッションタイムアウト値など、データベースユーザーに関する情報を取得するには、SVL_USER_INFOビューを参照します。
- EXTERNALID external_id
-
ID プロバイダーに関連付けられているユーザーの識別子。ユーザーはパスワードを無効にする必要があります。詳細については、「Amazon Redshift 用のネイティブ ID プロバイダー (IdP) フェデレーション」を参照してください。
使用に関する注意事項
デフォルトでは、すべてのユーザーは PUBLIC スキーマに対して、CREATE 権限と USAGE 権限を所有しています。ユーザーがデータベースの PUBLIC スキーマにオブジェクトを作成できないようにするには、REVOKE コマンドを使用してその権限を削除します。
IAM 認証情報を使用してデータベースのユーザー認証情報を作成する場合、一時的認証情報を使用してのみログオンできるスーパーユーザーを作成することをお勧めします。スーパーユーザーのパスワードを無効にすることはできませんが、ランダムに生成された MD5 ハッシュ文字列を使って不明なパスワードを作成することはできます。
create user iam_superuser password 'md5A1234567890123456780123456789012' createuser;
二重引用符で囲まれたユーザーネームの大文字と小文字は、enable_case_sensitive_identifier
設定オプションの設定にかかわらず、常に保持されます。詳細については、「enable_case_sensitive_identifier」を参照してください。
例
次のコマンドでは、パスワード (abcD1234)、データベース作成権限、接続制限 (30) の dbuser という名前のユーザーを作成します。
create user dbuser with password 'abcD1234' createdb connection limit 30;
PG_USER_INFO カタログテーブルに対してクエリを実行し、データベースユーザーに関する詳細を表示します。
select * from pg_user_info;
usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig | useconnlimit -----------+----------+-------------+----------+-----------+----------+----------+-----------+------------- rdsdb | 1 | true | true | true | ******** | infinity | | adminuser | 100 | true | true | false | ******** | | | UNLIMITED dbuser | 102 | true | false | false | ******** | | | 30
次の例では、アカウントのパスワードは 2017 年 6 月 10 日まで有効です。
create user dbuser with password 'abcD1234' valid until '2017-06-10';
次の例では、特殊文字を含む、大文字と小文字が区別されるパスワードを持つユーザーを作成します。
create user newman with password '@AbC4321!';
MD5 パスワードにバックスラッシュ (「\」) を使用するには、ソースとなる文字列のバックスラッシュをバックスラッシュでエスケープします。次の例では、slashpass
という名前のユーザーを作成し、バックスラッシュ一つ ( '\
') をパスワードとして使用しています。
select md5('\\'||'slashpass');
md5 -------------------------------- 0c983d1a624280812631c5389e60d48c
md5 パスワードでユーザーを作成します。
create user slashpass password 'md50c983d1a624280812631c5389e60d48c';
次の例では、アイドルセッションのタイムアウトを 120 秒に設定しながら、dbuser
という名前のユーザーを作成します。
CREATE USER dbuser password 'abcD1234' SESSION TIMEOUT 120;
次の例では、bob
という名前のユーザーを作成します。名前空間は myco_aad
です。これはサンプルのみです。コマンドを正常に実行するには、ID プロバイダーが登録されている必要があります。詳細については、「Amazon Redshift 用のネイティブ ID プロバイダー (IdP) フェデレーション」を参照してください。
CREATE USER myco_aad:bob EXTERNALID "ABC123" PASSWORD DISABLE;