- PR -

postgreSQL8でpublic権限を一気に剥奪する方法・・・

1
投稿者投稿内容
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2008-02-04 15:32
 お世話になっております。
CentOS5+PostgreSQL8を使用しております。

データベース(testdb)内の全テーブルにpublic権限が割り当てられております。
テーブルがたくさんありますので、一気にpublic権限を全テーブルから削除する方法があればご教授しただければと思い、投稿させていただきました。

何卒ご教授賜りますようお願い申し上げます。
上総
大ベテラン
会議室デビュー日: 2006/06/22
投稿数: 107
投稿日時: 2008-02-04 19:22
引用:

スレ主さんの書き込み(2008-02-04 15:32)より
データベース(testdb)内の全テーブルにpublic権限が割り当てられております。
テーブルがたくさんありますので、一気にpublic権限を全テーブルから削除する方法があればご教授しただければと思い、投稿させていただきました。



まずデータベースへの権限は、ユーザーに割り当てられるものであって、データベース
やテーブルに付くというものではありません。

で、権限の剥奪ですがPostgreSQLのスーパーユーザーでログインを行った後に、
下記のコマンドを実行するとテーブルへの権限が剥奪されます。

※厳密にはオブジェクトはテーブルだけでは無いので、ビュー・関数等への権限も
 剥奪するのが良いかも知れません。

コード:

REVOKE ALL PRIVILEGES
ON TABLE テーブル名
FROM ユーザー名 又は グループ名;



テーブルが幾つあるか分かりませんが、テーブルが複数ある場合は上記のコマンドを
テーブルの数だけ実行してください。

面倒であれば下記コードを実行されると、スキーマ名・テーブル名の一覧を作成します
ので、テキスト出力後に権限を付加する(残す)ものを(テキストから)消した後で、
実行するとよいかと。
(ユーザー名とオブジェクト所有者名は自分で指定して下さい。)

コード:

SELECT ALL
'REVOKE ALL PRIVILEGES' || CHR ( 10 ) ||
'ON TABLE ' || schemaname || '.' || tablename || CHR ( 10 ) ||
'FROM ' || 'ユーザー名' || ';' || CHR ( 10 )
FROM pg_tables
WHERE tableowner IN
(
'オブジェクト所有者名',
・・・
)



PostgreSQLの詳細なバージョンが分からないので、[REVOKE ROLE]が使用出来るかは
分かりませんので上記の方法が妥当かと思います。
http://old.postgresql.jp/document/pg800doc/html/sql-commands.html

只、今回のスレでは全テーブルから権限の削除とありましたので、PostgreSQLの設定
ファイルである[pg_hba.conf]を修正し、該当ユーザーのログインを許可しない方法も
あるかと思います。
(全テーブルへの権限の剥奪=SELECT文もNG=データベースへ接続させない)

[ メッセージ編集済み 編集者: 上総 編集日時 2008-02-04 19:26 ]
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2008-02-06 08:16
 ご回答ありがとうございます。
2つも方法をご提示くださいまして感謝しております。

 解決いたしました。
今後ともよろしくお願い申し上げます。
1

スキルアップ/キャリアアップ(JOB@IT)