皆さんこんにちは!
本日未明に関東で大きめの地震がありましたが皆さん大丈夫でしょうか。
私も飛び起きましたがTVがグラグラしてて慌てて支えました。
最近地震多いので備蓄にも気を配って参りましょう!
さて、前回までに人生賭けた求人サービスを構築するために『PHP』『postgreSQL』『AWS』を選んだ理由や、
サービス名の由来、求職者様向け&企業様向け機能のご紹介、面談の採用確率UP方法、
『PHP』『postgreSQL』『AWS』の実機練習用サイトをご紹介させていただき、
さらに『SQL』『PHP』『AWS』の基本的な操作方法とセキュリティについて書かせていただきました。
嬉しい事に@lovekapibarasan827さんからpostgreSQLのセキュリティに興味があるとのコメントいただきましたので、
今日は『postgreSQL』セキュリティ編第三段として、
『GRANT』について書いて行きたいと思います。
GRANTの基本
基本形は、
GRANT 権限 ON 対象 TO ユーザー;
です。
例えば、
GRANT SELECT ON users TO appuser;
なら、
appuser に users テーブルの参照権限(SELECT)を与える
という意味です。
なぜGRANTがセキュリティで重要なのか
例えば、WebアプリケーションがPostgreSQLに接続するとします。
悪い例として、アプリ用ユーザーに何でもできる権限を与えてしまうと、
Webアプリ
↓
appuser
↓
何でもできる
↓
大量のデータ削除
テーブル削除
ユーザー作成
etc...
という状態になる可能性があります。
一方、必要な権限だけを与えれば、
Webアプリ
↓
appuser
↓
SELECT
INSERT
UPDATE
↓
必要な操作だけ可能
とできます。
これが 最小権限の原則(Least Privilege) です。
GRANTとREVOKE
GRANT が「権限を与える」なのに対して、REVOKE は「権限を取り消す」です。
REVOKE DELETE ON users FROM appuser;
これで appuser の users に対する DELETE 権限を取り消せます。
つまり、
GRANT → 権限を与える
REVOKE → 権限を取り上げる
です。
テーブル以外にもGRANTできる
GRANTはテーブルだけではありません。
例えばデータベース:
GRANT CONNECT ON DATABASE mydb TO appuser;
スキーマ:
GRANT USAGE ON SCHEMA public TO appuser;
テーブル:
GRANT SELECT ON TABLE users TO appuser;
シーケンス:
GRANT USAGE, SELECT ON SEQUENCE users_id_seq TO appuser;
というように、データベース → スキーマ → テーブル → シーケンスなど、それぞれに権限を設定できます。
適切に権限設定する事でデータを想定の範囲内で操作する事が出来ます。
DBを設計するうえで必要な考え方ですね。
今回は「GRANT」について書かせていただきました。
様々な権限を考慮しながら構築した求人サービスは以下になります。
企業の方、エンジニアの方に使っていただけると非常に喜びます。
▼求人マッチングサービス【ヴェテラン】
https://veteran-work.com/
「セキュリティをもっと深く!」
「JIONはどうなったんだ!!」
など質問やご意見いただけますとモチベーション爆上げします!
それよりもいいね『♡』してもらえると勇気づけられます笑
本日もお疲れ様でした。
明日も頑張りましょう。