MySQL开发机器的权限

我正在pipe理两台遵循开发和生产机器模型的服务器。

生产机器是剥离的骨架软件,在严格的规则和有限的访问下运行。 然而,开发机器更开放 – 开发人员可以要求安装大部分任何东西(有一些例外),并且他们可以获得无限数量的MySQL数据库用于testing。

然而,在两台服务器上,开发人员必须要求开发机器上通常接受的新用户名/密码/数据库组合,并且只有在Web应用程序完成,打磨,安全并准备起飞时才能在生产机器上接受。

有没有办法在开发机器上创build每个开发人员有权限创build的用户(只是创build,不读取/修改/擦除)具有固定权限设置的模板用户? 这样,他们可以创build自己的新的安全的用户名/密码/数据库,而无需等待我接受他们的查询。

我们的开发服务器暴露在外(所以开发人员可以在家中进行SSH和工作),所以我不想给一个用户很多的权限,因为服务器上托pipe的应用程序的实验性质。 (如果数据库受到威胁,最好的办法是放弃应用程序数据库,而不是用户有权访问的所有数据库)。

MySQL没有“模板权限”的概念。 提供了一些有用的探测权限types,但这些types不够细致,无法构build等同的东西。

数据库创build用户需要执行三个步骤:

  • 创build新的数据库 – 通过授予创build数据库用户的CREATE许可。
  • 创build新用户 – 通过授予CREATE USER到数据库创build用户允许。 不幸的是,CREATE USER权限还允许使用DROP USER,RENAME USER和REVOKE ALL PRIVILEGES。 重要的是,这可以让你运行DROP USER'root'@'localhost'; 和类似的。
  • 授予读/写权限 。 权限从数据库创build用户stream向新用户,因此数据库创build用户必须对新创build的数据库拥有现有权限。 这可以通过在所有以前缀(例如dev1_)开头的数据库上授予所有特权来实现,并且要求新的数据库以该前缀开头。 WITH GRANT OPTION权限允许用户将权限授予新创build的用户。

正如你所看到的,除了用户创build部分,它几乎都可以工作。 一个可能的折中办法是创build每个开发者用户,这可以创build和使用多个testing数据库:

grant all privileges on `dev1_%`.* to 'dev1'@'%' identified by 'password'; grant create on `dev1_%`.* to 'dev1'@'%' identified by 'password'; 

这将创build一个只能创build和使用以“dev1_”开头的数据库的用户“dev1”。

由于MySQL不能单独提供解决scheme,我build议只编写一个程序来执行数据库和用户名创build步骤。 开发人员可以调用这样的问题:

 create_dev_database --comment "xyz app test database" database_name username 

由于您的程序正在控制数据库/用户创build,您可以:

  • 执行强密码 (没有“密码”密码,如上:))
  • 通过主机名强制访问限制 (限制连接到'%.example.com',而不是允许开发者select'%')
  • logging新数据库的访问细节和用途 (不要使用100个活动/hibernate数据库,也不要logging其用途)

这样的程序将不得不使用和保护你的MySQL根密码。 这将如何实现取决于平台。

祝你好运!

嗯,为什么没有开发人员pipe理自己的服务器在他们的开发虚拟机,与生产相同的安全锁(尽pipe不同的密码等)?

我在这里错过了什么? 发展不应该和生产一样,每个开发者都不应该有自己的环境,他们可以尽可能多地玩。