Trang này được dịch bởi Cloud Translation API.
Switch to English

Hiểu các quy tắc cơ sở dữ liệu thời gian thực của Firebase

Quy tắc bảo mật cơ sở dữ liệu thời gian thực của Firebase xác định ai có quyền đọc và ghi vào cơ sở dữ liệu của bạn, cách dữ liệu của bạn được cấu trúc và những chỉ mục nào tồn tại. Các quy tắc này tồn tại trên máy chủ Firebase và được thực thi tự động mọi lúc. Mọi yêu cầu đọc và ghi sẽ chỉ được hoàn thành nếu các quy tắc của bạn cho phép. Theo mặc định, các quy tắc của bạn không cho phép bất kỳ ai truy cập vào cơ sở dữ liệu của bạn. Điều này là để bảo vệ cơ sở dữ liệu của bạn khỏi bị lạm dụng cho đến khi bạn có thời gian để tùy chỉnh các quy tắc của mình hoặc thiết lập xác thực.

Quy tắc bảo mật cơ sở dữ liệu thời gian thực có cú pháp giống JavaScript và có bốn loại:

Các loại quy tắc
.đọc Mô tả nếu và khi nào người dùng được phép đọc dữ liệu.
.write Mô tả nếu và khi nào dữ liệu được phép ghi.
.validate Xác định giá trị được định dạng đúng sẽ trông như thế nào, cho dù nó có các thuộc tính con và kiểu dữ liệu.
.indexOn Chỉ định một con để lập chỉ mục để hỗ trợ đặt hàng và truy vấn.

Tổng quan về bảo mật Cơ sở dữ liệu thời gian thực

Cơ sở dữ liệu thời gian thực của Firebase cung cấp một bộ công cụ đầy đủ để quản lý bảo mật cho ứng dụng của bạn. Những công cụ này giúp bạn dễ dàng xác thực người dùng, thực thi quyền của người dùng và xác thực đầu vào.

Các ứng dụng do Firebase cung cấp chạy nhiều mã phía máy khách hơn các ứng dụng có nhiều ngăn xếp công nghệ khác. Do đó, cách chúng tôi tiếp cận bảo mật có thể hơi khác một chút so với cách bạn đã từng làm.

Xác thực

Bước đầu tiên phổ biến trong việc bảo mật ứng dụng của bạn là xác định người dùng của bạn. Quá trình này được gọi là xác thực . Bạn có thể sử dụng Xác thực Firebase để yêu cầu người dùng đăng nhập vào ứng dụng của bạn. Xác thực Firebase bao gồm hỗ trợ thả vào cho các phương pháp xác thực phổ biến như Google và Facebook, cũng như đăng nhập bằng email và mật khẩu, đăng nhập ẩn danh, v.v.

Danh tính người dùng là một khái niệm bảo mật quan trọng. Những người dùng khác nhau có dữ liệu khác nhau và đôi khi họ có các khả năng khác nhau. Ví dụ: trong một ứng dụng trò chuyện, mỗi tin nhắn được liên kết với người dùng đã tạo nó. Người dùng cũng có thể xóa tin nhắn của chính họ, nhưng không xóa được tin nhắn do người dùng khác đăng.

Ủy quyền

Xác định người dùng của bạn chỉ là một phần của bảo mật. Khi bạn biết họ là ai, bạn cần một cách để kiểm soát quyền truy cập của họ vào dữ liệu trong cơ sở dữ liệu của bạn. Quy tắc Bảo mật Cơ sở dữ liệu Thời gian thực cho phép bạn kiểm soát quyền truy cập cho từng người dùng. Ví dụ: đây là một tập hợp các quy tắc bảo mật cho phép mọi người đọc đường dẫn /foo/ , nhưng không ai ghi vào đó:

{
  "rules": {
    "foo": {
      ".read": true,
      ".write": false
    }
  }
}

.read quy tắc .read.write phân tầng, do đó, bộ quy tắc này cấp quyền truy cập đọc vào bất kỳ dữ liệu nào tại đường dẫn /foo/ cũng như bất kỳ đường dẫn sâu hơn nào như /foo/bar/baz . Lưu ý rằng .read.write quy tắc nông trong override cơ sở dữ liệu quy định sâu hơn, vì vậy đọc truy cập vào /foo/bar/baz vẫn sẽ được cấp trong ví dụ này ngay cả khi một quy tắc tại đường dẫn /foo/bar/baz đánh giá false.

Quy tắc bảo mật cơ sở dữ liệu thời gian thực bao gồm các biến và chức năng tích hợp cho phép bạn tham chiếu đến các đường dẫn khác, dấu thời gian phía máy chủ, thông tin xác thực, v.v. Dưới đây là ví dụ về quy tắc cấp quyền ghi cho người dùng đã xác thực vào /users/<uid>/ , trong đó <uid> là ID của người dùng có được thông qua Xác thực Firebase.

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

Xác nhận dữ liệu

Cơ sở dữ liệu thời gian thực của Firebase là không có cơ sở dữ liệu. Điều này giúp bạn dễ dàng thay đổi mọi thứ khi phát triển, nhưng khi ứng dụng của bạn đã sẵn sàng để phân phối, điều quan trọng là dữ liệu phải nhất quán. Ngôn ngữ quy tắc bao gồm một .validate quy tắc cho phép bạn áp dụng logic xác nhận sử dụng các từ ngữ được sử dụng cho .read.write quy tắc. Sự khác biệt duy nhất là các quy tắc xác thực không phân tầng , vì vậy tất cả các quy tắc xác thực có liên quan phải đánh giá thành true để cho phép ghi.

Quy tắc này thực thi rằng dữ liệu được ghi vào /foo/ phải là một chuỗi nhỏ hơn 100 ký tự:

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

Validation quy tắc có quyền truy cập vào tất cả các giống built-in chức năng và các biến như .read.write quy tắc. Bạn có thể sử dụng các quy tắc này để tạo các quy tắc xác thực nhận biết dữ liệu ở những nơi khác trong cơ sở dữ liệu, danh tính người dùng, thời gian máy chủ của bạn, v.v.

Xác định chỉ mục cơ sở dữ liệu

Cơ sở dữ liệu thời gian thực của Firebase cho phép đặt hàng và truy vấn dữ liệu. Đối với kích thước dữ liệu nhỏ, cơ sở dữ liệu hỗ trợ truy vấn đặc biệt, do đó, chỉ mục thường không được yêu cầu trong quá trình phát triển. Trước khi khởi chạy ứng dụng của bạn, điều quan trọng là phải chỉ định các chỉ mục cho bất kỳ truy vấn nào bạn có để đảm bảo chúng tiếp tục hoạt động khi ứng dụng của bạn phát triển.

Chỉ mục được chỉ định bằng cách sử dụng quy tắc .indexOn . Đây là một khai báo chỉ mục ví dụ sẽ lập chỉ mục các trường chiều cao và chiều dài cho danh sách các loài khủng long:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

Bước tiếp theo