
โ SET search_path = ''๋ฅผ ์ฌ์ฉํ๋ ์ด์ ?
CREATE FUNCTION public.notify_follow()
RETURNS TRIGGER
SECURITY DEFINER SET search_path = ''
LANGUAGE plpgsql
AS $$
BEGIN
INSERT INTO public.notifications (type, source_id, target_id)
VALUES ('follow', NEW.follower_id, NEW.following_id);
RETURN NEW;
END;
$$;
CREATE TRIGGER notify_follow_trigger
AFTER INSERT ON public.follows
FOR EACH ROW
EXECUTE FUNCTION public.notify_follow();
์ฐ์ SECURITY DEFINER๋ฅผ ์์ฑํ ์ด์ ๋ ๋ญ๊น?
INSERT INTO notifications ๊ถํ์ ์ฌ์ฉ์์๊ฒ ์ฃผ๊ณ ์ถ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ์ฉ์๊ฐ ๊ฐ์ง notifications์ ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง Trigger๊ฐ ์์ฑํ๋ notifications๋ ํ์ฉํ๊ณ ์ถ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ SECURITY DEFINER๋ฅผ ์ฌ์ฉํด์
Trigger ํจ์ ์์์๋ง Owner ๊ถํ์ผ๋ก notifications์ INSERT ํ๋๋ก ๋ง๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด SET search_path = ''์ ์ ํ์ํ๊ฑธ๊น?
SECURITY DEFINER๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณด์ ์ทจ์ฝ์ ์ด ์๊ธธ ์ ์๊ธฐ ๋๋ฌธ์, ๊ทธ ์ทจ์ฝ์ ์ ๋ง๊ธฐ ์ํด SET search_path = ''๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์ด๊ฒ ๋ฌด์จ ๋ง์ด๋๋ฉด
CREATE FUNCTION track_event(...)
LANGUAGE plpgsql;
๋ง์ฝ ์ด๋ฐ FUNCTION์ด ์์ ๋ ์ด FUNCTION์ ๊ธฐ๋ณธ์ ์ผ๋ก SECURITY๊ฐ INVOKER๋ค.
์ฌ์ฉ์ ๊ถํ์ผ๋ก ์คํ๋๋ค๋ ๋ป์ด๋ค.
๊ทธ๋์
INSERT INTO events ...
๊ฐ ์๋ชป๋ ํ ์ด๋ธ์ ์ฐธ์กฐํ๋๋ผ๋
ํผํด๋ ์ฌ์ฉ์๊ฐ ์๋ ๊ฐ์ง๊ณ ์๋ ๊ถํ ๋ฒ์ ์์์๋ง ๋ฐ์ํ๋ค.
์ฆ ํฐ ๋ณด์ ๋ฌธ์ ๊ฐ ๋์ง๋ ์๋๋ค.
ํ์ง๋ง
CREATE FUNCTION ...
SECURITY DEFINER
๊ฐ ๋๋ฉด Owner(postgres)๊ถํ์ผ๋ก ์คํ๋๋ค.
์ด ์ํ์์
UPDATE posts
์ฒ๋ผ schema๋ฅผ ์๋ตํ๋ฉด
PostgreSQL์ search_path๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉด์ posts๋ฅผ ์ฐพ๊ฒ ๋๋ค.
๋ง์ฝ ์ ์์ ์ผ๋ก ๋ค๋ฅธ schema์ posts๋ some_function() ๋ง๋ค์ด ๋๊ณ
search_path๋ฅผ ์ด์ฉํ๋๋ก ์ ๋ํ๋ฉด
Owner ๊ถํ์ผ๋ก ๊ทธ ๊ฐ์ฒด๋ฅผ ์คํํ๋ ๋ณด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๊ทธ๋์
SECURITY DEFINER
SET search_path = ''
์ด ๋ ๊ฐ๋ฅผ ๊ฐ์ด ์ฌ์ฉํ๋ค.
๊ทธ๋ฌ๋ฉด ์๋์ผ๋ก schema๋ฅผ ์ฐพ์ง ์๋๋ค.
์ฆ
UPDATE posts
๋ ์คํจํ๊ณ
๋ฐ๋์
UPDATE public.posts
์ฒ๋ผ schema๋ฅผ ๋ช ์ํด์ผ ํ๋ค.
โ ๊ฒฐ๋ก
SECURITY DEFINER
↓
Owner ๊ถํ์ผ๋ก ์คํ
↓
search_path ์
์ฉ ๊ฐ๋ฅ์ฑ ๋ฐ์
↓
SET search_path = ''๋ก ๋ฐฉ์ง
'๐งฉ SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| SQL - PostgreSQL - RLS(Row Level Security) (0) | 2026.07.15 |
|---|---|
| SQL - PostgreSQL - CREATE OR REPLACE๊ฐ ๊ฐ๋ฅํ ๋์ ๋ถ๊ฐ๋ฅํ ๋ (0) | 2026.07.13 |
| SQL - PostgreSQL - RETURNS TRIGGER๋ Trigger๋ฅผ returnํ๋ค๋ ๋ป์ผ๊น? (0) | 2026.07.13 |
| SQL - Drizzle Self Reference (0) | 2026.05.26 |
| SQL - Supabase & Drizzle (0) | 2026.05.22 |