mysql - NodeJs 和 MariaDB,存储用户和密码

标签 mysql node.js mariadb

我将使用 MariaDB Node 连接器在接下来的几天。我通常使用 API,所以我对如何使用它有点困惑。

问题特别在于我应该在哪里保存我的 MariaDB 登录详细信息。我看了一下例子 here , 但有些事情告诉我在生产期间我不应该在我的代码中包含我的 MariaDB 登录详细信息:

const mariadb = require('mariadb');
const pool = mariadb.createPool({host: 'mydb.com', user: 'myUser', connectionLimit: 5});

这很好还是安全问题?在这种情况下,更好的解决方案是什么?

最佳答案

无论是用于 API 还是数据库,您都不应该将凭据存储在代码存储库中,因为任何协作者都可以访问您的数据库。最常见的方法是使用环境变量使其可根据代码运行的机器进行配置。

如果您从类 Linux 终端(例如 Bash)调用 Node,您可以像这样传递环境变量:

DB_HOST=mydb.com DB_USER=myUser node myscript.js

在您的代码中,您将通过 process.env 访问它:

const {
  DB_HOST = 'localhost', // a non-sensitive default value
  DB_USER = 'root',
} = process.env

const mariadb = require('mariadb')
const pool = mariadb.createPool({host: DB_HOST, user: DB_USER, connectionLimit: 5})

因为从长远来看,每次从终端调用脚本时都设置环境变量是乏味的,聪明人发明了 dotenv (.env) 文件的概念来存储可配置变量。 dotenv包将查找这样的文件并将其值应用于环境,除非已经定义了属性。

使用它就像在项目根目录中创建一个名为 .env 的文件一样简单:

DB_HOST=mydb.com
DB_USER=myUser

重要提示:必须将此文件添加到您的 .gitignore 以避免将您的凭据暴露给意外的查看者。

并修改之前的脚本:

require('dotenv').config() // Add this to apply missing things to process.env before we read from it

const {
  DB_HOST = 'localhost',
  DB_USER = 'root',
} = process.env

const mariadb = require('mariadb')
const pool = mariadb.createPool({host: DB_HOST, user: DB_USER, connectionLimit: 5})

进一步阅读:The Twelve-Factor App - III. Config

关于mysql - NodeJs 和 MariaDB,存储用户和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57970445/

相关文章:

mysql - 使用 Eloquent laravel 检索所有数据

node.js - 无法安装 ionic 框架

json - Elasticsearch 匹配给定数组中的所有标签

sql - 在自引用表中排序

Python os.system 输入要在 CLI 应用程序中执行的命令

php - 使用内部连接更新时使用 mysql 查询的高 CPU

mysql - MySQL如何处理每个用户的数据存储

mysql - 如何使用SQL删除条件下字符串内的空格?

python - 在 RoR 和 python 中锁定数据库表

node.js - 是否可以强制 typescript 使用DefinitelyTyped 中的类型而不是 native lib 类型?