Bitwarden 贡献文档
⮐ Bitwarden Contributing Documentation我的博客联系我
  • 关于
  • 入门
    • 概述
    • 工具
    • 服务器
      • 设置指南
      • 高级服务器设置
      • 数据库
        • MSSQL
        • 实体框架
      • 事件日志
      • Ingress 隧道
      • SCIM
      • 自托管指南
      • 系统管理门户
      • 单点登录 (SSO)
        • 本地 IdP
        • Okta
      • 故障排除
      • 用户机密
      • 公共 API
    • 网页客户端
      • 网页密码库
        • WebAuthn
      • 浏览器端
        • 生物识别解锁
        • Firefox 隐私模式
      • 桌面端
        • Mac App Store Dev
        • Microsoft Store
        • Native Messaging Test Runner
        • 更新测试
      • CLI
      • 故障排除
    • 移动端
      • Android
        • F-Droid
      • iOS
      • .NET MAUI (legacy)
        • Android
        • iOS
        • watchOS
    • SDK
      • 内部 SDK
      • Secrets Manager
        • Integrations
          • Kubernetes
    • 业务 App
      • 目录连接器
        • JumpCloud
        • OpenLDAP Docker 服务器
      • Key Connector
      • Splunk App
  • 贡献
    • 贡献
    • 代码样式
      • =Android & Kotlin
      • Angular & TypeScript
      • C#
      • =Rust
      • T-SQL
      • =Swift
      • Tailwind
    • 数据库迁移
      • 进化数据库设计
    • 提交签名
    • 拉取请求
      • =贡献审查程序
      • 分支
      • 代码审查
      • UI 审查 - Chromatic
    • 无障碍
    • 依赖管理
    • 功能标记
    • 模板存储库
    • 测试
      • =数据库集成测试
      • 负载测试
      • 单元测试
        • 命名约定
        • 测试结构
    • 修改用户机密
  • 架构
    • 架构
    • 架构决策记录 (ADR)
      • 0001 - Angular Reactive Forms
      • 0002 - Public API for modules
      • 0003 - Adopt Observable Data Services for Angular
      • 0004 - Refactor State Service
      • 0005 - Refactor Api Service
      • 0006 - Clients: Use Jest Mocks
      • 0007 - Manifest V3 sync Observables
      • 0008 - Server: Adopt CQRS
      • 0009 - Composition over inheritance
      • 0010 - Angular Modules
      • 0011 - Scalable Angular Clients folder structure
      • 0012 - Angular Filename convention
      • 0013 - Avoid layered folder structure for request/response models
      • 0014 - Adopt Typescript Strict flag
      • 0015 - Short Lived Browser Services
      • 0016 - Move Decryption and Encryption to Views
      • 0017 - Use Swift to build watchOS app
      • 0018 - Feature management
      • 0019 - Adoption of Web Push
      • 0020 - Observability with OpenTelemetry
      • 0021 - Logging to Standard Output
      • =0022 - Authorization
      • =0023 - Identifying Integrated Clients
    • 移动客户端架构
      • =Android
      • =iOS
        • =推送通知故障排除提示
      • =.NET MAUI (legacy)
        • =概述
        • watchOS
    • =SDK 架构
      • =数据模型
      • =依赖
      • Password Manager
        • Web
          • =互操作性
      • =Secrets Manager
      • =服务器绑定
      • =版本控制和破坏性更改
    • 网络客户端架构
      • 概述
      • 数据模型
      • 表示层
        • Angular
        • CLI
      • =依赖注入
      • 服务层
        • Vision
        • 实现
    • 服务器架构
    • 深度剖析
      • 身份验证
        • 双重身份验证
      • =授权
      • =浏览器自动填充
        • 收集页面详细信息
        • 生成并执行填充脚本
        • 表单提交检测
        • Shadow DOM
        • =内联自动填充菜单
      • Captcha
      • =只读数据库副本
      • 事件日志
      • =FIDO2 和通行密钥
        • =凭据
        • =操作
        • =命名惯例
        • =实现
          • =提供程序
            • =浏览器扩展
          • =依赖方
            • =用于解密的通行密钥
        • =术语表
      • 推送通知
        • 移动端推送通知
        • 其他客户端推送通知
      • =SSH 密钥和代理
        • =SSH 代理
      • =状态提供程序框架
        • =派生状态
    • =安全
      • =定义
      • =原则
        • =P01 - 锁定的密码库是安全的
        • =P02 - 半受损设备密码库的有限安全性
        • =P03 - 完全损坏的系统没有安全性
        • =P04 - 控制密码库数据的访问权限
        • =P05 - 将安全漏洞的影响降至最低
      • =要求
由 GitBook 提供支持
在本页
  • 背景
  • 设置 EF 数据库
  • 要求
  • 数据库设置
  • 用户机密
  • 迁移
  • 验证(可选)
  • 测试 EF 更改
  1. 入门
  2. 服务器
  3. 数据库

实体框架

上一页MSSQL下一页事件日志

最后更新于3个月前

对应的

实体框架 (EF) 支持仍处于测试阶段,不适合生产型数据库。

本页面指的是建立一个 Bitwarden 实例来进行开发,如需了解如何测试个人使用的 EF 部署(例如 Bitwarden Unified),请参阅。

背景

