MySQL数据库用户:需要哪些特权?


52

WordPress的简短安装说明(“ 5分钟”)指出:

在您的Web服务器上为WordPress创建一个数据库,并为拥有访问和修改它的所有特权的MySQL用户创建数据库。

在专业设置新博客的同时,我想知道它如何映射到MySQL数据库用户特权/权限配置所提供的功能:

  • 数据: SELECTINSERTUPDATEDELETE
  • 定义: CREATEALTERDROP
  • 额外: INDEX
  • 更多:
    1. LOCK TABLES
    2. REFERENCES
    3. CREATE TEMPORARY TABLES
    4. CREATE VIEW
    5. SHOW VIEW
    6. CREATE ROUTINE
    7. EXECUTE
    8. ALTER ROUTINE

我很确定前三个组的名称是Data,Definition和Extra。但是“ 更多”条目下面的其他内容呢?通常,我会说这些不是必需的,但是我想得到第二个意见。

Answers:


13

正如您所指出的,其他的则不需要。

顺便说一句,您可以做的是根据请求的页面有条件地设置用户/密码。就像在正常使用中没有选择/插入/更新/删除的特权那样,而在访问升级页面时还具有与定义/索引相关的东西的特权。


1
是否有关于如何在WordPress环境中根据请求的页面有条件地设置用户/密码的参考?TA
superjos

@superjos:并不是我不知道该怎么做,但要旨是在wp-config中定义普通的数据库用户select / insert / update / delete,并且当url匹配相关的/时。 wp-admin页面(可能是升级,激活主题和激活插件),以定义可以执行其他所有操作的替代用户。
Denis de Bernardy 2014年

34

“所有特权”通常意味着您应将所有内容授予用户。但是...

我发现至少有一篇文章声称MySQL用户只需要:

  • 选择
  • 插入
  • 更新

深入研究,我发现为了完全运行(自动更新,插件安装/卸载等),WordPress需要一些附加权限:

  • 删除
  • ALTER(用于更新)
  • 创建表
  • 滴台

另外,未引用但很有意义:

  • 指数

但是,这些是我能找到的仅有的两个可靠的参考,这些参考得到其他地方发表的观点的支持。我仍然鼓励您坚持使用GRANT ALL,但是如果您绝对必须限制数据库的使用,请从这7个特权开始并进行全面测试,以确保一切正常。


感谢您分享您的想法。对于安装的那个站点,我没有全部授予,因为这不是开发站点,而是坚持使用所有incl。指数。到目前为止看起来不错,我想我会在接下来的几天对其进行跟踪,这是一个包括现实生活在内的网站。很多插件的使用等等。对于INDEX,我也可以搜索core和mysql手册。
hakre 2011年

1
请记住,第三方插件几乎可以调用它们想要的任何SQL语句...,因此请确保在安装依赖于已撤消特权的内容之前正确审核了它们。
EAMann 2011年

12

这是Codex在限制数据库用户权限时必须说的话:

对于正常的WordPress操作,例如发布博客文章,上传媒体文件,发布评论,创建新的WordPress用户和安装WordPress插件,MySQL数据库用户只需要对MySQL数据库具有数据读取和数据写入权限;选择,插入,更新和删除。

因此,可以撤销任何其他数据库结构和管理特权,例如DROP,ALTER和GRANT。通过撤消此类特权,您还可以改善遏制策略。

注意:某些插件,主题和主要的WordPress更新可能需要进行数据库结构更改,例如添加新表或更改架构。在这种情况下,在安装插件或更新软件之前,请暂时为数据库用户提供所需的特权。

http://codex.wordpress.org/Hardening_WordPress


2
我会尽可能尝试实践“最小特权”原则。(有用的)引用信息不再存在于链接的Codex文章中,因此感谢您在此处复制该信息。
安东尼G-莫妮卡的大法官

2

关于redburn帖子中的“注释”,Wordpress Codex也有一个警告,您还应该阅读有关更新和数据库架构更改的警告...

(编辑:但是,我注意到在创建或更新用户时 不再在特权列表中看到“ GRANT”。也许应该在列表中添加“ CREATE”?有人知道吗?-使用Hostgator cPanel ,2016年3月-)

警告:在
没有这些特权的情况下尝试更新[ SELECT,INSERT,UPDATE,DELETE,DROP,ALTER和GRANT数据库模式发生更改时,]可能会导致问题。因此,不建议撤销这些特权。如果出于安全原因确实需要执行此操作,请确保首先制定了可靠的备份计划,并且已测试的常规整个数据库备份都是有效的,并且可以轻松还原。数据库升级失败通常可以通过将数据库还原到旧版本,授予适当的权限,然后让WordPress再次尝试更新数据库来解决。还原数据库会将其恢复为该旧版本,然后WordPress管理屏幕将检测到该旧版本,并允许您在其上运行必要的SQL命令。大多数WordPress升级不会更改架构,但有些会更改。仅主要点升级(3.7至3.8,例如)将更改架构。较小的升级(3.8到3.8.1)通常不会。但是,请保持定期备份。

食典:http : //codex.wordpress.org/Hardening_WordPress


0

我的意见与上面的@EAMann以及他引用的消息来源相同:GRANT ALL对于确保您的网站正常运行和将来是必需的。即使在生产现场,也应尝试遵守用户手册。

作为为WordPress核心和一些插件贡献代码的人,我建议您保留用户手册中建议的默认数据库特权(wpdatabasename上的GRANT ALL PRIVILEGESES on wpdatabasename。* TO“ wordpressusername” @“ hostname”)。

WordPress源代码(现在和将来)都假定WordPress数据库用户具有给定WordPress数据库的所有数据库特权。如果您的设置缺少任何数据库特权,则在升级WordPress并添加更多插件时可能会遇到问题。

因此,除非您知道自己在做什么,有非常特定的需求并且不会忘记拥有自定义的DB特权,否则您实际上不应使用与本手册建议的默认DB特权不同的DB特权。

此后,法典页面已更新了如何使用各种系统和屏幕截图上的示例进行操作。 https://codex.wordpress.org/Installing_WordPress#Step_2:_Create_the_Database_and_a_User

创建数据库名称和用户(通过PHPMyAdmin):https : //codex.wordpress.org/Installing_WordPress#Using_phpMyAdmin

创建数据库名称和用户(通过MySQL命令行客户端):https : //codex.wordpress.org/Installing_WordPress#Using_the_MySQL_Client

mysql> CREATE DATABASE wpdatabasename;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON wpdatabasename.* TO "wordpressusername"@"hostname"
    -> IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> EXIT
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.