【问题标题】:What permission is required for a MySQL user to create a database?MySQL用户创建数据库需要什么权限?
【发布时间】:2012-03-29 22:25:26
【问题描述】:

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'ed .sql 文件的形式,这些文件是从源到目标的 sftp。目标用户,而不是 root,必须从每个 .sql 文件在本地重新创建数据库,执行一些操作,然后删除数据库。

如果不授予目标用户在 *.* 上的全局权限,我无法找到将这些权限授予目标用户的方法,这实际上使该用户与 root 一样危险。

【问题讨论】:

  • 有趣。好的,这是一个想法。不要在目标机器上使用 mysql,而是使用专门用于此事务的备用数据库。 SQLite,或者类似的东西。这样,他的权限与任何完全可操作的数据库无关,它们只能用于临时数据库和操作。您可能需要更改一些脚本,或者不需要更改,但这样会更安全。为这个特定的专长做一小部分控制,然后在他完成后将其无效。可能是一些额外的工作 - 但它会解决问题。

标签: mysql


【解决方案1】:

【讨论】:

  • 在一个非常不幸的事件链中,确实允许用户“myguy”创建数据库。他就是无法摧毁他们。然而,我不希望那个用户能够破坏他没有创建的数据库,那么我给他什么特权呢?为什么这么难?
  • @AKWF:哼。这确实是……不幸。在他创建数据库之后,您可能想专门授予他DROP 权限,以访问他创建的数据库; AFAIK 这不可能在 MySQL 中自动完成。他是通过脚本创建数据库,还是您无法控制他的行为?
  • 您需要做的是确定您希望该特定用户能够做什么,然后授予他们这些权限。例如,据此,他对 db1 和 db2 拥有所有权限,并且可以在所有数据库上选择和创建,但显然无法更新或插入......我会说奇怪的设置。但是,如果您只想让他阅读和更新,那么您可以执行以下操作:GRANT SELECT, UPDATE ON . TO 'myguy'@'thatmachine' IDENTIFIED BY PASSWORD '*12057DFA2BFBD8760D4788735B1C3E26889D7ECE'
  • @AKWF 有点晚了,但给myguy 权限以创建和销毁名为myguy_* 的数据库(或% 或任何mysql 通配符)
  • @AKWF @Izkata:如果您希望该人完全控制系统的一小部分,您可以使用:grant all privileges on 'myguy_%'.* to myguy@localhost identified by 'password';(将 myguy_% 周围的引号替换为反引号 - 这是一个mini-Markdown 格式的限制。)
【解决方案2】:

正如 Izkata 和 Evan Donovan 在 cmets 中提到的那样,实现此目的的最佳方法是授予 myguy 数据库 myguy_% 的所有权限。

您可以使用以下 sql 执行此操作:

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

这样您就不必为其他现有数据库而烦恼,myguy 可以根据自己的喜好创建新的数据库。

【讨论】:

    【解决方案3】:

    密码字段是特定用户登录 MySQL 时的密码。当您说您想知道缺少哪些特权时,我不确定您的意思。你到底想做什么?

    【讨论】:

    • 我有一个用户必须下载 .sql 数据库转储并在本地系统上恢复它们​​。我不知道这些数据库的名称是什么,所以我不得不给用户“create on .”。我认为创建数据库的用户能够删除它是常识,但没有这样的运气。我不敢给用户“drop on .”,这是看在Pete 的份上的Web 应用程序。我只是想保护这个数据库用户并使他们能够做一些事情,但如果用户被劫持,则限制任何潜在的损害。
    • 对于网络应用程序,最好不要允许创建或删除任何内容,除非您知道该人确切地知道他们在做什么 - 例如,在使用 PHPMyAdmin 时。此外,您可能需要考虑一个不需要创建整个数据库的数据库方案。我很少看到最终用户需要能够创建整个数据库的示例。
    • 即便如此 - 真的......你永远不应该删除/删除任何东西,只需使用布尔“已删除”字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2011-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2020-06-21
    • 2010-09-10
    相关资源
    最近更新 更多