Pivotal Knowledge Base

フォローする

HAWQでPXFプロトコルを使用するためのユーザ権限設定方法

本記事では、pxfを使用したcreate文のサンプルで、pxfベースの外部表作成に必要な手順を掲載する。

HAWQ 1.1.x でのpxfプロトコルに対する権限付与はどのデータベースにも個別設定する必要である。そうしないと、あるユーザに対してpxf経由でのアクセス権限が付与されたデータベースにおいて、当該ユーザは外部表作成を実行できても、そのほかのユーザが実行すると "ERROR:  permission denied for external protocol pxf" といったエラーが表示されるであろう。

手順 1: ログイン権限を付与したロールの作成

gpadmin=# create role vtest with login;
NOTICE: resource queue required -- using default resource queue "pg_default"
CREATE ROLE

手順 2: 権限付与を希望するユーザのロールを手順 1 で作成したものに変更し、pxfプロトコルの許可を確認

メモ: この手順は単に、ユーザがpxfベースの表作成の権限を持っていない場合に、エラー表示により確認するものである。

gpadmin=#set role vtest;

gpadmin=> CREATE EXTERNAL TABLE aggregate_expenditure (employee_id int, expenditure_aggregate int) LOCATION ('pxf://phd11-nn.saturn.local:50070/tmp/expenditure/?Fragmenter=HdfsDataFragmenter&Accessor=LineReaderAccessor&Resolver=StringPassResolver') FORMAT 'TEXT' (DELIMITER E'\t');
ERROR: permission denied for external protocol pxf

手順 3: pxfプロトコルに関する権限を付与。ここでは、ユーザは gpadmin データベース内でのみ外部表を作られるようになる

gpadmin=# grant all on protocol pxf to "vtest";
GRANT

手順 4: ユーザに対するロール変更とpxfを利用した外部表の作成をテスト

gpadmin=# set role vtest;
SET
gpadmin=> CREATE EXTERNAL TABLE aggregate_expenditure (employee_id int, expenditure_aggregate int) LOCATION ('pxf://phd11-nn.saturn.local:50070/tmp/expenditure/?Fragmenter=HdfsDataFragmenter&Accessor=LineReaderAccessor&Resolver=StringPassResolver') FORMAT 'TEXT' (DELIMITER E'\t');
CREATE EXTERNAL TABLE

手順 5: データベースを例えば template1 に変更すると下記のようなエラーが現れるので、再度 vtest ロールにpxfプロトコル権限を付与する

gpadmin=> \c temlate1 gpadmin=# set role vtest; template1=> CREATE EXTERNAL TABLE aaadfadddafasadfaggregate_expenditure (employee_id int, expenditure_aggregate int) LOCATION ('pxf://phd11-nn.saturn.local:50070/tmp/expenditure/?Fragmenter=HdfsDataFragmenter&Accessor=LineReaderAccessor&Resolver=StringPassResolver') FORMAT 'TEXT' (DELIMITER E'\t');
ERROR: permission denied for external protocol pxf
SET

コメント

Powered by Zendesk