假设我们有一个在mysql上运行的公共DNA数据库。数据库仅包含完整数据。在这种情况下,某些特殊用户希望将实验数据添加到数据库中,而这可能是不完整的,或者不希望每个人都可以看到。相反,他们希望只有具有正确特权的用户才能看到实验数据。您将采取什么方法来实现这一目标?

最佳答案

大概这些数据集很大,并且性能很重要。这意味着特权系统应尽可能地粗糙。

如果这样做,我将创建一个“公共”数据库,并使用MySQL GRANT命令允许来宾用户在该数据库上进行SELECT。

例如:

CREATE USER 'guest'@'%' IDENTIFIED BY 'changethispassword';
GRANT SELECT ON public.* TO 'guest'@'%';


然后,对于非公开数据集,我将它们放入其他数据库中,并对用户的GRANT特权更具选择性。例如,这些GRANT使两个不同的用户可以访问私人信息和公共信息。

CREATE USER 'venter'@'%' IDENTIFIED BY 'changethispassword';
GRANT SELECT ON public.* TO 'venter'@'%';
GRANT SELECT ON celera.* TO 'venter'@'%';
CREATE USER 'collins'@'%' IDENTIFIED BY 'changethispassword';
GRANT SELECT ON public.* TO 'collins'@'%';
GRANT SELECT ON hgp.* TO 'collins'@'%';


拥有public数据库和celera数据库的SELECT特权的用户可以发出这样的查询,从而允许无缝(如果不是最佳执行)合并私有数据和公共数据。

 SELECT whatever
   FROM public.AGCT
  UNION ALL
 SELECT whatever
   FROM celera.AGCT


当然,将这些数据集结合起来必须具有科学意义。事实可能如此,也可能并非如此。

创建多个数据库的想法不要惊慌。它们确实比计算机文件系统中的目录更复杂。一台服务器可以毫无问题地交付数十台服务器。

MySQL绝对可以达到这种安全性。托管提供商定期运行多租户服务器。

关于mysql - 是否可以在公共(public)mysql数据库上为某些用户提供某些数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28244089/

10-12 22:01
查看更多