我有一个生产和沙箱 Firestore 数据库以及一个通用的 firestore.rules 文件。
我希望每个数据库只允许一个用户进行读写。
我目前将此配置用于安全规则
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function isAdmin(uid) {
return uid == "IKHXrLmfIFZvrimpJUwnfUzTUoE2"
|| uid == "xVTByGu49XX3rOdNYMKf2Bzt5bY2";
}
match /{document=**} {
allow read, write: if isAdmin(request.auth.uid)
}
}
}
第一个uid是demo用户(只存在于sandbox firebase项目中),第二个是生产数据库的admin用户(只存在于生产项目中)
详情:
我知道发布沙盒 API 密钥不是最好的,但它不是一个重要的数据库。
重要的是生产数据库保持安全。
使用这种方法有什么安全问题吗? 如果是,如何保护生产数据库?
答案 0 :(得分:1)
当我第一次开始一个项目时,我一直使用这种方法。我创建了一个初始(匿名)用户,并在安全规则中授予该用户广泛的权限。
由于您需要项目的服务凭据才能在我的项目上随意设置相同的 UID,因此这种方法是安全的,可以让我快速上手。
然后,当我准备好使用更广泛的安全系统时,我会扩展安全模型,通常是以下之一:
isAdmin
,并在安全规则中进行检查。但即使到那时,我还是倾向于保留硬编码的 UID,因为它们没有安全风险。