2

我正在寻找创建一个只读表,我认为 MYSQL 权限是最好的方法。

这可以通过迁移实现吗?

4

2 回答 2

2

生成迁移文件如下,

rails g migration add_permissions_to_table_name    
invoke  active_record
      create    db/migrate/20120620191050_add_permissions_to_table_name.rb

编辑文件如下,

think@thinkComputer:~/Agile/ajax1$ vi db/migrate20120620191050_add_permissions_to_table_name.rb

class AddPermissionsToTableName < ActiveRecord::Migration
  def up

    execute "GRANT SELECT ON database1.table_name TO 'someuser'@'somehost'"

  end

  def down

    execute "REVOKE SELECT ON database1.table_name TO 'someuser'@'somehost'"

  end

end

按如下方式运行 rake 任务,

$ rake db:migrate

将来,如果您想撤销该许可,请执行以下操作,

$ rake db:migrate:down VERSION=20120620191050

您希望成为对“database1.table_name”具有授予权限的 mysql 用户,否则您将收到以下错误,

mysql> GRANT SELECT ON database1.table_name TO 'someuser'@'somehost';
ERROR 1142 (42000): GRANT command denied to user 'current_mysql_user'@'localhost' for table 'table_name'

mysql 用户和数据库的详细信息位于“config/database.yml”

请让我知道这是否有效!

于 2012-06-20T19:24:44.047 回答
2

如果你想编辑你的模型,你可以:

class YourModel < ActiveRecord::Base
  attr_readonly :your_field_name
end

这不是迁移,但可能是最简单的方法。

于 2012-06-20T19:28:47.650 回答