Bảo vệ dữ liệu từng hàng với Row Level Security trong Supabase
Khi ứng dụng của bạn phát triển và lượng dữ liệu tăng lên, việc đảm bảo mỗi người dùng chỉ nhìn thấy những thông tin họ được phép truy cập trở thành ưu tiên hàng đầu. Supabase, với nền tảng PostgreSQL mạnh mẽ, cung cấp một tính năng gọi là Row Level Security (RLS) giúp bạn kiểm soát truy cập dữ liệu ngay tại cơ sở dữ liệu. Bài viết này sẽ hướng dẫn bạn cách sử dụng RLS để bảo vệ dữ liệu một cách hiệu quả và an toàn.
Row Level Security là gì?
Row Level Security là một tính năng của PostgreSQL cho phép bạn định nghĩa các quy tắc (policy) để kiểm soát ai có thể đọc, chèn, cập nhật hoặc xóa từng hàng trong bảng. Thay vì dựa vào ứng dụng để lọc dữ liệu, RLS đảm bảo rằng chỉ những hàng hợp lệ mới được truy cập, ngay cả khi ai đó cố tình bỏ qua lớp bảo mật ở ứng dụng.
Bật RLS cho bảng
Trước khi tạo policy, bạn cần bật RLS cho bảng:
ALTER TABLE your_table ENABLE ROW LEVEL SECURITY;Khi RLS được bật, mọi truy vấn vào bảng sẽ bị chặn trừ khi có policy cho phép. Điều này đảm bảo không có hàng nào bị lộ ngoài ý muốn.
Tạo policy cho từng hành động
1. Policy cho phép người dùng xem dữ liệu của chính họ
Giả sử bạn có bảng profiles với cột user_id tham chiếu đến auth.users. Bạn muốn mỗi người dùng chỉ thấy profile của mình:
CREATE POLICY "Users can view own profiles" ON profiles
FOR SELECT USING (auth.uid() = user_id);