【问题标题】:Users in database server or database tables数据库服务器或数据库表中的用户
【发布时间】:2014-04-23 21:28:09
【问题描述】:

我遇到了一个关于客户端服务器应用程序设计的有趣问题。

我们有这个基于浏览器的管理应用程序,它有许多用户使用该系统。很明显,在该应用程序中,我们有一个用户管理模块。

我一直认为在数据库中有一个用户表来保存所有登录详细信息就足够了。

但是,一位高级开发人员表示,如果不是设计不佳,则应该在数据库服务器层进行用户管理。他的意思是,如果用户想要使用应用程序,那么应该在用户表和数据库服务器中创建一个用户作为用户帐户。

因此,如果我有 50 个用户使用我的应用程序,那么我应该有 50 个数据库服务器用户登录。

我个人认为在该数据库的数据库服务器中只有一个用户帐户就足够了。只需授予此用户允许的权限即可操作应用程序所需的所有必要操作。与应用程序交互的用户应该在数据库表中创建和管理他们的用户帐户,因为它们与应用程序层更相关。我不认为并同意需要为用户表中为应用程序创建的每个用户创建一个数据库服务器用户帐户。

单个数据库服务器用户应该足以处理应用程序发送的所有查询。

真的希望听到一些建议/意见以及我是否遗漏了什么?性能或安全问题?

非常感谢。

【问题讨论】:

  • 不——他的方法无法扩展。当您拥有 10 万用户时会发生什么?

标签: database-design


【解决方案1】:

不,用户有权使用该应用程序;应用程序被授权访问数据库。你不需要两者。

您可能在数据库中拥有不同的访问权限(例如,用户不能删除或删除表;管理员可以做任何事情)。在这种情况下,通常采用用户-组-角色设计,其中用户被分配到组,每个组都有自己的权限。

【讨论】:

  • duffymo :如何识别该用户可以删除来​​自多个表的记录。应该向用户组授予每个表、proc 等权限吗?授予这样的权限非常乏味。还有其他授予权限的选项吗?
  • 如果您需要该级别的粒度,那么我不知道是否有其他选择。与您的 DBA 合作。与用户数量相比,角色的数量应该很小。编写这样的脚本会很聪明。
【解决方案2】:

可悲的是,您的“高级开发人员”错了。我不确定有资格成为“高级”的人如何说 1 个应用程序用户 ==1 个数据库用户。如前所述,应用程序不会扩展(在许多方面)。如果数据库类似于 Oracle,他是否建议大型 Web 应用程序的任何用户在许可成本方面也应被视为数据库用户?处理用户管理呢?

我不知道您使用的是什么数据库,但在大多数情况下,一个负责通过应用程序服务器访问数据库的用户就足够了。应用用户可以存储在数据库、LDAP等中。

您不希望 1 个应用程序用户 = 1 个数据库用户的维护噩梦。前辈提出这样的建议应该感到羞耻。

【讨论】:

  • 如果我想审计表的更改,如何确定哪个用户更改或删除或添加了记录?
  • 在什么情况下不会扩展?你指的是连接池吗?使用 SET ROLE、SET SESSION AUTHORIZATION 或 GRANT PROXY 很容易使用连接池和数据库角色
【解决方案3】:

我没有看到在数据库中为应用程序用户创建用户帐户的任何有效点。

【讨论】:

    【解决方案4】:

    有一点我认为支持要求用户拥有数据库用户帐户。如果您采用具有单独的自定义用户表的方法,您的应用程序需要有一个连接字符串,以便连接到数据库以验证用户身份。如果您的应用程序被黑客入侵,那么黑客就拥有数据库凭据来为所欲为。

    但是,如果登录的用户有一个数据库帐户,那么您的应用程序可以只使用该用户的数据库凭据。无需在您的应用中存储数据库连接字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2018-05-31
      相关资源
      最近更新 更多