如何将Firebase数据库设为私有,仅允许本人执行读写操作?
配置实现步骤
前置风险处理
先检查GitHub仓库内的提交记录,确认没有上传过Firebase服务账号私钥文件,如果有过提交记录,立刻到Firebase控制台轮换对应凭据,将旧密钥作废,避免凭据被恶意利用。
核心权限配置
你之前将读写规则统一设为true是完全开放权限的错误配置,所有拿到你项目Firebase初始化配置的用户都可以任意操作数据库,根据你的使用场景二选一配置规则即可:
场景1:你需要通过前端/移动端客户端正常访问数据库
- 先进入Firebase控制台的Authentication板块,注册一个仅你自己使用的管理员账号,注册完成后复制该账号的专属UID
- 进入对应数据库(Realtime Database或Cloud Firestore)的规则编辑页,替换原有规则为以下内容(以Realtime Database为例,Firestore规则语法逻辑一致):
{ "rules": { ".read": "auth.uid === '替换为你自己的管理员账号UID'", ".write": "auth.uid === '替换为你自己的管理员账号UID'" } }
- 发布规则后,仅当你在客户端登录自己的管理员账号时可以正常读写数据库,所有未登录用户、登录其他账号的用户的读写请求都会被直接拦截。
提示:规则发布后可以用控制台自带的规则模拟器测试权限,分别模拟非授权用户、你的管理员账号发起请求,确认拦截和放行逻辑符合预期。
场景2:你仅需要在本地/私有服务端操作数据库,不需要对外提供客户端访问
这种场景不需要开放客户端权限,直接将数据库规则配置为全拦截即可:
{ "rules": { ".read": false, ".write": false } }
配置生效后所有客户端SDK的请求都会被拒绝,你自己使用Firebase Admin SDK配合本地私有的服务账号密钥访问即可——注意服务账号密钥绝对不能提交到公开仓库,只能存储在你本地的私有运行环境中,Admin SDK发起的请求会默认绕过安全规则拥有完整读写权限。
后续收尾
规则生效后检查数据库内的现有数据,清理其他用户篡改产生的非法脏数据即可。
注意事项
- 不要将Firebase服务账号私钥提交到任何公开代码仓库,一旦发生过私钥上传到公开仓库的情况,必须第一时间到控制台轮换凭据作废旧密钥
- 规则发布后必须通过规则模拟器、实际请求测试两种方式验证权限逻辑,确认非授权用户无法访问,且你自己的账号可以正常读写
- Firebase客户端初始化配置本身不属于敏感信息,不需要刻意隐藏,核心的权限边界必须通过服务端安全规则实现,不能依赖前端配置的隐蔽性做权限控制
内容的提问来源于stack exchange,提问作者CypherZ
相关产品推荐
相关产品推荐

