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

4
很遗憾,这个问题可能有些宽泛,因为我无法找到适当的术语来帮助我整合所有内容。我对php / SQL非常陌生,并尝试设置一个非常简单的站点,具有非常简单的登录/注册功能。
  • 每当我注册新的网站用户时,是否应创建新的数据库用户?
  • CRUD权限是否安全地授予网站的所有用户?

我是否应该为注册创建DB用户,这个用户只能插入到用户表中,直到他们登录为止(不需要mysqli_connect()密码)?

一旦登录,他们将连接到不同类型的DB用户,这种用户具有更多使用网站的特权。

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

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

  • 总的来说,在一个小型网站中拥有> 10个DB用户是否不寻常?
  • 拥有许多类型的用户是否会带来性能/空间成本?

如果您有任何回复和链接,我将非常感激,并为这些基本问题道歉。


3
永远不应该向用户授予数据库级别的帐户。您认为只是因为您是亚马逊的客户之一,就可以在其数据库上拥有登录权限吗?《魔兽世界》的数据库?美国国内税务局的数据库等等... - Marc B
好的,但是如果我要更新他们的数据库,我必须登录某种特权帐户,对吧? - Richard
3
是的,该账户可以拥有所需的更改/删除/其他权限。但是用户不需要知道有关该账户的任何信息。他们作为用户“xyz”登录网站。但在后台,代码作为用户“pqr”登录mysql数据库。对于mysql来说,“xyz”业务并没有任何意义,它只是用户表中的一些字母。而“pqr”则是完整的mysql账户。 - Marc B
谢谢,这很有帮助。我会更新问题,去掉更加幼稚的部分! - Richard
1个回答

5
我在很多年前也曾经遇到过这个问题,所以这里是我希望当时能够得到的答案:
一般来说,这会让事情变得过于复杂。对于基本应用程序,管理用户权限的是你所进行的 API 调用中的 PHP 代码,一个数据库用户就足够了。所有用户通常都应该避免直接与数据库交互,以防止破坏数据的完整性。
考虑安全和限制是好的,但简单才是王道——你让它变得越复杂,维护起来就越难,因此错失角落的机会也就越大。 每当我注册一个新的 Web 用户时,我是否应该创建一个新的数据库用户? 不需要,数据库用户是由其权限区分的。因此,所有用户都符合具有不同特权级别的一组群组。数据库帐户与 Web 帐户是分开的——连接到数据库是在后台完成的,并且与正在使用的 Web 帐户没有关联。
一个好的方法是为每个直接连接到数据库的服务创建一个 DB 帐户。对于绝大多数情况,这将是一个服务,即你的 Web 服务器。如果应用程序增长并出现隔离的服务(如审计、微服务、安全、IOT),它们应该拥有自己的帐户。

CRUD权限是否可以赋予网站所有用户?

这个问题是错误的——你需要将CRUD权限授予数据库账户,因为它需要这些权限。对于在PHP中管理的CRUD权限,这取决于你的应用程序和特定的端点。例如,你可能不希望所有用户都能够删除用户记录,因此你的PHP代码应该防止这种情况发生。

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

数量取决于你的数据库。一般来说,有4个组

  • 数据库管理员
  • 数据库设计师
  • 普通终端用户
  • 本地终端用户

然而,如果你想授予表级别的权限,那么你可能需要更多的分支。这表明10个数据库账户是相当少的,几百个更有可能

更多的权限需要更多的空间,但这只是一个相当微小的考虑因素,并不应在性能方面起到很大作用。复杂性是下一个问题——仔细考虑您实际想要测试的组和排列数量。就上面的问题而言,我是一位单独的业余开发者——一个DBA帐户可能就足够了。如果有多个用户直接访问数据库(对于应用程序开发来说已经是一个糟糕的想法),那么可以根据权限分割它们。

对于简单的应用程序来说,谈论表级别权限只是过度杀伤力!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接