2017-02-10 51 views
5

无论是使用MySQL的5.6或5.7,在AWS RDS托管,或Docker MySQL container,我想创建一个最小权限的用户,例如命名为creator,可以执行以下操作:创建MySQL数据库,用户和授予权限所需的最低权限是什么?

  • 创建一个新的数据库。
  • 创建一个新用户。
  • 授予新数据库中所有表的新用户SELECT和INSERT权限。

我宁愿如果creator用户不能访问它不负责创建的现有数据库。

这是可以实现的吗?

我迄今为止的研究表明,这样的creator用户可能需要跨MySQL实例的全局SELECT和INSERT权限,但这看起来过多。

回答

2

你可以用一个存储过程,它比SP simplier,可能是你正在寻找的解决方法,这样做: GRANT CREATE USER ON *.* TO '<user>'@'<host'; GRANT ALL PRIVILEGES ON `<user>_%`.* TO '<user>'@'<host>' WITH GRANT OPTION; 正如你在this answer你需要注意几点看:

  1. 用户将只能创建与他的用户名+开始数据库“_”(使用给定链路的例子,如果你的用户名是aaa您可以创建数据库的名字是aaa_example,如果AAA想创建一个名为bbb_example MySQL数据库会放弃拒绝权限的错误
  2. 他只会对由他创建的那些数据库拥有特权,但是他创建的用户创建的特权(如果他授予该特权)。
  3. 然而,他可能会管理他拥有的数据库中的特权。

考虑到这一点,您可以调整此`<user>_%`以适应您的大部分需求。