接下来几天我将使用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/