Ruby on Rails和SQLite加密数据库

时间:2019-01-01 12:09:59

标签: ruby-on-rails sqlite sqlcipher

我正在使用Rails 5.2.2和SQLCipher版本3.2.0(基于SQLite 3.8.6)。

我已经使用sqlcipher加密了SQLite数据库,但无法加载Rails应用程序。得到的消息如下:

  

SQLite3 :: NotADatabaseException:文件已加密或不是数据库:SELECT name FROM sqlite_master WHERE name <>'sqlite_sequence'AND name ='schema_migrations'并输入IN('table')

我认为我的问题在于更新文件config / database.yml并指定密码。我尝试指定密码,密钥等选项,但没有成功。

我想知道是否可以在rails中使用加密的SQLite数据库?

1 个答案:

答案 0 :(得分:1)

这与所使用的Ruby版本无关,而与是否存在要使用的数据库适配器有关。

Rails尝试以相同的方式与所有数据库通信,每种数据库技术都需要提供adapter才能将Rails要求的内容转换为该数据库技术所需的命令,以完成Rails的要求。 / p>

此配置在config / database.yml文件中完成,该文件可能类似于以下内容(注意适配器节):

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000

有许多可用的数据库适配器,包括SQLite,但我没有看到SQLCipher的任何适配器,您的运气搜索可能比我好。

据我所见,大多数Rails应用程序不会加密整个数据库,但是会加密某些列,例如存储某些加密版本的密码或访问令牌。