【问题标题】:Rails : Connect to my sql database with credentials provided by usersRails:使用用户提供的凭据连接到我的 sql 数据库
【发布时间】:2015-09-13 02:07:26
【问题描述】:

我想在我的 Rails 应用程序中有一个页面,用户可以在该页面上输入 mysql 数据库 ip、用户名和密码。这些凭据安全地存储在某个地方,然后 rails 连接到数据库并可以运行一些 sql 语句。

我应该在哪里存储凭据以及如何使用 Ruby on rails 连接到该数据库?该数据库没有预定义的模型,我不需要使用活动记录建模

谢谢!

【问题讨论】:

    标签: mysql ruby-on-rails


    【解决方案1】:

    这是我的第一个想法。也许这会让你知道如何去做。当然,还有其他几种方法。

    将数据保存在某处(在数据库中) 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
    

    【讨论】:

      【解决方案2】:

      您可能想要一个 Rails 应用程序,它有一个应用程序数据库,还有一堆用户数据库。用户数据库凭据将存储在应用程序数据库中。您需要存储数据库密码的哈希值,而不是明文。

      关于如何允许用户连接到他们的数据库,我建议使用谷歌搜索。我会从互联网上寻找在 Rails 应用程序中使用多个数据库的示例,以及他们如何执行连接逻辑。您也许可以从那里解决它,或者在尝试发布关于 SO 的更详细和具体的问题之后。

      此外,我还会查看您可以拥有的数据库数量或一次可以发生的数据库连接数量是否有限制。这些限制可能是由您使用的服务器施加的,如果不是由 Rails 或底层数据库软件施加的话。

      【讨论】:

      • 如果他正在散列它,他就没有机会恢复它。明文是 obv 真的很糟糕,他可以使用这样的东西stackoverflow.com/questions/5492377/encrypt-decrypt-using-rails
      • 对密码使用哈希是常见的做法。没有人可以在不知道密码是什么的情况下检索密码这一事实增加了密码的安全性。但这确实意味着他必须为忘记密码更改设置一个验证系统。
      • 没有。你使用哈希然后使用哈希(input_from_user)== hashed_pa​​ssword。但这里很明显你不能去散列,因为你不能恢复它,并且用户不会再次输入他的密码。只有一次。
      猜你喜欢
      • 2012-01-18
      • 2019-08-26
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多