是否可以在公共mysql数据库上为某些用户提供某些数据?

时间:2015-01-30 20:30:08

标签: mysql database

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

2 个答案:

答案 0 :(得分:1)

据推测,这些数据集很大,性能很重要。这意味着特权系统应该尽可能粗糙。

如果我这样做,我会创建一个" public"数据库,并使用MySQL GRANT命令允许访客用户在该数据库上进行SELECT。

例如:

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

然后,对于非公共数据集,我将它们放入其他数据库中,并对用户GRANTed权限更具选择性。例如,这些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'@'%';

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

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

当然,结合这些数据集必须具有科学意义。那可能是也可能不是。

不要对创建多个数据库的想法感到震惊。它们实际上并不比计算机文件系统中的目录复杂。单个服务器可以毫无问题地提供数十个服务器。

MySQL绝对取决于这种安全性。托管服务提供商经常运行多租户服务器。

答案 1 :(得分:0)

我会考虑使用MariaDB(由MySQL的创始人编写的MySQL兼容数据库)而不是MySQL,因为它支持roles

它们都不像Oracle那样支持Row Security,但您可以通过添加“owner”列来模仿它,该列包含可以选择/更新行的角色名称。

添加WITH CHECK OPTION视图,该视图检查current_user是否在该列中指定的角色中。

添加触发器以正确设置所有者值。

更新:如果您无法更改表格但可以添加新表格,请添加与原始表格相同的新密钥,并添加所有者列,并加入视图中的表格。

http://www.sqlmaestro.com/resources/all/row_level_security_mysql/