PHP、MySQL应用程序用户和凭据应在应用程序或数据库上运行?

PHP、MySQL应用程序用户和凭据应在应用程序或数据库上运行?,php,mysql,security,Php,Mysql,Security,我们正在创建PHP/MySQL web应用程序 一侧: 我的PHP开发人员相信,创建一个包含用户/密码/权限的表可以授予或拒绝访问最终应用程序的某些部分 另一方面,我的数据库专家希望直接使用数据库来创建用户/密码/权限 对于DB选项,我认为我们需要在MySQL前面创建一个单独的web服务,这样才能工作吗?还是让用户直接访问数据库 这样做的最佳方式是什么? 如何建立良好的php/mysql应用程序,如Dupral或Joomla 是的,这是一个关于设计最佳实践的问题,但我需要找出PHP/MySQL开

我们正在创建PHP/MySQL web应用程序

一侧:
我的PHP开发人员相信,创建一个包含用户/密码/权限的表可以授予或拒绝访问最终应用程序的某些部分

另一方面,我的数据库专家希望直接使用数据库来创建用户/密码/权限

对于DB选项,我认为我们需要在MySQL前面创建一个单独的web服务,这样才能工作吗?还是让用户直接访问数据库

这样做的最佳方式是什么? 如何建立良好的php/mysql应用程序,如Dupral或Joomla


是的,这是一个关于设计最佳实践的问题,但我需要找出PHP/MySQL开发的最佳实践。MySQL应该管理web用户,还是只管理一个DB用户和应用程序级别的其他用户

遵循PHP路线


无论您是通过PHP还是直接通过MySQL创建登录,它们最终都会出现在您的MySQL数据库中。不过,这两种方法之间存在一些差异。主要的一点是,如果您使用PHP,您的用户将能够自己创建登录名(这意味着自己选择密码)。如果您选择数据库路径,则必须为用户分配密码


在MySQL中,可以使用类似
SHA()
的东西来安全地散列密码(使用salt),尽管据我所知,您无法在MySQL中选择更安全的加密算法。SHA-256/SHA-512几乎肯定能满足您的需求,不过您可能需要更安全的产品

使用PHP,您可以访问and等方法,这些方法可以与
PASSWORD\u BCRYPT
PASSWORD\u ARGON2I
等算法一起使用(比标准SHA-256或SHA-512安全得多)


最后,你必须考虑在数据库违反(每天大约有30000)发生的情况下会发生什么。如前所述,无论哪种情况,加密密码都存储在数据库中。如果您通过MySQL创建登录,您很可能还将公开加密的方法(可能还包括使用的任何加密方法)。如果您通过PHP构建登录,攻击者将需要对您的网站进行完整的shell访问,以便了解您是如何加密密码的



最重要的是,绝不允许用户访问您的数据库。事实上,我建议确保您的主要数据库用户角色只有与数据交互的权限(可能是
选择
插入
更新
)并使用具有
CREATE
权限的独立用户来创建用户。

在编写重复主题不是关于mysql和php之前,请与开发人员讨论这一问题:您的问题(以及重复的问题)是关于一般web应用程序设计原则,这些原则独立于底层技术。mysql的密码哈希功能与php的功能相比有多好并不重要。我同意你的结论,但你确实需要更新答案中关于mysql密码哈希功能的部分。更不用说验证mysql用户的其他方法了。