我有两个与Firebase实时数据库有关的问题。
Q1)是否可以向公众隐藏某个节点,并且只有一个人可以访问该节点?
(我想在数据库中保存一个交易密钥,只有1-2个人可以从数据库访问该密钥。)
Q2)如果我的数据库安全规则设置为public,任何人都可以下载/访问完整数据,或者他们必须知道结构才能从数据库访问数据。
答案 0 :(得分:2)
A1 / 是,可以将对特定节点的访问限制为仅用户子集。有几种解决方法。如果它是一小部分用户,或多或少稳定,那么您可以检查其uid是否包含在列出管理员用户uid的特定节点中,如下所示:
{
"rules": {
"secretnode": {
//only an admin user can read
".read": "auth != null && root.child('adminusers/' + auth.uid).exists()"
},
"adminusers": {
".read": false,
".write": false
},
"othernodes": {
".read": true,
".write": true
}
}
}
例如,在数据库中,按如下方式保存管理uid:
DBRoot
- adminusers
- uid1
- name: "aaaaaa"
- otherDataItem: "xxxxxx"
- uid2
- name: "bbbbb"
- otherDataItem: "yyyy"
A2 / 是,如果将数据库 root 的安全规则设置为public,则“任何人都可以下载/访问完整数据”。请注意,如documentation中所述:
较浅的安全规则会覆盖较深路径的规则。子规则 只能授予父节点已经拥有的特权 宣布。他们无法撤消读取或写入权限。
换句话说,这意味着,如果您对数据库 root 的安全规则设置为公开,则任何人都可以下载代表您数据的完整JSON树,而无需知道其结构。>