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編記事一覧