mysql - 是否可以在公共(public) mysql 数据库上向某些用户提供某些数据?

标签 mysql database

假设我们有一个在 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/

相关文章:

python - MySQLdb初始连接超时

mysql - 是否规范化数据库?只读 MyISAM 表,性能是主要优先级(MySQL)

java - 如何创建 org.springframework.dao.DataAccessException 实例?

database - 我可以用 JPA 命名我的约束吗?

java - 数据未插入到 android 上的 SQLite 数据库中?

c++ - 当在不同函数中调用 mysql_store_result() 时,mysql_free_result() 出现段错误

mysql - 具有 2 个不同可连接条件的 Ruby 查询

php - 在 MySQL 中同步两个表中的行数据的最佳方法是什么?

java - 在android中打开SQLite数据库文件

php - 一个数据库或多个数据库