【问题标题】:lock down view to be uneditable锁定视图不可编辑
【发布时间】:2011-03-21 22:11:36
【问题描述】:

我正在构建一个包含公共、私人(仅限于内部)和机密数据(仅限于极少数)的数据库。它有非常具体的要求,即在数据库端管理数据的安全性,但是我在一个我无法直接控制权限的环境中工作,并且更改它们的请求会很耗时(2-3天)。

所以我创建了一个结构,可以满足我们的需求,而无需大量许可。我在同一台服务器上创建了两个数据库,一个是内部数据库,谁的表只能由我们网络某些子网中的某些用户编辑。第二个是公共数据库,使用管理员帐户,我创建仅限于内部数据库中表的公共字段的视图以公开公共数据,它似乎运行良好。但是,数据只能以一种方式流动,并且视图不应该能够写入源表。而且我不能将公共数据库锁定为只能选择,因为公共数据库用于我们公共网站的各种任务。

所以我需要创建视图来限制某些脚本对表中某些字段的访问。我需要确保这些视图无法在源表中插入、更新或删除数据。要创建我使用的视图:

CREATE  ALGORITHM = UNDEFINED 
VIEW `table_view` AS 
  SELECT *
  FROM `table`

查看文档以防止更新视图需要具有聚合数据、WHERE 子句中的子查询和 ALGORITHM = TEMPTABLE。我会选择 TEMPTABLE,但手册不清楚它是否会影响性能。在一段the manual 中说:

它更喜欢 MERGE 而不是 TEMPTABLE 如果 可能的,因为 MERGE 通常是 更高效

然后立即声明:

选择 TEMPTABLE 的理由 明确的是锁可以 之后在基础表上发布 临时表已创建 在它被用来完成之前 处理语句。这有可能 导致更快的锁定释放比 MERGE 算法使其他 使用视图的客户不是 一直被屏蔽。

将在页面加载时查询视图以生成页面内容,MERGE 是否仍然是more efficient 或者较低的锁定时间会更好地为我服务?不,通过帐户权限处理这个问题并不是一个真正的选择,因为无法授予个别字段的权限以满足法律保密要求。为了满足这些要求,需要将每个表分成 2-3 个表,其中包含具有同质机密性的字段。

算法应该是 UNDEFINED 还是 TEMPTABLE,或者视图定义中是否有另一个设置会锁定视图。以及我将体验到的性能效果是什么。另外,如果我做一些事情来强制它不可编辑,比如包含 HAVING 1 以使其成为聚合函数,则会强制它成为 TEMPTABLE 并且算法的选择没有实际意义。

【问题讨论】:

    标签: mysql locking readonly temp-tables


    【解决方案1】:

    我想知道你为什么不直接锁定grants to the account(s) being used to not have DELETE, INSERT or UPDATE

    MySQL 似乎不支持角色,我会在没有这些授权的情况下定义一个角色,只是将帐户与该角色相关联 - 可惜...

    【讨论】:

    • 不幸的是我没有权限的表级控制,我必须通过我们的 IT 部门。请求任何权限更改。如果我进行更改,则需要 2 到 3 天才能进行测试。此外,由于我无法控制的法律要求,我不想将每个表分成 2-3 个不同保密级别的表。
    • @Tyson of the Northwest:专用用户可以减轻权限分配,但如果您想保持交互分开,则无济于事(IE:如果某人的角色发生变化怎么办 - 现在他们拥有两者的密码“角色”...)。您可以通过存储过程控制对表操作的访问,而不是考虑为了数据可见性而拆分表。很抱歉 - 听起来您有一些基础问题,如果您在开发早期解决这些问题,可以让生活更轻松,但我真的不知道您的情况,所以请谨慎对待。
    • 我真正想回答的问题是算法应该是 UNDEFINED 还是 TEMPTABLE,或者视图定义中是否有另一个设置会锁定视图。以及我将体验到的性能效果是什么。另外,如果我做一些事情来强制它不可编辑,比如包含 HAVING 1 以使其成为聚合函数,则会强制它成为 TEMPTABLE 并且算法的选择没有实际意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多