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

标签 mysql node.js mariadb

接下来几天我将使用MariaDB节点连接器。我通常使用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_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)文件的概念来存储可配置变量。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_USER = '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 - NodeJ和MariaDB,存储用户和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57970445/

相关文章:

node.js - 使用Socket.IO设置和获取 session 数据时,传递的功能是什么?

mysql - 搜索以CSV格式比较sql文件和txt文件的数据的选项

mysql - 我如何查看mysql dump的进度?

java - 递归 ORM 类的 Spring Repository 性能问题

MySQL字符串操作以计算字段中的值

python - 无法在 ubuntu 上使用 pip 安装 mysqlclient

sql - 如何连接多个字段并删除空槽的重复分隔符

php - 我可能在此查询中受到“0行影响”的一些原因是什么?

node.js - Nodejs 驱动程序支持哪些聚合游标方法?

node.js - 从 Nestjs 中可观察的 grpc 服务中获取数据,