MySQL用户创建数据库需要什么权限?
除root以外的用户是否可以创建数据库?MySQL用户创建数据库需要什么权限?
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'
我想知道这里缺少什么特权?另外,为什么第一行有附加密码?
UPDATE
让我进一步澄清我的问题的重点是什么。我有两个数据库机器,源和目标。源计算机上有许多客户数据库。我需要将这些源数据库移到其他目标机器上。
数据库的形式为mysqldump'ed .sql文件,从源文件到目标文件都是sftp。目标用户(不是root用户)必须从每个.sql文件本地重新创建数据库,执行一些操作,然后删除数据库。
我找不到给予目标用户这些权限而不给予他的全局权限*.*
的方法,该权限有效地使该用户像root一样危险。
在一个非常不幸的事件链中,用户'myguy'确实被允许创建数据库。他不能摧毁他们。 但是,我不希望该用户能够销毁他没有创建的数据库,那么我有什么特权给他?为什么这么难? – AKWF 2012-03-29 22:35:24
@AKWF:Hmph。这确实是......不幸的。您可能希望在创建数据库之后特别授予他“DROP”权限, AFAIK这是不可能在MySQL中自动执行的。他是通过脚本创建数据库吗,还是你无法控制他的行为? – Piskvor 2012-03-29 22:39:50
你需要做的是决定你想要这个特定的用户能够做什么,然后授予他们这些权限。例如,据此,他拥有db1和db2的所有权限,他可以在所有数据库上进行选择和创建,但显然无法更新或插入......奇怪的设置我会说。但是,如果你只是想让他只有阅读和更新,那么你会做这样的事情: GRANT SELECT,更新*。* TO'myguy'@'thatmachine'IDENTIFIED BY PASSWORD'* 12057DFA2BFBD8760D4788735B1C3E26889D7ECE' – 2012-03-29 22:44:50
密码字段是登录到MySQL本身时特定用户的密码是什么。当你说你想知道缺少什么特权时,我不确定你的意思。你究竟想要做什么?
我有一个用户必须下载.sql数据库转储并恢复它们在本地系统上。我不知道这些数据库的名字是什么,所以我必须给用户“创建*。*”。我认为创建数据库的用户能够放弃它是常识,但没有这样的运气。我不敢给用户“放在*。*”上,这是一个用于皮特的Web应用程序。我只想保护这个数据库用户并使他们能够做一些事情,但是如果用户遭到劫持则限制任何潜在的损害。 – AKWF 2012-03-29 22:39:12
对于网络应用程序,最好不要创建或删除任何东西,除非您知道该人确切知道他们在做什么 - 例如,使用PHPMyAdmin。 另外,您可能需要考虑一个数据库方案,其中不需要创建整个数据库。我看到很少的例子,最终用户需要能够创建整个数据库。 – 2012-03-29 22:51:59
即使在那 - 真的......你永远不应该删除/删除任何东西,只要使用一个布尔'删除'字段。 – 2012-03-29 22:53:08
有趣。好的,这是一个想法。而不是在目标机器上使用mysql,请专门为此事务使用备用数据库。 SQLite或者其他的东西。这样,他的权限与任何完全可操作的数据库无关,它们只能用于临时数据库和操作。你可能不得不改变一些脚本,或者不要,但是这样你会更安全。为这个特定的专长制造一小口控制权,然后在他完成时将其取消。可能是一些额外的工作 - 但它会解决这个问题。 – 2012-03-30 15:14:16