Supabase Row Level Security (RLS): Bảo mật dữ liệu từng hàng
Trong thế giới ứng dụng hiện đại, bảo mật dữ liệu không chỉ là một tính năng – đó là một yêu cầu bắt buộc. Khi xây dựng các ứng dụng web hoặc di động, chúng ta thường phải đối mặt với tình huống: làm thế nào để đảm bảo người dùng chỉ có thể truy cập vào dữ liệu mà họ được phép xem? Đây chính là lúc Row Level Security (RLS) của Supabase phát huy tác dụng.
1. Row Level Security (RLS) là gì?
Row Level Security là một tính năng bảo mật cho phép bạn kiểm soát quyền truy cập dữ liệu ở cấp độ từng hàng trong bảng. Thay vì cho phép người dùng truy cập toàn bộ bảng, RLS đảm bảo rằng mỗi người dùng chỉ có thể thấy những hàng dữ liệu mà họ được phép xem.
Ví dụ, trong một ứng dụng quản lý nhân sự, nhân viên chỉ nên thấy thông tin của chính họ, trong khi quản lý có thể thấy thông tin của cả team. RLS giúp thực hiện điều này một cách tự động và an toàn.
2. Tại sao cần sử dụng RLS?
Nếu không có RLS, bạn sẽ phải xử lý bảo mật ở tầng ứng dụng, điều này dẫn đến:
– Hiệu năng kém: Mỗi lần truy vấn, bạn phải lọc dữ liệu ở phía client.
– Rủi ro bảo mật cao: Nếu ai đó vượt qua được tầng ứng dụng, họ có thể truy cập toàn bộ dữ liệu.
– Code phức tạp: Bạn phải viết logic bảo mật lặp đi lặp lại ở nhiều nơi.
Với RLS, bảo mật được xử lý trực tiếp ở cơ sở dữ liệu, giúp code sạch hơn, an toàn hơn và hiệu năng tốt hơn.
3. Cách hoạt động của RLS trong Supabase
Supabase sử dụng PostgreSQL làm cơ sở dữ liệu, và RLS được hỗ trợ một cách bản địa. Khi bạn bật RLS cho một bảng, mặc định mọi truy vấn sẽ bị chặn. Bạn cần tạo các policy (chính sách) để định nghĩa ai được truy cập dữ liệu nào.
Các bước cơ bản để thiết lập RLS:
1. Bật RLS cho bảng:
ALTER TABLE users ENABLE ROW LEVEL SECURITY;2. Tạo policy:
CREATE POLICY "Users can view own profile"
ON users
FOR SELECT
USING (auth.uid() = id);