一个MySQL用户需要哪些权限才能创建数据库?

22

除了root用户,是否有其他用户可以创建数据库?

 GRANT SELECT, CREATE ON *.* TO 'myguy'@'thatmachine' IDENTIFIED BY PASSWORD '*12057DFA2BFBD8760D4788735B1C3E26889D7ECE' |
 GRANT ALL PRIVILEGES ON `db1`.* TO 'myguy'@'thatmachine'
 GRANT ALL PRIVILEGES ON `db2`.* TO 'myguy'@'thatmachine'

这里缺少什么权限?另外,为什么第一行附带一个密码?

更新

让我进一步澄清我的问题的重点。我有两台数据库服务器,源服务器和目标服务器。源服务器上有许多客户端数据库。我需要将这些源数据库移动到目标服务器。

这些数据库以mysqldump方式导出为.sql文件,然后通过sftp方式从源服务器传输到目标服务器。然后目标用户(而不是root用户)必须从每个.sql文件本地重新创建数据库,执行某些操作,然后删除该数据库。

我找不到一种方法可以给目标用户这些权限,而不会在*.*上授予全局权限,这基本上使该用户像root一样危险。


1
有趣。好的,这里有一个想法。不要在目标机器上使用mysql,而是使用一个专门用于此事务的备用数据库。SQLite或类似的东西。这样,他的权限与任何完全操作的数据库无关,它们只能与临时数据库和操作一起使用。您可能需要更改一些脚本或其他内容,但是这样做会更安全。为此特定功能创建一个小型控制区域,然后在完成后将其置空。可能需要一些额外的工作-但这将解决问题。 - Thomas Wright
3个回答

12

4
在一连串不幸的事件中,“myguy”用户确实可以创建数据库。他只是不能销毁它们。然而,我不希望该用户能够销毁他没有创建的数据库,那么我应该给他什么权限?为什么这么难? - RubyRedGrapefruit
@AKWF:哼。这确实很不幸。您可能希望在他创建数据库后立即为他授予“DROP”特权;据我所知,在MySQL中无法自动执行此操作。他是通过脚本创建数据库的,还是您无法控制他的行为? - Piskvor left the building
你需要做的是决定这个特定用户能够做什么,然后授予他们这些权限。例如,根据这个设置,他在db1和db2上拥有所有特权,并且可以在所有数据库上进行选择和创建,但显然不能更新或插入...我会说这是奇怪的设置。但如果你只想让他只读和更新,那么你可以这样做: GRANT SELECT, UPDATE ON . TO 'myguy'@'thatmachine' IDENTIFIED BY PASSWORD '*12057DFA2BFBD8760D4788735B1C3E26889D7ECE' - Thomas Wright
4
有点晚了,但请给 myguy 授予创建和删除名为 myguy_* 的数据库的权限(或者百分号或其他 MySQL 通配符)。 - Izkata
1
@AKWF @Izkata:如果你想让某个人对系统的一小部分拥有完全控制权,可以使用以下命令:grant all privileges on 'myguy_%'.* to myguy@localhost identified by 'password';(将引号替换为反引号 - 这是 mini-Markdown 格式的限制。) - Evan Donovan
显示剩余2条评论

3

正如Izkata和Evan Donovan在评论中提到的那样,实现这一点的最佳方法是在数据库 myguy%上给 myguy 所有权限。

您可以使用以下SQL完成此操作:

grant all privileges on 'myguy_%'.* to myguy@localhost identified by 'password';

这样,您就不必烦恼其他现有的数据库,myguy 可以尽情创建新的数据库。

0

密码字段是特定用户在登录MySQL本身时使用的密码。当您说想知道缺少哪些权限时,我不太确定您的意思。您具体想做什么?


我有一个用户必须下载.sql数据库转储并在本地系统上恢复它们。我不知道这些数据库的名称将提前是什么,因此我不得不给用户“create on *.*”。我认为创建数据库的用户能够删除它是常识,但没有这样的运气。我不敢给用户“drop on *.*”,这是一个Web应用程序。我只想保护这个数据库用户并使他们能够做一些事情,但限制任何潜在的损害,如果用户被劫持。 - RubyRedGrapefruit
对于Web应用程序,最好的做法是不允许创建或删除任何东西,除非您知道此人确切知道自己在做什么 - 例如,在使用PHPMyAdmin时。此外,您可能还需要考虑一个数据库方案,其中整个数据库的创建并不是必要的。我很少看到终端用户需要能够创建整个数据库的情况。 - Thomas Wright
即使如此,你也不应该删除任何东西,而是使用一个布尔型的“已删除”字段。 - Thomas Wright

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接