หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

ทำความเข้าใจกฎฐานข้อมูลเรียลไทม์ของ Firebase

กฎการรักษาความปลอดภัยฐานข้อมูลแบบเรียลไทม์ของ Firebase กำหนดว่าใครมีสิทธิ์เข้าถึงฐานข้อมูลของคุณในการอ่านและเขียนข้อมูลของคุณมีโครงสร้างอย่างไรและมีดัชนีใดบ้าง กฎเหล่านี้ใช้งานบนเซิร์ฟเวอร์ Firebase และบังคับใช้โดยอัตโนมัติตลอดเวลา ทุกคำขออ่านและเขียนจะเสร็จสมบูรณ์ก็ต่อเมื่อกฎของคุณอนุญาต โดยค่าเริ่มต้นกฎของคุณไม่อนุญาตให้ใครเข้าถึงฐานข้อมูลของคุณ นี่เป็นการป้องกันฐานข้อมูลของคุณจากการละเมิดจนกว่าคุณจะมีเวลาปรับแต่งกฎของคุณหรือตั้งค่าการตรวจสอบสิทธิ์

กฎการรักษาความปลอดภัยของฐานข้อมูลแบบเรียลไทม์มีไวยากรณ์เหมือน JavaScript และมีสี่ประเภท:

ประเภทกฎ
.อ่าน อธิบายว่าผู้ใช้อนุญาตให้อ่านข้อมูลหรือไม่และเมื่อใด
.เขียน ระบุว่าข้อมูลได้รับอนุญาตให้เขียนหรือไม่และเมื่อใด
.validate กำหนดว่าค่าที่จัดรูปแบบถูกต้องจะมีลักษณะอย่างไรไม่ว่าจะมีแอตทริบิวต์ลูกหรือไม่และประเภทข้อมูล
.indexOn ระบุชายด์ที่จะทำดัชนีเพื่อสนับสนุนการสั่งซื้อและการสืบค้น

ภาพรวมความปลอดภัยของฐานข้อมูลแบบเรียลไทม์

ฐานข้อมูลเรียลไทม์ของ Firebase มีเครื่องมือครบชุดสำหรับจัดการความปลอดภัยของแอปของคุณ เครื่องมือเหล่านี้ทำให้ง่ายต่อการตรวจสอบสิทธิ์ผู้ใช้บังคับใช้สิทธิ์ของผู้ใช้และตรวจสอบอินพุต

แอปที่ขับเคลื่อนด้วย Firebase จะเรียกใช้โค้ดฝั่งไคลเอ็นต์มากกว่าแอปที่มีสแต็กเทคโนโลยีอื่น ๆ ดังนั้นวิธีที่เราใช้ในการรักษาความปลอดภัยอาจแตกต่างไปจากที่คุณคุ้นเคยเล็กน้อย

การรับรองความถูกต้อง

ขั้นตอนแรกทั่วไปในการรักษาความปลอดภัยแอปของคุณคือการระบุตัวผู้ใช้ของคุณ กระบวนการนี้เรียกว่าการ พิสูจน์ตัวตน คุณสามารถใช้ Firebase Authentication เพื่อให้ผู้ใช้ลงชื่อเข้าใช้แอปของคุณ Firebase Authentication มีการสนับสนุนแบบดรอปอินสำหรับวิธีการตรวจสอบสิทธิ์ทั่วไปเช่น Google และ Facebook ตลอดจนการเข้าสู่ระบบอีเมลและรหัสผ่านการเข้าสู่ระบบแบบไม่ระบุชื่อและอื่น ๆ

ข้อมูลประจำตัวของผู้ใช้เป็นแนวคิดด้านความปลอดภัยที่สำคัญ ผู้ใช้ที่แตกต่างกันมีข้อมูลที่แตกต่างกันและบางครั้งก็มีความสามารถที่แตกต่างกัน ตัวอย่างเช่นในแอปพลิเคชันแชทข้อความแต่ละข้อความจะเชื่อมโยงกับผู้ใช้ที่สร้างขึ้น ผู้ใช้อาจสามารถลบข้อความของตนเองได้ แต่ไม่สามารถโพสต์ข้อความโดยผู้ใช้รายอื่นได้

การอนุญาต

