皆さんこんばんは!
更新が久々となり申し訳ございません。ポンコツエンジニアのGONです。
台風15号が来ていますが皆さん大丈夫でしょうか。
今回の台風はかなり特殊なルートで日本に上陸しましたが、
茨木県から上陸するのは観測史上初めてだそうです。
12日も各地で大雨の予想が出ていますのでお気をつけください。
前回までに人生賭けた求人サービスを構築するために『PHP』『postgreSQL』『AWS』を選んだ理由や、
サービス名の由来、求職者様向け&企業様向け機能のご紹介、面談の採用確率UP方法、
『PHP』『postgreSQL』『AWS』の実機練習用サイトをご紹介させていただき、
さらに『SQL』『PHP』『AWS』の基本的な操作方法とセキュリティについて書かせていただきました。
今日は『postgreSQL』セキュリティ編第二弾として、
SQL文そのものではなく、権限の考え方について書かせていただきます。
RLS(Row-Level Security)=行単位のアクセス制御について
RLSはデータベースで「誰が、どの行(レコード)を見たり変更したりできるか」を制御する仕組みです。
以下の様にRLSを有効化し、
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
この様にポリシーを作成します。
CREATE POLICY "Users can see their own orders"
ON orders
FOR SELECT
USING (user_id = current_user_id());
ここで重要なのが USING です。
USING=「どの行を操作対象にできるか」を指定します。
例えば、
USING (user_id = current_user_id())
とすることで、
現在のユーザー自身の user_id と一致する行だけアクセス可能という意味になります。
つまり見てはいけない他人のデータを見えないようするための権限制御です。
SELECTだけではありません
RLSは読み取りだけでなく、操作ごとに設定できます。
・SELECT → どの行を読めるか
・INSERT → どの行を追加できるか
・UPDATE → どの行を変更できるか
・DELETE → どの行を削除できるか
CREATE POLICY "Users can update their own orders"
ON orders
FOR UPDATE
USING (user_id = current_user_id());
とすれば、自分の注文だけUPDATEできるというルールになります。
こうした制御を細かく入れていく事で、想定しない挙動を制御する事が出来ますね。
これらの権限設定を駆使しながら構築した求人サービスは以下になります。
企業の方、エンジニアの方に使っていただけると非常に喜びます。
▼求人マッチングサービス【ヴェテラン】
https://veteran-work.com/
「GRANTはどうなってるんだ!」
「簡単すぎて寝てしまう」
など質問やご意見いただけますとモチベーション爆上げします!
本日もお疲れ様でした。
明日も頑張りましょう。
皆さん台風にお気をつけて。