我正在建立一个包含公共、私有(仅限于内部)和机密数据(仅限于极少数)的数据库。它有非常具体的要求,即数据的安全性是在数据库端管理的,但是我在一个没有直接控制权限的环境中工作,更改它们的请求将耗费时间(2-3天)。
因此,我创建了一个结构,可以满足我们的需求,而不需要大量的许可。我在同一台服务器上创建了两个数据库,一个是内部数据库,它的表只能由特定用户在我们网络的某些子网中编辑。第二个是公共数据库,在该数据库中,我使用管理帐户创建仅限于内部数据库中表的公共字段的视图,以公开公共数据,而且它似乎运行良好。但是,数据应该只以一种方式流动,而视图不应该能够写入源表。而且我不能仅仅将公共数据库锁定为SELECTable,因为公共数据库用于我们公共网站的各种任务。
因此,我需要创建视图来限制某些脚本对表中某些字段的访问。我需要确保这些视图不能插入、更新或删除源表中的数据。要创建我使用的视图:
CREATE ALGORITHM = UNDEFINED
VIEW `table_view` AS
SELECT *
FROM `table`查看文档以防止更新,视图需要有聚合数据、WHERE子句中的子查询和ALGORITHM = TEMPTABLE。我会接受诱惑,但手册不清楚它是否会影响性能。手册在一段中指出:
如果可能的话,它更喜欢合并,因为合并通常更有效率。
然后立即声明:
显式选择TEMPTABLE的一个原因是,在创建临时表之后,以及在用于完成语句处理之前,可以在基础表上释放锁。这可能会导致比合并算法更快的锁释放,以便其他使用该视图的客户端不会被阻塞。
视图将在页面加载时被查询以生成页面的内容,合并是否仍然是more efficient,还是更低的锁定时间更适合我?不,通过帐户权限来处理这个问题并不是一个真正的选择,因为无法在各个字段上授予权限以满足合法的机密性要求。要满足这些要求,需要将每个表分割成2-3个表,其中包含具有同质保密性的字段。
如果该算法是未定义或可试探的,或者视图定义中是否存在另一个将锁定视图的设置。我将经历什么样的表演效果。另外,如果我做了一些事情来强迫它不可编辑,比如让1使它成为一个聚合函数,强制它是可诱惑的,并且算法的选择是没有意义的。
发布于 2010-07-28 01:25:58
我想知道你为什么不把用于不删除、插入或更新帐户的赠款锁起来。
MySQL似乎不支持角色,我会在没有这些授权的情况下定义一个角色&只是将帐户与该角色关联--遗憾.
https://stackoverflow.com/questions/3349233
复制相似问题