MySQL应用程序用户和数据库用户

标签 mysql sql database privileges

不幸的是,这个问题可能有点宽泛,因为我无法找到合适的术语来帮助我将所有这些整合在一起。我是 php/SQL 的新手,我正在尝试建立一个具有非常简单的登录/注册功能的最小站点。

  • 每当我注册一个新的网络用户时,我是否应该创建一个新的数据库用户?
  • 授予网站所有用户的 CRUD 特权是否安全?

我真的应该创建一个数据库用户来注册吗,一个只能插入到用户表中的用户,在他们登录之前不能插入其他任何东西(mysqli_connect() 不需要密码)?

登录后,他们将连接到不同类型的数据库用户,该用户拥有更多使用该网站的权限。

  • 应该有多少种不同类型的数据库用户?

我假设一小组用户用于 DB 工作人员(包括一个用于 root 访问的用户),另一组用于每种类型的 Web 用户(即雇主比雇员拥有更多权限),以及另一个仅用于注册的受限用户。

  • 总而言之,一个小型网站中超过 10 个 DB 用户是否不寻常?
  • 拥有多种类型的用户是否会产生性能/空间成本?

感谢任何回复和链接,如果这些是非常基本的问题,我深表歉意。

最佳答案

多年前我就为此苦苦挣扎,所以这是我希望得到的答案:

通常,这会使事情过于复杂,基本应用程序的标题答案是:用户的权限将由您进行的 API 调用中的 PHP 代码管理,一个数据库用户就可以了。一般情况下,所有用户应避免直接与应用程序开发的数据库交互,以防止违反数据的神圣性。

考虑安全和限制固然很好,但简单才是王道 - 你做得越复杂,就越难维护,因此就越容易遗漏极端情况。

每当我注册一个新的网络用户时,我是否应该创建一个新的数据库用户?

不是,数据库用户是按权限区分的。因此,所有用户都符合一组具有不同权限级别的组。数据库帐户与 Web 帐户是分开的 - 连接到数据库是在幕后完成的,没有链接到正在使用的 Web 帐户。

一个好的方法是为每个直接连接到数据库的服务创建一个数据库帐户。对于绝大多数人来说,这将是一项服务,即您的 Web 服务器。如果应用程序发展壮大,审计、微服务、安全、物联网等独立服务如雨后春笋般涌现,他们可能应该拥有自己的帐户。

授予网站所有用户的 CRUD 特权是否安全?

这个问题被误导了——您将 CRUD 提供给需要它的数据库帐户。对于 PHP 内部管理的 CRUD 权限,它实际上取决于您的应用程序和特定端点。例如,您可能不希望所有用户都能够删除用户记录,因此您的 PHP 代码应防止这种情况发生。

应该有多少种不同类型的数据库用户?

数量取决于您的数据库。一般有4 groups

  • 数据库管理员
  • 数据库设计师
  • 临时最终用户
  • 本地最终用户

但是,如果您想授予表级权限,那么您可能需要多分支一些。这表明 10 个 DB 帐户是相当小的数量,several hundred is more likely .

权限越多,需要的空间也越大,但这是一个相当细微的考虑,对性能的影响应该不大。下一个问题是复杂性——仔细考虑您实际想要测试多少组和排列。在上述问题的情况下,我是一个单例爱好者开发者 - 一个 DBA 帐户可能没问题。如果有多个用户直接访问数据库(对于应用程序开发人员来说可能已经不是一个好主意),则可以将它们拆分为不同的权限。

谈论一个简单应用程序的表级权限简直太过分了!

关于MySQL应用程序用户和数据库用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24397002/

相关文章:

php - 在下拉列表中显示从 mysql 中选择的选项

mysql - 错误代码 : 1215 in mysql cannot add foreign key constraint

sql - 多项选择标准

database - aerospike-go 库中的嵌入式结构意外行为

php - 将表单与 PHP 脚本链接以从数据库中检索数据

mysql - 毫秒精度的时间戳: How to save them in MySQL

mysql - SQL 搜索特殊字符

如果 2 个表中的任何一个满足条件,则 MySQL JOIN

python - 有时脚本闲置,需要我按 RETURN 才能解锁它们 - Python

database - 集群数据库如何处理 Kubernetes 上的主节点宕机?