数据库访问的用户管理
User Management for Database Access
我是编程新手,有一个与数据库中的用户管理相关的基于理论的问题。我不太想怎么问这个问题,所以如果这是一个重复的问题,请随时 link。
tldr:核心问题是新用户需要连接到数据库才能执行 CREATE USER ...但是要建立该连接,他们需要已经 CREATE-d在某个时候。
完整问题:
如果我有一个想要允许多个用户访问的数据库,我知道管理员可以使用用户选择的凭据创建 "server-side" 用户(通过 CREATE USER)。每个用户都可以通过登录页面打开数据库连接,方法是输入他们的凭据,这些凭据随后作为参数传递给新连接。
但是,如果我想消除管理员设置新用户帐户的需要怎么办?那就是我希望最终用户导航到注册页面,在那里他们选择凭据,点击注册并可以访问数据库。
我目前的理解是,唯一的方法是创建 "pseudo-user" 帐户。即注册只是将新用户凭据插入凭据 table。随后所有用户 "log in" 通过相同的连接,但必须首先清除登录页面,该页面检查他们输入的凭据是否与存储在凭据 table 中的凭据相匹配。 (这仍然需要管理员创建一个具有适当权限的 "real" 用户,否则每个人都将通过 root 用户连接)。
编辑:我的意思是说这是通过 php。
这听起来对吗?
感谢社区。
您不需要为每个访问您页面的用户创建一个 MYSQL 用户帐户。
去为 groubs 设置一些 MYSQL 用户帐户,例如:
PUBLIC_USER 对于所有未以较低权限登录的用户。
PROTECTED_USER 登录用户拥有更多权限。
PRIVATE_USER 对于拥有最大权限的用户,但作为 ROOT 帐户的权限较少。
如果需要,您可以创建更多群组,但不要为您页面的每个访问者创建一个 MYSQL 用户帐户。
真的没有必要。
让访问者 运行 创建用户 in/for 的脚本是非常糟糕的做法 MYSQL。
并为漏洞 user/visitor 帐户管理创建一个 table,难道你不是 MYSQL 核心 tables。
例如user_account 用户名,密码,....
您将应用程序的用户与数据库用户混合在一起。他们很少(如果有的话)是同一件事。
您的应用程序需要 mysql 的单个用户帐户,但您的应用程序需要在数据库中跟踪其自己的用户——通常在 table 中称为 app_users
。 table 可能看起来像:
id username email passwd_hash salt
-- -------- ----- ----------- ----
01 fred f@a.c sdfasdf3r23 asdwer32
Web 应用程序的用户永远不会直接访问数据库,但所有应用程序查询都将 运行 通过应用程序的帐户进行。这些查询应该是准备好的语句,或者只执行存储过程的准备好的语句。不应允许应用帐户更改架构。应用程序连接到数据库所需的应用程序凭据应该加密并存储在网络根目录之外,但存储在 OS 用户和网络服务器 运行s 有权读取的文件夹中。
您可能有多个 mysql 的应用程序帐户,用于各种级别的权限,但这些帐户仍然与数据库中存储的用户帐户不同。
我是编程新手,有一个与数据库中的用户管理相关的基于理论的问题。我不太想怎么问这个问题,所以如果这是一个重复的问题,请随时 link。
tldr:核心问题是新用户需要连接到数据库才能执行 CREATE USER ...但是要建立该连接,他们需要已经 CREATE-d在某个时候。
完整问题:
如果我有一个想要允许多个用户访问的数据库,我知道管理员可以使用用户选择的凭据创建 "server-side" 用户(通过 CREATE USER)。每个用户都可以通过登录页面打开数据库连接,方法是输入他们的凭据,这些凭据随后作为参数传递给新连接。
但是,如果我想消除管理员设置新用户帐户的需要怎么办?那就是我希望最终用户导航到注册页面,在那里他们选择凭据,点击注册并可以访问数据库。
我目前的理解是,唯一的方法是创建 "pseudo-user" 帐户。即注册只是将新用户凭据插入凭据 table。随后所有用户 "log in" 通过相同的连接,但必须首先清除登录页面,该页面检查他们输入的凭据是否与存储在凭据 table 中的凭据相匹配。 (这仍然需要管理员创建一个具有适当权限的 "real" 用户,否则每个人都将通过 root 用户连接)。
编辑:我的意思是说这是通过 php。
这听起来对吗?
感谢社区。
您不需要为每个访问您页面的用户创建一个 MYSQL 用户帐户。 去为 groubs 设置一些 MYSQL 用户帐户,例如:
PUBLIC_USER 对于所有未以较低权限登录的用户。
PROTECTED_USER 登录用户拥有更多权限。
PRIVATE_USER 对于拥有最大权限的用户,但作为 ROOT 帐户的权限较少。
如果需要,您可以创建更多群组,但不要为您页面的每个访问者创建一个 MYSQL 用户帐户。
真的没有必要。
让访问者 运行 创建用户 in/for 的脚本是非常糟糕的做法 MYSQL。
并为漏洞 user/visitor 帐户管理创建一个 table,难道你不是 MYSQL 核心 tables。
例如user_account 用户名,密码,....
您将应用程序的用户与数据库用户混合在一起。他们很少(如果有的话)是同一件事。
您的应用程序需要 mysql 的单个用户帐户,但您的应用程序需要在数据库中跟踪其自己的用户——通常在 table 中称为 app_users
。 table 可能看起来像:
id username email passwd_hash salt
-- -------- ----- ----------- ----
01 fred f@a.c sdfasdf3r23 asdwer32
Web 应用程序的用户永远不会直接访问数据库,但所有应用程序查询都将 运行 通过应用程序的帐户进行。这些查询应该是准备好的语句,或者只执行存储过程的准备好的语句。不应允许应用帐户更改架构。应用程序连接到数据库所需的应用程序凭据应该加密并存储在网络根目录之外,但存储在 OS 用户和网络服务器 运行s 有权读取的文件夹中。
您可能有多个 mysql 的应用程序帐户,用于各种级别的权限,但这些帐户仍然与数据库中存储的用户帐户不同。