我正在寻找创建一个只读表,我认为 MYSQL 权限是最好的方法。
这可以通过迁移实现吗?
生成迁移文件如下,
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”
请让我知道这是否有效!
如果你想编辑你的模型,你可以:
class YourModel < ActiveRecord::Base
attr_readonly :your_field_name
end
这不是迁移,但可能是最简单的方法。