You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cypress中安全存储Azure SQL数据库凭据避免提交至仓库

问题:Cypress连接Azure SQL时安全存储凭据失败

我在用Cypress连接Microsoft Azure SQL数据库,希望安全存储数据库凭据。直接在cypress.config.js中配置凭据能成功连接并查询数据库,但不能将这些敏感信息提交到主仓库(这是不安全的做法),而该文件还包含其他必须提交的配置。

环境信息:

  • Cypress包版本:12.8.1
  • Cypress二进制版本:12.8.1
  • Electron版本:21.0.0
  • 捆绑Node版本:16.16.0

我尝试在cypress.config.js的env部分配置别名:

module.exports = defineConfig({
  env: {
    userNameDatabase:"DB_USER_int",
    passwordDatabase: "DB_PASSWORD_int"
  }
})

并在cypress.env.json中定义DB_USER_int和DB_PASSWORD_int的实际值,但出现“用户登录失败”的错误。我是Cypress和数据库自动化连接的新手,希望得到帮助。

原cypress.config.js代码:

const { defineConfig } = require('cypress')
const sqlServer = require('cypress-sql-server');

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      tasks = sqlServer.loadDBPlugin(config.db);
      on('task', tasks);
      return config
    },
  },
  "db": {
    "userName": myusername,
    "password": mypassword,
    "server": "myserver",
    "options": {
      "database": "mydb",
      "encrypt": true,
      "rowCollectionOnRequestCompletion": true
    }
  }
})

解决方案

你的核心问题是没有正确将环境变量映射到数据库配置项中,以下是几种安全存储凭据的可行方案:

方法1:使用cypress.env.json(新手友好)

  1. 在项目根目录创建cypress.env.json,并将该文件添加到.gitignore中,避免提交到仓库:
{
  "DB_USER": "你的实际数据库用户名",
  "DB_PASSWORD": "你的实际数据库密码"
}
  1. 修改cypress.config.js,直接从config.env读取变量:
const { defineConfig } = require('cypress')
const sqlServer = require('cypress-sql-server');

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      // 从config.env中获取环境变量,覆盖db配置
      config.db.userName = config.env.DB_USER
      config.db.password = config.env.DB_PASSWORD
      
      tasks = sqlServer.loadDBPlugin(config.db);
      on('task', tasks);
      return config
    },
  },
  "db": {
    "userName": "", // 留空,后续由环境变量填充
    "password": "", // 留空,后续由环境变量填充
    "server": "myserver",
    "options": {
      "database": "mydb",
      "encrypt": true,
      "rowCollectionOnRequestCompletion": true
    }
  }
})

方法2:使用系统环境变量

如果不想依赖cypress.env.json,可以直接在系统层面设置环境变量:

  • Windows命令行:
set DB_USER=你的实际数据库用户名
set DB_PASSWORD=你的实际数据库密码
  • macOS/Linux终端:
export DB_USER=你的实际数据库用户名
export DB_PASSWORD=你的实际数据库密码

然后修改cypress.config.js从process.env读取:

const { defineConfig } = require('cypress')
const sqlServer = require('cypress-sql-server');

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      tasks = sqlServer.loadDBPlugin(config.db);
      on('task', tasks);
      return config
    },
  },
  "db": {
    "userName": process.env.DB_USER,
    "password": process.env.DB_PASSWORD,
    "server": "myserver",
    "options": {
      "database": "mydb",
      "encrypt": true,
      "rowCollectionOnRequestCompletion": true
    }
  }
})

方法3:使用.env文件(借助dotenv)

  1. 安装dotenv依赖:
npm install dotenv --save-dev
  1. 在项目根目录创建.env文件,添加到.gitignore:
DB_USER=你的实际数据库用户名
DB_PASSWORD=你的实际数据库密码
  1. 在cypress.config.js顶部引入dotenv并加载变量:
require('dotenv').config()
const { defineConfig } = require('cypress')
const sqlServer = require('cypress-sql-server');

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      tasks = sqlServer.loadDBPlugin(config.db);
      on('task', tasks);
      return config
    },
  },
  "db": {
    "userName": process.env.DB_USER,
    "password": process.env.DB_PASSWORD,
    "server": "myserver",
    "options": {
      "database": "mydb",
      "encrypt": true,
      "rowCollectionOnRequestCompletion": true
    }
  }
})

注意:无论使用哪种方法,务必确保存储敏感信息的文件(cypress.env.json、.env)被添加到.gitignore中,防止凭据泄露。

内容的提问来源于stack exchange,提问作者ravinder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:44:54