PostgreSQL8でpostgresユーザ以外のユーザにcreatedbを実行させる方法

postgresユーザ以外のユーザにcreatedbを実行させようとした場合、role(ロール)の設定を行っていないとエラーになり、createdbに失敗する。成功させるには、role(ロール)の設定を行えばよい。

《例》
# /usr/local/postgresql8/bin/createdb -U nobuneko -E EUC_JP neko_database
FATAL: role "nobuneko" does not exist
createdb: could not connect to database postgres: FATAL: role "nobuneko" does not exist

postgresユーザでpsqlを使用し、role(ロール)の設定状況を確認することにする。

# /usr/local/postgresql8/bin/psql -U postgres
Welcome to psql 8.3.14, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

postgres=# select rolname from pg_roles;
rolname
----------
postgres
(1 row)

現在、role(ロール)が存在するのはpostgresのみであることが確認できたので、新しくロールを作成することにする。

postgres=# create role nobuneko;
CREATE ROLE

createdbを実行。...しかし、これでは失敗する。

# /usr/local/postgresql8/bin/createdb -U nobuneko -E EUC_JP neko_database
FATAL: role "nobuneko" is not permitted to log in
createdb: could not connect to database postgres: FATAL: role "nobuneko" is not permitted to log in

エラーメッセージが変わった。
「role "nobuneko" is not permitted to log in」というエラーメッセージより、role「nobuneko」がデータベースにログインすることが許可されていないために、createdbが使用できないことが分かる。
そこで、role「nobuneko」にログインの権限を与えることにする。

postgres=# alter role nobuneko login;
ALTER ROLE

createdbを実行。...しかし、これでは失敗する。

# /usr/local/postgresql8/bin/createdb -U nobuneko -E EUC_JP neko_database
ERROR: permission denied to create database
STATEMENT: CREATE DATABASE neko_database ENCODING 'EUC_JP';

createdb: database creation failed: ERROR: permission denied to create database

エラーメッセージが変わった。
データベースにはログインできるようになったが、データベース作成の権限がないからcreatedbに失敗するようだ。
そこで、role「nobuneko」にcreatedbの権限を与えることにする。

postgres=# alter role nobuneko createdb;
ALTER ROLE

createdbを実行。

# /usr/local/postgresql8/bin/createdb -U nobuneko -E EUC_JP neko_database
# /usr/local/postgresql8/bin/psql -U postgres
Welcome to psql 8.3.14, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

postgres=# \l
List of databases
Name | Owner | Encoding
---------------+----------+----------
neko_database | nobuneko | EUC_JP
postgres | postgres | EUC_JP
template0 | postgres | EUC_JP
template1 | postgres | EUC_JP
(4 rows)

postgres=#

データベース一覧を見ると、データベースを新しく作成することに成功したことが分かる。

postgresユーザ以外のユーザにcreatedbを実行させるには、少なくとも以下の作業が必要になるということが分かった。

(1)ロールを作成する
postgres=# create role nobuneko;
CREATE ROLE

(2)ロールにログイン権限を付与する
postgres=# alter role nobuneko login;
ALTER ROLE

(3)ロールにcreatedbの権限を付与する
postgres=# alter role nobuneko createdb;
ALTER ROLE

  
 

前へ

Apacheのconfigure時のエラー「configure: error: no acceptable C compiler found in $PATH」の原因と解決方法

次へ

昨日の徹夜のせいで腰が痛い