假设我们有一个在 mysql 上运行的公共(public) DNA 数据库。数据库仅包含完整数据。在这种情况下,一些特殊用户想要将实验数据添加到数据库中,这些数据可能不完整或者他们不希望它对每个人都可见。相反,他们希望实验数据仅对具有正确权限的用户可见。您会采取什么方法来实现这一目标?
最佳答案
想必这些数据集很大,并且性能很重要。这意味着权限系统应该尽可能粗糙。
如果我这样做,我会创建一个“公共(public)”数据库,并使用 MySQL GRANT 命令允许 guest 用户在该数据库上进行 SELECT。
例如:
CREATE USER 'guest'@'%' IDENTIFIED BY 'changethispassword';
GRANT SELECT ON public.* TO 'guest'@'%';
然后,对于非公开数据集,我会将它们放入其他数据库中,并对用户授予的权限更有选择性。例如,这些 GRANT 授予两个不同的用户访问私有(private)信息和公共(public)信息的权限。
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 权限的用户可以发出这样的查询,从而实现无缝(如果不是最佳执行)合并私有(private)和公共(public)数据。
SELECT whatever
FROM public.AGCT
UNION ALL
SELECT whatever
FROM celera.AGCT
当然,将这些数据集结合起来必须具有科学意义。情况可能是这样,也可能不是。
不要对创建多个数据库的想法感到 panic 。它们实际上并不比计算机文件系统中的目录更复杂。一台服务器可以毫无问题地交付数十个。
MySQL 绝对能够满足这种安全性。托管提供商通常运行 Multi-Tenancy 服务器。
关于mysql - 是否可以在公共(public) mysql 数据库上向某些用户提供某些数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28244089/