[pgsql-jp: 25643] 外部キーのリファレンス先のテーブル所有者

Jun Kitamura kitamura @ zoozee.jp
2002年 4月 22日 (月) 07:03:33 JST


北村@zoozee (旧)アシェットです。独立開業しました。

PostgreSQL のバージョンは、7.0.3、7.1.3 です。
オーナー(A) のテーブル t1 に対して、ユーザ(B) が 外部参照する t2 を作成し
ようとすると、t1 のオーナーでは無いので作れない、とエラーになります。

テーブルに対するパーミッションは、松本豊 さん投稿の 「19392 外部キーのリ
ファレンス先の permission」から始まるスレッドで理解できます。7.1.3 で修正
されているのも確認しました。

t1 が他人のテーブルで、その内容に伴い自分のテーブル(t2)が DELETE されたり
UPDATE されたりするのを「承知」で作成したいのですが、ムリなようです。
オーナー(A)の t1 に、UPDATE、DELETE とも追従したいテーブル t2 をユーザ
(B)が作れない、というのはどうしてでしょうか?
7.0.3 でも、7.1.3 でも同じ動作です。

ムリなのはしょうがないのですが、この仕様、皆さんは納得できますか?

(例えば管理者の作成するプロジェクトマスタに従って、自分の受け持ちの仕事を
格納するタスクテーブルを作成したい、その際、プロジェクトが消失したら、自
分のタスクテーブルから勝手にタスクが消えて欲しい、など用途はあると思うの
ですが。まぁ、その時は管理者が各人用のタスクテーブルを作成して各人向けの
権限を与える、で問題は解決なのですが)。

(以下実行結果)
(ちなみに、ユーザ A が grant all on t1 to public しても、ダメでした。t2 
作成時にオーナーが違うというエラーが出ているので、ダメだろうと思ったので
すが、やっぱりダメでした。)

-- ユーザ A で実行
psql -U userA test

create table t1(
 a int4,
  primary key(a),
 b int4
);
NOTICE:  CREATE TABLE/PRIMARY KEY will create implicit index 't1_pkey' for table
 't1'
CREATE

-- ユーザ B になって、t2 を作成
psql -U userB test

create table t2 (
 a int4,
  CONSTRAINT t2_a
   FOREIGN KEY(a)
   REFERENCES t1(a)
   ON UPDATE CASCADE
   ON DELETE CASCADE,
 c int4
);
NOTICE:  CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
ERROR:  t1: Must be table owner.





pgsql-jp メーリングリストの案内