[pgsql-jp: 35809] Re: create table権限の取り上げ

ISHIDA Akio iakio @ mono-space.net
2005年 8月 8日 (月) 23:20:34 JST


こんにちは。石田@苫小牧市です。

Yukitaka Ohmura wrote:
> 大村と申します。
> 
> データベースに対してselectやinsertなどは実行できるが、
> テーブルの作成はできないユーザを作りたいと考えています。
> このユーザはWebアプリからの接続用に使用し、
> テーブル作成などのDB管理は別のユーザが行うようにするためです。
> 
> 以下のように権限の設定を行ったのですが、
> web用ユーザ(webuser)がcreate tableを実行できてしまいます。
> どのように権限を設定したらよいのでしょうか?
> RedHat Enterprise Linux 3.0上の postgresql 7.4.8 で確認しています。

データベースに対するCREATE権限は、そのデータベースに対して、
スキーマを作成できるかどうかの権限です。
テーブル等のデータベースオブジェクトの作成を許可するか
どうかは、

GRANT CREATE ON SCHEMA schemaname TO ...

のようにスキーマに対するCREATE権限で設定します。

http://www.postgresql.jp/document/pg746doc/html/sql-grant.html

> 
> % psql -U postgres template1
> template1=# CREATE user webuser;
> CREATE USER
> template1=# CREATE DATABASE webdb;
> CREATE DATABASE
> template1=# GRANT all on database webdb to webuser;
> GRANT
> template1=# REVOKE CREATE on DATABASE webdb from webuser;
> REVOKE
> template1=# \q
> 
> % psql -U webuser webdb
> webdb=> CREATE TABLE newtbl(id int, nm char(4));
> CREATE TABLE
> webdb=> \d
>          List of relations
>  Schema |  Name  | Type  |  Owner
> --------+--------+-------+---------
>  public | newtbl | table | webuser
> (1 row)
> 
> webdb=> select datname, datdba, datacl from pg_database;
>   datname  | datdba |                         datacl
> -----------+--------+---------------------------------------------------------
>  postgres  |      1 | {=T/postgres,postgres=C*T*/postgres}
>  template1 |      1 | {postgres=C*T*/postgres}
>  template0 |      1 | {postgres=C*T*/postgres}
>  webdb     |      1 | {=T/postgres,postgres=C*T*/postgres,webuser=T/postgres}
> (4 rows)
> 
> pg_databaseに設定がない場合のデフォルト動作を指定する方法があるのでしょうか?
> 
> 
> 大村幸敬 (Yukitaka Ohmura)
> (株) インテック
> ビジネスソリューション事業本部
> CRMソリューション第一部 Linux推進チーム
> Phone: 045-451-2410  Fax: 045-451-2357
> E-mail: oomura_yukitaka @ intec.co.jp
> 
> 




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