2010年3月24日

[pgsql-jp: 40236] Re:PL/pgSQLのソースコードを見せたくない

有難うございます。できました。

とりあえずこの方法でやってみたいと思います。

正式な方法があればよいのですが、
Oracleのwrapのような機能はないみたいですね。



話しは少し変わりますが、
今までスーパーユーザでしか使っていなかったので、
今回スーパーユーザでないロールを作成したのですが、

必ずテーブル単位でしか権限を与えれないのでしょうか?
全テーブルのSELECT権限や特定のスキーマのテーブルのSELECT権限を特定のユーザに
与えることはできないのでしょうか?

On Tue, 23 Mar 2010 18:26:00 +0900
Takahiro Itagaki <itagaki.takahiro@xxxxx> wrote:

>
> 恒住 武男 <tsunezumi@xxxxx> wrote:
>
> > データはODBCなど使って見せたいのですが、
> > PL/pgSQLのソースコードだけを見せたくない場合
> > 方法はありますか?
>
> 正式な方法は良くわかりませんが、pg_proc.prosrc の SELECT 権を
> REVOKE すると、実行はできてもコードは見えないという状態になりました。
> (もちろん、スーパーユーザは依然として閲覧可能です。)
>
> =# REVOKE SELECT ON pg_proc FROM PUBLIC ;
>
> => SELECT test();
> test
> ------
> foo
> (1 行)
>
> => SELECT proname, prosrc FROM pg_proc WHERE proname = 'test';
> ERROR: permission denied for relation pg_proc
>
> ただ、これだと \df (関数一覧)も実行できなくなって不便なので、
> prosrc, probin 以外の列のみ追加で参照権限を与えると、(v8.4 以降必須)
> 一覧は見れても、コードにはアクセスできない状態にすることができました。
>
> =# GRANT SELECT (oid, proname, (中略), proacl) ON pg_proc TO PUBLIC;
>
> => \df
> 関数一覧
> スキーマ | 名前 | 結果のデータ型 | 引数のデータ型 | 型
> ----------+------+----------------+----------------+----------------
> public | test | text | | normal(通常)
> (1 行)
>
> => \df+ test
> ERROR: permission denied for relation pg_proc
>
> => SELECT proname, prosrc FROM pg_proc WHERE proname = 'test';
> ERROR: permission denied for relation pg_proc
>
> 繰り返しになりますが、私も始めてこのような権限設定を試してみたので、
> どこかに穴があったり、逆に機能が動作しなくなってしまうことがあるかもしれません。
> お気づきの点や代案ありましたらツッコミしてください。
>
> ------------------------------------------------------------
> NTT オープンソース ソフトウェア センタ
> 板垣貴裕 <itagaki.takahiro@xxxxx>
>
>

投稿者 xml-rpc : 2010年3月24日 14:14
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/94508
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。