IndexedDB 的作用域和权限管理基于同源策略与用户隐式授权:数据库仅限创建源访问,配额由浏览器按源分配,数据可被用户手动清除或无痕模式自动销毁,跨源共享需间接实现,且无内置加密机制。

IndexedDB 的数据库作用域和存储权限管理,核心就两点:同源限制 + 用户自主控制。它不依赖服务器授权,也不走 CORS 或 Cookie 认证,而是由浏览器基于当前页面的 协议 + 域名 + 端口 三元组自动划定边界。
数据库作用域严格遵循同源策略
每个 IndexedDB 数据库只对创建它的源(origin)可见。比如:
-
https://a.example.com创建的数据库'userDB',https://b.example.com无法访问,哪怕域名相同但子域不同; -
http://example.com和https://example.com被视为两个完全独立的源,各自拥有互不干扰的数据库空间; - 本地文件协议
file://页面通常被浏览器限制创建 IndexedDB(多数现代浏览器直接禁用),因为没有明确 origin,无法建立可靠作用域。
存储权限不由网站申请,而由用户隐式授予
IndexedDB 没有显式的“请求权限” API(不像 Notification 或 Camera)。只要页面能执行 JavaScript,就默认获得在当前源下创建、读写数据库的能力——但这不等于无限自由:
- 浏览器会按源分配独立的存储配额(通常数百 MB 起,部分支持 GB 级),超出时
add()或put()可能触发QuotaExceededError; - 用户可通过浏览器设置手动清除某个源下的所有 IndexedDB 数据(路径类似:设置 → 隐私与安全 → 网站设置 → 查看所有网站 → 找到对应域名 → 清除数据);
- 当用户启用“无痕模式”或“隐私浏览”,IndexedDB 数据在关闭窗口后自动销毁,不持久保留。
跨源数据共享只能间接实现
不能直接读取其他源的数据库,但可通过以下方式协作:
- 同一父域下,通过
document.domain(已逐步弃用)或postMessage配合 iframe 中转数据; - 主站与子应用约定统一数据格式,各自在自己源下维护副本,再通过服务端同步或广播机制对齐;
- 利用
SharedWorker(需同源)作为中继,多个同源页面可共用一套 IndexedDB 操作逻辑。
注意:没有“数据库级密码”或访问密钥
IndexedDB 本身不提供加密或访问控制接口。敏感数据若需保护,必须由开发者自行处理:
- 写入前用 Web Crypto API 加密(如 AES-GCM),密钥可由用户口令派生;
- 避免在 IndexedDB 中明文存储 token、密码、身份证号等;
- 配合
Clear-Site-Data响应头或navigator.storage.estimate()主动监控用量,防止意外超限。

















