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/

相关文章:

php - 更新 "quantity remaining"而不刷新站点

javascript - Express.js自定义模板引擎(板 block )

php - MySql 事务仅在控制台中有效

mysql - 从 Laravel 5.1 升级到 Laravel 5.8 后,whereHas() 速度变慢

MySQL查询浏览器程序错误代码-1

sql - 我可以将这 2 个简单查询合并为一个查询吗?

php - 如果数据库值等于 1,则将类添加到 img

javascript - 在 Javascript 中如何检查提供的参数是否是字节数组类型?

node.js - 快速使用 webpack 开发服务器的目的是什么?

mysql - 错误 1064 : SQL syntax