【问题标题】:Is there a way to create a MySQL table with a rails migration where the table doesn't have UPDATE permissions?有没有办法在表没有 UPDATE 权限的情况下创建一个带有 Rails 迁移的 MySQL 表?
【发布时间】:2012-06-20 18:54:18
【问题描述】:

我希望创建一个只读表,我认为 MYSQL 权限是最好的方法。

这可以通过迁移实现吗?

【问题讨论】:

    标签: mysql ruby-on-rails ruby migration


    【解决方案1】:

    如下生成迁移文件,

    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”

    如果可行,请告诉我!

    【讨论】:

    • 对于撤销,语法是 FROM 'someuser'@'somehost' 而不是 TO,至少在 mysql 中
    【解决方案2】:

    如果您想编辑模型,您可以:

    class YourModel < ActiveRecord::Base
      attr_readonly :your_field_name
    end
    

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

    【讨论】:

    • 哦!我没有考虑过肖恩。这是一个好而简单的!无论如何,我的答案会在数据库本身中改变它,而你的答案不会,我猜。很好的答案!
    • 难道还不能修改数据库吗?就像, attr_readonly 仅来自导轨内。或者这是否真的对 SQL 表设置了一些权限?
    猜你喜欢
    • 1970-01-01
    • 2017-07-16
    • 2012-10-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2020-12-20
    相关资源
    最近更新 更多