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

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

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

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

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

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

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

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

การรับรอง

ขั้นตอนแรกทั่วไปในการรักษาความปลอดภัยแอปของคุณคือการระบุผู้ใช้ของคุณ กระบวนการนี้เรียกว่าการ รับรองความถูกต้อง คุณสามารถใช้การ รับรองความถูกต้องของ Firebase เพื่อให้ผู้ใช้ลงชื่อเข้าใช้แอปของคุณ การรับรองความถูกต้องของ Firebase รวมถึงการสนับสนุนแบบดรอปอินสำหรับวิธีการรับรองความถูกต้องทั่วไปเช่น 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"]
    }
  }
}

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