2010-03-05 44 views
2

我将在同一台mySql服务器上使用不同项目使用的多个表。大部分数据都很敏感,并且需要位于权限墙后面。然而,许多敏感数据表依赖于用户和部门信息的不敏感数据表。所以我看到了三个选项,我不确定选择哪一个。在MySql中管理跨数据库读取,查看或权限

所有在表级别的权限

最简单的所有解决方案中,除了我没有在数据库服务器上控制权限,传统的服务器团队只做数据库级别的权限一个数据库,让他们允许它是一场我可能没有赢的影响力的政治斗争,跟踪所有的权限将是一个痛苦。

在多个数据库,与数据库级权限

我可以分割表到数据库的区域,所以部门广泛的信息,比如工作人员的数据,可以在它自己的数据库和工具,编辑员工数据可以更新&对部门数据库的INSERT访问权限。其他工具需要访问员工列表的部分内容,公职人员目录对员工表具有SELECT访问权限,但员工表的分析表需要保持私人状态,如个人联系信息,复制代码或帐单索引。我需要将员工表分成公共或私人表,但我会再次遇到表级权限问题。所以我需要将部门数据库分成共享部门和部门私人数据库。

跨数据库视图 我会创造在从该帐户不能访问其它数据库中提取数据一个数据库视图。因此,我可以将所有员工信息放在部门数据库中,然后在网络数据库中创建一个仅查看应公开可用的列(名称,部门,扩展名)的视图。这将允许我实际上拥有列级别的SELECT权限,而不必沉迷于权限。我担心的是速度。原始表格中的数据将被完全索引,但文档似乎是矛盾的,无论查询视图时是否索引列。

有没有其他人使用过这三个选项中的任何一个?你有没有想过的更好的?除了我已经指出的任何选项之外,您可以看到哪些缺陷?

回答

1

视图和存储过程是你最好的选择。视图可用于提供通用访问,但如果某些查询执行不足,请重新编写它们以使用存储过程绕过视图以提高性能。

+0

存储过程是否也跨越权限屏障,我可以使用高级帐户设置过程,然后使用低级帐户查看数据? –

+0

是的 - 存储过程的主要功能之一是它们可以更好地管理权限。存储过程定义的帐户会更好,因为本地帐户 - 例如'sp_owner'@'localhost' - 可以降低远程用户在破解密码时获得强大访问权限的风险。最灵活的安排是,如果您的存储过程被定义为“create definer = current_user procedure ...”,那么决定将它们定义在哪个帐户下可以推迟到加载时间。 – Martin