【发布时间】:2015-09-13 02:07:26
【问题描述】:
我想在我的 Rails 应用程序中有一个页面,用户可以在该页面上输入 mysql 数据库 ip、用户名和密码。这些凭据安全地存储在某个地方,然后 rails 连接到数据库并可以运行一些 sql 语句。
我应该在哪里存储凭据以及如何使用 Ruby on rails 连接到该数据库?该数据库没有预定义的模型,我不需要使用活动记录建模
谢谢!
【问题讨论】:
标签: mysql ruby-on-rails
我想在我的 Rails 应用程序中有一个页面,用户可以在该页面上输入 mysql 数据库 ip、用户名和密码。这些凭据安全地存储在某个地方,然后 rails 连接到数据库并可以运行一些 sql 语句。
我应该在哪里存储凭据以及如何使用 Ruby on rails 连接到该数据库?该数据库没有预定义的模型,我不需要使用活动记录建模
谢谢!
【问题讨论】:
标签: mysql ruby-on-rails
这是我的第一个想法。也许这会让你知道如何去做。当然,还有其他几种方法。
将数据保存在某处(在数据库中) https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet Encrypt, decrypt using Rails
所以现在你可以在保存方式User.password = "plaintext"设置密码,也可以用User.password接收它
class User
# password field is called "crypted_password"
def password= val
self.crypted_password =
ActiveSupport::MessageEncryptor.new(Rails.configuration.secret_key_base).encrypt_and_sign(val)
end
def password
ActiveSupport::MessageEncryptor.new(Rails.configuration.secret_key_base).decrypt_and_verify(self.crypted_password)
end
end
user = User.find(1337)
mysql = DatabaseConnection.new user.host, user.username, user.password
result = mysql.get_users(50)
raise result.inspect
使用 gem mysql2 访问 mysql 数据库
https://github.com/brianmario/mysql2
创建一个 DatabaseWrapper 来连接用户数据库
class DatabaseConnection
def initialize host, username, password
@@connection = Mysql2::Client.new host: host, username: username, password: password
end
end
def run statement
@@connection.query statement
end
def get_users limit=100
run "select * from users where flag=true limit #{limit}"
end
end
【讨论】:
您可能想要一个 Rails 应用程序,它有一个应用程序数据库,还有一堆用户数据库。用户数据库凭据将存储在应用程序数据库中。您需要存储数据库密码的哈希值,而不是明文。
关于如何允许用户连接到他们的数据库,我建议使用谷歌搜索。我会从互联网上寻找在 Rails 应用程序中使用多个数据库的示例,以及他们如何执行连接逻辑。您也许可以从那里解决它,或者在尝试发布关于 SO 的更详细和具体的问题之后。
此外,我还会查看您可以拥有的数据库数量或一次可以发生的数据库连接数量是否有限制。这些限制可能是由您使用的服务器施加的,如果不是由 Rails 或底层数据库软件施加的话。
【讨论】: