データベース/MySQL、PostgreSQL、SQLite

ユーザーの作成と権限の付与

WEBからアクセスするユーザーを作成し、アクセス権限を付与する手順について解説します。

執筆者:堀江 美彦

1. WEBからアクセスするユーザーの作成とアクセス権限の付与

DBの初期化 initdbを行った際に作成されたユーザーAdministratorには
全権限が付与されていますので、WEB経由でアクセスする際にセキュリティ上の
問題があります。

下記の例ではphpuserというユーザーを作成し、テストで使うtab1表に対し
必要な権限のみ付与しています。

1.1 ユーザーの作成

1.1.1 createuserの指定

Cygwinを起動し、createuserとタイプします。
createuser

1.1.2 ユーザー名の指定

ユーザー名をタイプします。例ではphpuserを指定しています。
Enter name of user to add: phpuser

1.1.3 データベースを作成する権限の付与

「新規ユーザーにデータベースを作成する権限を与えるか?」と質問されるので、Yes,Noで返答します。
例ではYesを指定しています。
Shall the new user be allowed to create databases? (y/n) y

1.1.4 ユーザーを作成する権限の付与

「新規ユーザーにユーザーを作成する権限を与えるか?」と質問されるので、Yes,Noで返答します。
例ではNoを指定しています。
Shall the new user be allowed to create more new users? (y/n) n

1.1.5 CREATE USERの確認

CREATE USERと表示され、新規ユーザーが作成されました。

CREATE USER


1.2 表に対するアクセス権限の付与

1.2.1 psqlの起動

psqlを起動します。

$ psql test
Welcome to psql 7.3.1, the PostgreSQL interactive terminal.

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


1.2.2 GRANTの実行

phpuserにtab1表に対し
SELECT --- 選択
INSERT --- 行の挿入
UPDATE --- 更新
DELETE --- 行の削除
の権限を付与します。

下記のようにGRANT文を実行します。
grant select,insert,update,delete on tab1 to phpuser;

1.2.3 GRANTの確認

GRANTと表示され、権限が付与されました。

GRANT


grantの文法

grant 付与する権限 on 表名 to ユーザー名

付与する権限が複数ある場合はカンマで区切る。allと指定した場合は全権限


1.2.4 アクセス権限の確認

\zとタイプするとユーザーに付与されているアクセス権限を確認できます。


test=# \z
          Access privileges for database "test"
 Schema | Table |           Access privileges
--------+-------+----------------------------------------
 public | tab1  | {=,Administrator=arwdRxt,phpuser=arwd}
 public | tab2  |
(2 rows)



phpuser=arwdphpuserに与えられている権限を下記の記号で表しています。

a -- INSERT
r -- SELECT
w -- UPDATE
d -- DELETE
R -- RULE
x -- REFERENCES
t -- TRIGGER

1.2.5 psqlの終了

\qとタイプしpsqlを終了します。

\q


ユーザーを削除する場合

ユーザーを削除するには下記のようにdropuser ユーザー名
とタイプします。
dropuser phpuser

下記のように表示されユーザーが削除されます。
DROP USER


アクセス権限を奪取する場合

下記のようにREVOKE文を実行します。
revoke insert,update,delete on tab1 from phpuser;

REVOKEと表示され、権限が奪取されました。

REVOKE

\zとタイプするとユーザーに付与されているアクセス権限を確認できます。


test=# \z
        Access privileges for database "test"
 Schema | Table |          Access privileges
--------+-------+-------------------------------------
 public | tab1  | {=,Administrator=arwdRxt,phpuser=r}
 public | tab2  |
(2 rows)



REVOKEの文法

REVOKE 奪取する権限 on 表名 from ユーザー名

奪取する権限が複数ある場合はカンマで区切る。allと指定した場合は全権限


Apache + PHP + PostgreSQL編記事一覧
【編集部おすすめの購入サイト】
楽天市場でデータベース関連の書籍を見るAmazon でデータベース関連の書籍を見る
※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます