使用其他数据库执行单个查询。 Ruby on Rails

时间:2011-11-05 14:30:52

标签: mysql ruby-on-rails activerecord

我有一个Ruby on Rails项目,我想让用户执行SQL SELECT查询。

出于安全考虑,我有两个mysql数据库。其中一个是我的主数据库,包含用户信息等。 第二个数据库用于保存“测试”表,用户应该能够使用我授予“select”权限的特定数据库用户来选择内容。

基本上,我希望我的用户提交查询,然后我想更改为我的测试数据库,运行该查询,返回结果,然后返回到我的旧数据库。

的database.yml

mysql: &mysql
  adapter: mysql
  database: sql_detective
  user: root
  password: root
  timeout: 5000

mysql_tests: &mysql_tests
  adapter: mysql
  database: sql_detective_tests
  user: user
  password: user
  timeout: 5000

test:
  <<: *mysql_tests
development:
  <<: *mysql

Funcionario.rb

class Funcionario < ActiveRecord::Base
  establish_connection :test
end

stages_controller.rb

@query = Funcionario.find_by_sql(params[:query])

当我尝试执行查询时,出现此错误:

Mysql::Error in StagesController#sql_query

Access denied for user 'root'@'localhost' (using password: YES)

1 个答案:

答案 0 :(得分:2)

解决。

<强>修正

的database.yml

将用户更改为用户名已修复此问题。

像这样...

<强>前

development:
  adapter: mysql
  database: sql_detective
  user: root
  password: root
  timeout: 5000

<强>后

development:
  adapter: mysql
  database: sql_detective
  username: root
  password: root
  timeout: 5000