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

MySQL应用程序用户与数据库用户,mysql,sql,database,privileges,Mysql,Sql,Database,Privileges,不幸的是,这个问题可能有点宽泛,因为我无法找到合适的术语来帮助我将所有这些结合起来。我对php/SQL非常陌生,我正试图用非常简单的登录/注册功能建立一个最小的站点 每当我注册一个新的web用户时,我是否应该创建一个新的数据库用户 向网站的所有用户授予CRUD权限是否安全 我是否应该创建一个DB用户进行注册,该用户在登录之前只能插入到用户表中,而无需其他任何操作(mysqli_connect()无需密码) 一旦登录,他们将与不同类型的DB用户建立连接,该用户具有使用该网站的更多权限 应该有

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

  • 每当我注册一个新的web用户时,我是否应该创建一个新的数据库用户
  • 向网站的所有用户授予CRUD权限是否安全
我是否应该创建一个DB用户进行注册,该用户在登录之前只能插入到用户表中,而无需其他任何操作(mysqli_connect()无需密码)

一旦登录,他们将与不同类型的DB用户建立连接,该用户具有使用该网站的更多权限

  • 应该有多少不同类型的DB用户
我假设DB workers有一个小的用户组(包括一个root访问用户组),每种类型的web用户都有一个组(即雇主比雇员拥有更多的特权),还有一个仅用于注册的受限用户

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

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

多年前,我一直在努力解决这个问题,所以下面是我希望得到的答案:

一般来说,这会使事情变得过于复杂,基本应用程序的主要答案是:用户的权限将由您进行的API调用中的PHP代码管理,一个DB用户就可以了。所有用户通常应避免直接与DB for app dev交互,以防止侵犯数据的神圣性

考虑安全性和限制是很好的,但简单性才是最重要的——你做得越复杂,维护起来就越困难,因此就越容易错过关键案例

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

否,数据库用户通过其权限进行区分。因此,所有用户都符合一组具有不同权限级别的组。数据库帐户与web帐户是分开的-连接到数据库是在后台完成的,没有与正在使用的web帐户的链接

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

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

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

应该有多少不同类型的DB用户?

数字取决于您的数据库。一般来说,有

  • 数据库管理员
  • 数据库设计者
  • 临时终端用户
  • 本机最终用户
但是,如果要授予表级权限,则可能需要进一步扩展。这意味着10分贝的账户数量相当少

特权越多,需要的空间就越大,但这是一个相当小的考虑因素,不应该在性能上起到很大的作用。复杂性是下一个问题——仔细考虑您实际想要测试多少组和排列。在上面的问题中,我是一个单一的业余开发人员——一个DBA帐户可能就可以了。如果有多个用户直接访问数据库(对于应用程序开发人员来说,这可能是一个坏主意),那么可能会使用不同的权限将他们分开


谈论一个简单应用程序的表级权限简直是过火了

您不应授予用户数据库级帐户。你认为你是amazon.com DBs的客户之一就拥有登录权限吗?魔兽世界数据库?国税局数据库等…?好的,但如果我要更新他们的数据库,我必须登录某种特权帐户。不?是的。该帐户可以拥有所需的更改/删除/任何权限。但用户永远不需要知道有关该帐户的任何信息。他们以用户“xyz”的身份登录网站。但在后台,代码以用户“pqr”的身份登录到mysql。xyz业务对mysql来说毫无意义。只是用户表中的一些字母。然而,pqr是一个成熟的mysql帐户。谢谢,这很有帮助。我会更新问题,去掉更幼稚的部分!