NodeJ和MariaDB,存储用户和密码

时间:2019-09-17 08:38:26

标签: mysql node.js mariadb

在接下来的几天中,我将使用MariaDB节点连接器。我通常使用API​​,因此我对如何使用它感到困惑。

问题特别是在我应该保留我的MariaDB登录详细信息的位置。我看了示例here,但有个告诉我,在生产期间我不应在代码中包含MariaDB登录详细信息:

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

可以吗?还是安全性问题?在这种情况下什么是更好的解决方案?

2 个答案:

答案 0 :(得分:2)

您应该将连接详细信息(例如URL,用户名和密码)保留在生产环境中的环境变量中。您可以使用dotenv模块

在开发环境中模拟这些变量

在项目的根目录中创建一个.env文件。在新行上以NAME = VALUE的形式添加特定于环境的变量。例如:

DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3

使用NPM安装dotenv:npm install dotenv --save-dev

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

避免将.env文件推送到代码存储库。使用.gitigonre

答案 1 :(得分:1)

无论凭证是用于API还是数据库,都不应在凭证库中存储凭证,因为任何协作者都可以访问您的数据库。最常见的方法是使用环境变量使它们可配置,具体取决于运行代码的计算机。

如果您是从类似Linux的终端(例如Bash)调用Node,则可以传递如下环境变量:

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

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

const {
  DB_USER = '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)文件的概念来存储可配置变量。{{3 }}程序包将查找此类文件,并将其值应用于环境,除非已经定义了属性。

使用它就像在项目根目录中创建名为.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_USER = 'localhost',
  DB_USER = 'root',
} = process.env

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

进一步阅读:dotenv

相关问题