PostgreSQLで参照専用のユーザを作成する
とある業務システムのデータベースで、参照専用のユーザを作成したときのメモから。そんなわけで、今回の記事はやたら長い上に、興味のない人にはなんも面白くないんでヨロシク。
PostgreSQL(ぽすとぐれすきゅーえる: 発音例)は、BSDライセンスにより配布されているフリーの関係データベース管理システム (RDBMS) である。その名称はIngres の後継を意味する「Post-Ingres」に由来している。単純に「Postgres」や「ポスグレ」と呼称されることも多い。
Wikipedia - PostgreSQLより引用
まぁ、知ってる人にとっては今さら解説するまでもないオープンソースなデータベースの雄の一つである。
──あるのだけれども、恥ずかしながら今までOracle Database一本槍だったボクにとっては馴染みの無いお嬢さんなんである。ま、言い換えれば新しい出会い, 浮気のチャンスというわけ。(──後ろからモニタを覗き込んでる我が妻へ。これはあくまで比喩表現であって、PostgreSQLだのOracle Databaseだのという奇怪な名前の女の子がいるわけではないのだよ、ホントだよ?)
んで、以下はそのときのメモ。
ちなみに、ユーザ名だのオブジェクト名だのはダミーである。念のため。
プラットフォーム/環境
- OS
- Solaris 8
- Database
- PostgreSQL 7.2
- データベース名
- dummyDatabase
- 管理アカウント
- adminUser
- 作成するユーザ
- dummyUser
概要
参照専用のデータベースアカウントの作成。
手順
まずユーザ定義のためのSQLスクリプトを作成する。
わざわざ手間をかけてスクリプトを作成するのは次のような理由から。
- それ自体が作業記録・作業履歴になる
- 同じような作業をするときに、ちょっと書き換えて再利用できる
- 備忘録・メモ代わりにもなる
- 幾つかのコマンド/SQLを組み合わせてやる場合、書き出しておけば実行する前に確認できる
- コマンド間違えたり、パラメータ間違えたり、行きつ戻りつしがちなので、スクリプトにでもしとかないと手戻りが大きい (これはあんまり褒められた理由じゃないが)
まぁ、そんなトコである。
多分、データベースの種類どころかデータベースである/ないを問わず、システム管理者というイキモノの間では習性のように染み付いてる習慣だろうと思うけれども。
余談はさて置き。
今回、作成したのは次のようなスクリプトである。ここでは仮にファイル名をcr_user-dummyUser.sqlとしておく。
\c 'dummyDatabase' adminUser
drop user dummyUser;
create user dummyUser
with password 'dummyPasswd'
nocreatedb
nocreateuser;
grant SELECT on TABLE
dummyTable1,
dummyTable2,
dummyTable3
to dummyUser;
grant SELECT on
dummyView
to dummyUser;
\du dummyUser
\c 'dummyDatabase' dummyUser
\z
参照を許可するオブジェクトが、いちいちSQL分の中にべた書きなのは、ちょっと気に入らないけれども。
Tcl/Tk用のロードモジュールなんかもあるし、外部コマンドの実行なんかもできるんで、ちょっと知恵を使えばこういう保守性の悪いスクリプト書かなくて済むんだろうとは思う。──まぁ、その辺はおいおい勉強ってコトで。
スクリプトができたら、次のコマンドを実行する。
psql -a -f cr_user-dummyUser.sql 'dummyDatabase'
エラーが無ければ、実行結果は次のようになる。
\c 'dummyDatabase' adminUser
You are now connected to database dummyDatabase as user adminUser.
drop user dummyUser;
DROP USER
create user dummyUser
with password 'dummyUser'
nocreatedb
nocreateuser;
CREATE USER
grant SELECT on TABLE
dummyTable1,
dummyTable2,
dummyTable3
to dummyUser;
GRANT
grant SELECT on
dummyView
to dummyUser;
GRANT
\du dummyUser
List of database users
User name | User ID | Attributes
-----------+---------+------------
dummyUser | 101 |
(1 row)
\c 'dummyDatabase' dummyUser
You are now connected to database dummyDatabase as user dummyUser.
\z
Access privileges for database "dummyDatabase"
Table | Access privileges
---------------------------+-------------------------------
dummyTable1 | {=,adminUser=arwdRxt,dummyUser=r}
dummyTable2 | {=,adminUser=arwdRxt,dummyUser=r}
dummyTable3 | {=,adminUser=arwdRxt,dummyUser=r}
dummyView | {=,adminUser=arwdRxt,dummyUser=r}
(4 rows)
はい、おしまい。
アタリマエの話しだけど、実に簡単なもんである。お手軽お手軽。
まぁ、Oracleみたいにキメ細かい設定はできないけども、逆にそれを必要しない状況の方が大半だし。
参考資料
今回は次のサイトを参照させてもらった。

0 コメント:
コメントを投稿