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=arwdはphpuserに与えられている権限を下記の記号で表しています。
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編記事一覧



