【问题标题】:User Management for Database Access数据库访问的用户管理
【发布时间】:2016-03-16 23:53:39
【问题描述】:

我对编程非常陌生,并且有一个与数据库中的用户管理相关的基于理论的问题。我不太想怎么问这个问题,所以如果这是一个重复的问题,请随时链接。

tldr:核心问题是新用户需要连接到数据库才能执行 CREATE USER...但是要建立该连接,他们需要在某个时候已经 CREATE-d。

完整问题:

如果我有一个允许多个用户访问的数据库,我了解管理员可以使用用户选择的凭据创建“服务器端”用户(通过 CREATE USER)。每个用户都可以通过登录页面打开数据库连接,方法是输入他们的凭据,这些凭据随后作为参数传递给新连接。

但是,如果我想消除管理员设置新用户帐户的需要怎么办?也就是说,我希望最终用户导航到注册页面,他们在其中选择凭据,点击注册并可以访问数据库。

我目前的理解是,这样做的唯一方法是创建“伪用户”帐户。即注册只是将新用户凭据插入凭据表中。随后,所有用户都通过同一连接“登录”,但必须首先清除登录页面,该页面检查他们的输入凭据是否与存储在凭据表中的凭据匹配。 (这仍然需要管理员创建一个具有适当权限的“真实”用户,否则每个人都将通过 root 用户连接)。

编辑:我的意思是说这是通过 php。

这听起来对吗?

感谢社区。​​p>

【问题讨论】:

    标签: php mysql database authentication user-management


    【解决方案1】:

    您将应用用户与数据库用户混合在一起。它们很少(如果有的话)是相同的。

    您的应用需要一个用于 mysql 的用户帐户,但您的应用需要在数据库中跟踪其自己的用户——通常在一个名为 app_users 的表中。可能如下所示的表格:

     id   username   email   passwd_hash   salt
     --   --------   -----   -----------   ----
     01   fred       f@a.c   sdfasdf3r23   asdwer32
    

    Web 应用程序的用户永远不会直接访问数据库,但所有应用程序查询都将通过应用程序的帐户运行。这些查询应该是准备好的语句,或者只执行存储过程的准备好的语句。不应允许应用帐户更改架构。应用程序连接到数据库所需的应用程序凭据应加密并存储在 Web 根目录之外,但应存储在 Web 服务器运行的操作系统用户有权读取的文件夹中。

    您可能拥有多个 mysql 应用帐户,具有不同级别的权限,但这些帐户仍然与存储在数据库中的用户帐户不同。

    【讨论】:

    • 好的,所以结构类似于: 至少一个应用程序帐户是数据库用户(如 user:root);网络应用程序的所有用户最终都会通过此应用程序帐户发送查询;通过使用 app_users 表检查 Web 应用登录详细信息来处理身份验证;
    • 正确。您的登录基本上是查询用户名为 X 且密码哈希为 Y 的用户的 user_id...您将其粘贴到会话中,现在您知道该用户是谁了。
    • 而且由于您要存储密码哈希,您应该阅读“正确”的方法:secure.php.net/manual/en/book.password.php
    【解决方案2】:

    您不需要为访问您页面的每个用户提供一个 MYSQL 用户帐户。 去为 groubs 设置一些 MYSQL 用户帐户,例如:

    PUBLIC_USER 适用于所有未以较少权限登录的用户。

    PROTECTED_USER 用于拥有更多权限的登录用户。

    PRIVATE_USER 用于拥有最高权限的用户,但作为 ROOT 帐户的权限较少。

    如果需要,您可以创建更多群组,但不要为您页面的每个访问者创建一个 MYSQL 用户帐户。

    真的没必要。

    让访问者运行在 MYSQL 中/为 MYSQL 创建用户的脚本是非常糟糕的做法。

    对于空洞用户/访问者帐户管理为其创建一个表,而不是 MYSQL 核心表。

    例如user_account 带有用户名、密码、...。

    【讨论】:

    • 我假设在这种结构下仍然需要管理员来声明新用户属于哪个组?
    • 但那是 PHP Logic 可以编码的,例如:用户首次登录变成了 protected_user。也许以后他可以成为 private_user(在代码逻辑上或通过管理员)
    • declare which group a new user belongs to? 全部与您的应用程序的逻辑有关。
    • create a "real" user with the appropriate privileges 只是关于用户应该拥有哪些适当的权限、从中创建组并将用户绑定到所需组的全局。所以:在第一次登录之前,所有用户都应该有 PUBLIC_USER 组,之后您(管理员)或您的代码(逻辑)可以更改此组。简单明了的东西。
    • 并将完整的 MYSQL 用户凭据(用于数据库连接)与 WEBSIDE USER ACCOUNT 凭据(用于页面上的用户登录)分开!
    猜你喜欢
    • 1970-01-01
    • 2016-07-22
    • 2011-10-22
    • 2012-02-17
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    相关资源
    最近更新 更多