การระบุผู้ใช้ของคุณเป็นเพียงส่วนหนึ่งของความปลอดภัย เมื่อคุณรู้แล้วว่าพวกเขาเป็นใครคุณต้องมีวิธีควบคุมการเข้าถึงข้อมูลในฐานข้อมูลของคุณ กฎการรักษาความปลอดภัยของฐานข้อมูลแบบเรียลไทม์ช่วยให้คุณสามารถควบคุมการเข้าถึงสำหรับผู้ใช้แต่ละคน ตัวอย่างเช่นต่อไปนี้เป็นชุดกฎความปลอดภัยที่อนุญาตให้ทุกคนอ่านเส้นทาง /foo/ แต่ไม่มีใครเขียนถึง:

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

.read และ .write กฎน้ำตกดังนั้นนี้ทุน ruleset อ่านการเข้าถึงข้อมูลใด ๆ ที่เส้นทาง /foo/ เช่นเดียวกับเส้นทางใด ๆ ลึกเช่น /foo/bar/baz โปรดทราบว่า .read และ .write กฎตื้นในฐานข้อมูลการแทนที่กฎลึกอ่านเพื่อการเข้าถึง /foo/bar/baz ยังจะได้รับในตัวอย่างนี้แม้ว่ากฎที่เส้นทาง /foo/bar/baz ประเมินเพื่อเท็จ

กฎการรักษาความปลอดภัยฐานข้อมูลแบบเรียลไทม์ประกอบด้วย ตัวแปร และฟังก์ชัน ในตัว ที่อนุญาตให้คุณอ้างถึงเส้นทางอื่น ๆ การประทับเวลาฝั่งเซิร์ฟเวอร์ข้อมูลการพิสูจน์ตัวตนและอื่น ๆ นี่คือตัวอย่างของกฎที่ให้สิทธิ์การเขียนสำหรับผู้ใช้ที่ผ่านการตรวจสอบสิทธิ์แก่ /users/<uid>/ โดยที่ <uid> คือ ID ของผู้ใช้ที่ได้รับจากการตรวจสอบสิทธิ์ Firebase

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

การตรวจสอบข้อมูล

ฐานข้อมูลเรียลไทม์ของ Firebase ไม่มีสคีมา สิ่งนี้ทำให้ง่ายต่อการเปลี่ยนแปลงสิ่งต่างๆในขณะที่คุณพัฒนา แต่เมื่อแอปของคุณพร้อมที่จะเผยแพร่สิ่งสำคัญคือข้อมูลจะต้องสอดคล้องกัน ภาษากฎระเบียบรวมถึง .validate กฎซึ่งช่วยให้คุณใช้ตรรกะการตรวจสอบการใช้นิพจน์เดียวกับที่ใช้สำหรับ .read และ .write กฎ ข้อแตกต่างเพียงอย่างเดียวคือ กฎการตรวจสอบความถูกต้องไม่เรียงซ้อน กันดังนั้นกฎการตรวจสอบความถูกต้องที่เกี่ยวข้องทั้งหมดจะต้องประเมินเป็นจริงเพื่อให้สามารถเขียนได้

กฎเหล่านี้บังคับว่าข้อมูลที่เขียนถึง /foo/ ต้องเป็นสตริงที่น้อยกว่า 100 อักขระ:

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

กฎการตรวจสอบมีการเข้าถึงทุกที่เหมือนกันในตัวฟังก์ชั่นและตัวแปรเป็น .read และ .write กฎ คุณสามารถใช้สิ่งเหล่านี้เพื่อสร้างกฎการตรวจสอบที่รับรู้ข้อมูลที่อื่นในฐานข้อมูลของคุณข้อมูลประจำตัวของผู้ใช้เวลาเซิร์ฟเวอร์และอื่น ๆ อีกมากมาย

การกำหนดดัชนีฐานข้อมูล

ฐานข้อมูลเรียลไทม์ของ Firebase ช่วยให้สามารถสั่งซื้อและสืบค้นข้อมูลได้ สำหรับข้อมูลขนาดเล็กฐานข้อมูลสนับสนุนการสืบค้นแบบเฉพาะกิจดังนั้นโดยทั่วไปแล้วดัชนีจึงไม่จำเป็นต้องใช้ในระหว่างการพัฒนา ก่อนที่จะเปิดตัวแอปของคุณสิ่งสำคัญคือต้องระบุดัชนีสำหรับคำถามใด ๆ ที่คุณต้องมีเพื่อให้แน่ใจว่าพวกเขายังคงทำงานต่อไปเมื่อแอปของคุณเติบโตขึ้น

ดัชนีถูกระบุโดยใช้กฎ. .indexOn นี่คือตัวอย่างการประกาศดัชนีที่จะจัดทำดัชนีฟิลด์ความสูงและความยาวสำหรับรายชื่อไดโนเสาร์:

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

ขั้นตอนถัดไป