实体框架 (EF) 是一个 ORM 框架,充当数据库的包装器。它允许我们支持多个(非 MSSQL)数据库,而无需为每个数据库维护迁移和查询脚本。

我们的 EF 实现目前支持 Postgres、MySQL 和 SQLite3。

设置 EF 数据库

这里的工作流程与普通的 MSSQL 实现大致相同:设置 docker 容器、配置用户机密,并按时间顺序针对相关数据库运行脚本文件夹中的脚本。

要求

  • 一个正常运行的本地开发服务器

  • Docker

  • 一种在服务器项目中管理用户机密的方法 - 请参阅

  • 数据库管理软件(参阅)

  • dotnet cli

  • dotnet cli

您可以配置多个数据库,并通过改变 globalSettings:databaseProvider 用户机密的值以在它们之间切换。您不需要删除您的连接字符串。

数据库设置

在您的服务器存储库的 dev 文件夹中,运行:

docker compose --profile postgres up

在您的服务器存储库的 dev 文件夹中,运行:

docker compose --profile mysql up

选择数据库文件的位置。您可以使用服务器存储库的 dev 文件夹,为此目的,git 配置为忽略此存储库中的 .db 文件。

用户机密

将以下值添加到您的 API、身份和管理员用户机密中。

请务必根据需要更改 root 密码等信息。如果您已经拥有这些机密,请确保更新现有的值,而不是创建一个新的值:

"globalSettings:databaseProvider": "postgres",
"globalSettings:postgreSql:connectionString": "Host=localhost;Username=postgres;Password=example;Database=vault_dev;Include Error Detail=true",

请务必根据需要更改 root 密码等信息。如果您已经拥有这些机密,请确保更新现有的值,而不是创建一个新的值:

"globalSettings:databaseProvider": "mysql",
"globalSettings:mySql:connectionString": "server=localhost;uid=root;pwd=example;database=vault_dev",
"globalSettings:databaseProvider": "sqlite",
"globalSettings:sqlite:connectionString": "Data Source=/path/to/your/server/repo/dev/db/bitwarden.db",

更改 secrets.json 文件后,记得运行 pwsh setup_secrets.ps1 -clear 使更改生效。

迁移

在 dev 文件夹中运行以下命令将数据库更新到最新的迁移:

pwsh migrate.ps1 -postgres

migrate.ps1 中的 -postgres 标志将用于运行 dotnet ef 命令以执行迁移。

您还可以使用以下命令同时为所有数据库提供程序运行迁移:

pwsh migrate.ps1 -all

在 dev 文件夹中运行以下命令将数据库更新到最新的迁移:

pwsh migrate.ps1 -mysql

migrate.ps1 中的 -mysql 标志将用于运行 dotnet ef 命令以执行迁移。

您还可以使用以下命令同时为所有数据库提供程序运行迁移:

pwsh migrate.ps1 -all

在 dev 文件夹中运行以下命令将数据库更新到最新的迁移:

pwsh migrate.ps1 -sqlite

migrate.ps1 中的 -sqlite 标志将用于运行 dotnet ef 命令以执行迁移。

您还可以使用以下命令同时为所有数据库提供程序运行迁移:

pwsh migrate.ps1 -all

验证(可选)

如果您想验证一切工作是否正常:

  • 检查数据库表以确保所有内容均已创建

  • 使用 dotnet test 从您的服务器项目的根部运行集成测试。注意:这需要一个已配置好的 MSSQL 数据库。您可能还需要设置其他 EF 提供程序才能通过测试。

测试 EF 更改

在您的 server/dev/secrets.json 文件中查找,或在 json 结构的根部添加此机密块:

"databases:0:type": "Postgres",
"databases:0:connectionString": "Host=localhost;Username=postgres;Password=_________;Database=ef_test",
"databases:0:enabled": "true",
"databases:1:type": "Sqlite",
"databases:1:enabled": "true",
"databases:1:connectionString": "Data Source=_________",
"databases:2:type": "MySql",
"databases:2:connectionString": "server=localhost;uid=root;pwd=_________;database=ef_test",
"databases:2:enabled": "true",
"databases:3:type": "SqlServer",
"databases:3:connectionString": "Server=localhost;Database=ef_test;User Id=SA;Password=_________;Encrypt=True;TrustServerCertificate=True;",
"databases:3:enabled": "true"

示例数据库索引 + 类型组合是工具运行所必需的,并可支持同一数据库的多个版本同时运行测试。

此块用于为每个支持的提供程序类型测试数据库。集成测试将连接到这些数据库。如果尚未更新,则应更新这些连接字符串的密码,以使其与现有数据库相匹配。如果您的 server/dev/secrets.json 文件中根本没有这些设置,只需将其添加到底部即可。这些设置不会出现在 globalSettings 中。然后运行 pwsh setup_secrets.ps1 -clear 将其应用到本地项目。

将连接字符串应用到项目后:使用 pwsh server/dev/migrate.ps1 --all 确保数据库已全部迁移。然后就可以使用 dotnet test 从 test/Infrastructure.IntegrationTest 文件夹运行 EF 测试了。

将以下值添加到您的 API、身份和管理员用户机密中。注意,您必须设置数据源路径。使用在中选择的文件位置:

官方页面地址
帮助文档
用户机密参考
工具推荐
实体框架核心工具
数据库设置