Bảo vệ dữ liệu từng hàng với Supabase Row Level Security (RLS)
Trong thế giới phát triển ứng dụng hiện đại, việc bảo mật dữ liệu không chỉ dừng lại ở việc bảo vệ toàn bộ bảng mà còn phải kiểm soát quyền truy cập từng dòng dữ liệu cụ thể. Supabase Row Level Security (RLS) ra đời để giải quyết vấn đề này, mang đến một lớp bảo mật tinh tế và hiệu quả.
Tại sao cần Row Level Security?
Hãy tưởng tượng bạn xây dựng một ứng dụng quản lý nhân sự. Mỗi nhân viên chỉ nên xem được thông tin của chính mình, trong khi quản lý có thể xem dữ liệu của cả team. Nếu chỉ sử dụng authentication đơn thuần, bạn sẽ gặp khó khăn trong việc phân chia quyền truy cập chi tiết như vậy. Đây chính là lúc RLS phát huy sức mạnh.
Cách hoạt động của RLS trong Supabase
Supabase sử dụng PostgreSQL làm cơ sở dữ liệu, và RLS là tính năng có sẵn của PostgreSQL được Supabase tối ưu hóa. Khi RLS được bật, mọi truy vấn đều phải đi qua các policy (chính sách bảo mật) mà bạn định nghĩa.
Các thành phần chính của RLS
– Policies: Là các quy tắc xác định ai có thể truy cập dữ liệu nào
– Roles: Vai trò người dùng trong hệ thống
– Policies được gắn với bảng cụ thể
Thiết lập RLS cho bảng
Để bắt đầu, bạn cần bật RLS cho bảng:
ALTER TABLE users ENABLE ROW LEVEL SECURITY;Sau đó, tạo policy để kiểm soát truy cập:
CREATE POLICY "Users can view own profile"
ON users
FOR SELECT
USING (auth.uid() = id);