我正在尝试为第三方服务创建API,并且我已经获得了访问具有我需要的所有数据的复制数据库.不幸的是,在MySQL中使用哪些特权以便不暴露专有数据库设计存在限制.
数据库设置为将某些数据库表公开为视图,并在这些视图上授予SELECT权限.
我有一些模型支持的模型不符合典型的Rails表命名约定,定义如下:
class MyAPIModule::City < ActiveRecord::Base
set_table_name "VIEW_CITY"
end
ActiveModel尝试动态构建模型属性的任何查询都会失败,例如:
MyAPIModule::City.find(1)
失败:
MysqL2::Error: SHOW VIEW command denied to user 'theuser'@'thehost' for table 'VIEW_CITY': SHOW CREATE TABLE `VIEW_CITY`
ActiveRecord::StatementInvalid: MysqL2::Error: SHOW VIEW command denied to user 'theuser'@'thehost' for table 'VIEW_CITY': SHOW CREATE TABLE `VIEW_CITY`
问题是,priveleges不允许ActiveRecord运行“SHOW CREATE TABLE”查询来收集列信息并构建模型属性.
有没有办法对表模式进行硬编码,以防止ActiveRecord需要使用“SHOW CREATE TABLE”查询数据库中的表构造?
编辑:
结合我对sameera207的回复:
class MyAPIModule::City
include ActiveModel::Validations
include ActiveModel::Conversion
include ActiveModel::SerializerSupport
extend ActiveModel::Naming
...
end
解决方法:
我不确定有没有办法从数据库中跳过列限制,但是一个解决方法是直接执行你的sql命令.
它需要手动编码,
class MyAPIModule::City < ActiveRecord::Base
set_table_name "VIEW_CITY"
def find(id)
obj = ActiveRecord::Base.connection().execute("select * from your table")
#above will return an array, so you will have to create your object
obj
end
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。