nodejs+sequelize实现sqlite3开启密码认证
背景:最近项目中使用了sqlite3,但是免费版sqlite3是不支持账户密码登录的,数据库文件就很危险,任何人都可以轻易的查看数据库内容。因此希望sqlite3可以有一个认证
实现方法也很简单,安装一个第三方库就可以
npm i --save @journeyapps/sqlcipher
js中sequelize连接:
const sequelize = new Sequelize({
dialect: ‘sqlite’,
storage:’./ttt.db’,
logging: false,
password: config.mysql.password, //密码
dialectModulePath: ‘@journeyapps/sqlcipher’, //此处指定
// timezone: ‘+08:00’,
});
注意仅仅是多了dialectModulePath参数,写死即可
如果使用sequelize ORM 初始化该数据库,会自动生成对应的数据库文件,ttt.db会自动创建
此时ttt.db应该是加密过的数据库
依旧可以使用sqlite3命令行登录数据库,但你会发现,执行任何关于数据的操作都会报错:
Error: file is not a database,如此处我想新建一张表
CREATE TABLE main.COMPANY2(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
此时可以借助图形化界面软件sqlitebrowser查看数据:
注意sqlitebrowser版本,参考https://sqlitebrowser.org/dl/#windows
我是ubuntu 20.0.4系统,使用以下命令安装
sudo apt-get --purge remove sqlitebrowser
sudo add-apt-repository -y ppa:linuxgndu/sqlitebrowser
sudo apt-get update
sudo apt-get install sqlitebrowser
安装好后直接输入sqlitebrowser就可以打开
打开刚才创建的ttt.db文件,会叫你输入密码,正确输入密码后就可以查看/修改数据了。
当然这个图形界面也支持打开非加密数据库的
https://github.com/lovelykd/sqlcipher-cli
据说使用这个库可以实现命令行操作数据库
Installation
#assume that you already installed node
npm i -g sqlcipher-cli
Usage
Connect to the database with your secret key
sqlcipher-cli -d test.db -s secretkey
Type the query string (it should end with ‘;’)
Database connected
select * from user;
[ { id: 1, name: ‘123’ } ]
Type quit to exit