【问题标题】:NodeJs and MariaDB, storing user and passwordNodeJs 和 MariaDB,存储用户和密码
【发布时间】:2020-01-18 02:14:37
【问题描述】:

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

问题在于我应该在哪里保留 MariaDB 登录详细信息。我查看了示例 here,但有些东西告诉我,在生产期间我的代码中不应包含 MariaDB 登录详细信息:

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

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

【问题讨论】:

    标签: mysql node.js mariadb


    【解决方案1】:

    无论是用于 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

    【讨论】:

    • 我不知道,幸好我没有公开上传我的任何存储库!感谢您的帮助!
    【解决方案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

    【讨论】:

      猜你喜欢
      • 2013-12-27
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多