こんにちは、TKです。
今回はRedshiftのユーザ権限についてご紹介したいと思います。
Redshiftの権限概要
RedshiftはPostgreSQLを基にしているエンジンのため、PostgreSQLの一部構文を使うことができます。
GrantやALTERコマンドが対象になります。
ただし、ALTER ROLEなどRedshiftで使えないパターンも有るので注意しましょう。
詳しい権限の内容についての説明はこちらのURLを参考にしてください。
http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_CREATE_USER.html
http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/t_user_group_examples.html
ユーザの作成と権限の設定
それでは実際にユーザを作成して権限を設定します。
ユーザ作成及び、権限設定はスーパーユーザで行う必要があります。
また、権限を付加するテーブルまたはスキーマが存在するデータベースにログインしましょう。
ログイン後次のコマンドでユーザを作成します。
1 |
create user testuser with password 'testpassword'; |
ユーザを作成後、ユーザグループを作成します。
1 |
create group testgroup; |
グループにユーザを紐付けます。
1 |
alter group testgroup add user testuser; |
既にグループが存在する場合は紐付けを同時に行いながらユーザ作成を行えます。
1 |
create user testuser with password 'testpassword' in group testgroup; |
それでは権限を設定してみます。
今回はスキーマ’testschema’以下に存在する全てのテーブルにSELECT権限を設定してみます。
testuserが所属するtestgroupに紐付けることでグループに所属している全てのユーザが権限を得ます。
ユーザに個別に設定する場合はgroupをuserに変更します。
1 |
grant select on all table in schema testschema to group testgroup; |
テーブルごとに細かく設定したい場合は以下のコマンドになります。
1 |
grant select on table testtable to testuser; |
権限確認する場合は次のコマンドを入力します。
1 |
select has_table_privilege('testuser', 'testtable', 'select'); |
括弧の中、左からユーザ名、テーブル名、確認する権限の順に入力します。
結果として”t”、または”true”と返ってきた場合、権限があることを示しています。
1 2 3 4 |
testdb=> select has_table_privilege('testuser', 'testtable', 'select'); has_table_privilege --------------------- t |
以上の内容ではスキーマに存在する既存テーブルに対して権限を振ることができました。
しかし、別のユーザがテーブルを作成した場合、新しいテーブルには他のユーザの権限が存在しません。
テーブルを作成するたび権限を付け直していては手間がかかります。
今回の場合、テーブルを作成する側のユーザに対して、テーブル作成時に特定ユーザに権限を発行する設定を行います。
1 |
alter default privileges for user adminuser grant all on tables to group testuser; |
これで新たにテーブル作成した場合に、特定ユーザに自動的に権限が発行されます。
いかがでしたでしょうか。
今回はRedshiftの権限設定を説明しました。
Redshiftの権限設定についてお役に立てば幸いです。
次回をお楽しみに!