我对编程非常陌生,并且有一个基于理论的问题,涉及数据库中的用户管理。我无法想到如何问这个问题,如果这是一个重复的问题,请随时链接。
tldr:核心问题是新用户需要连接到数据库以执行CREATE USER ...但是为了建立该连接,他们需要在某些时候已经创建了CREATE-d。
完整问题:
如果我有一个我想允许多个用户访问的数据库,我知道管理员可以创建"服务器端"用户(通过CREATE USER),用户选择的凭据。每个用户可以通过登录页面打开数据库连接,输入他们的凭据,然后作为参数传递给新连接。
但是,如果我想消除管理员设置新用户帐户的需要,该怎么办?那就是我希望最终用户导航到一个注册页面,在那里他们选择凭据,点击注册并可以访问数据库。
我目前的理解是,唯一的方法是创建"伪用户"账户。即,注册只是将新用户凭证插入凭证表。随后所有用户"登录"通过相同的连接,但必须首先清除登录页面,检查其输入凭据是否与凭证表中存储的凭据匹配。 (这仍然需要管理员创建具有适当权限的真实用户,否则每个人都将通过root用户进行连接。)
编辑:我的意思是说这是通过php。
这听起来不错吗?
谢谢社区。 p>
答案 0 :(得分:0)
您不需要访问您的页面的每个用户,MYSQL用户帐户。 去为groubs设置一些MYSQL用户帐户,例如:
所有用户的PUBLIC_USER,没有以较少的权限登录。
PROTECTED_USER为记录用户提供更多权利。
对于拥有最大权利的用户的PRIVATE_USER,但ROOT帐户的权利较少。
如果需要,您可以制作更多的组合,但不要为您页面的每个访问者创建一个MYSQL用户帐户。
确实没有必要。
让访问者在MYSQL中运行创建用户的脚本是非常糟糕的做法。
对于漏洞用户/访问者帐户管理,为它创建一个表,不是MYSQL核心表。
e.g。 user_account,用户名,密码,....
答案 1 :(得分:0)
您将应用的用户与数据库用户混合在一起。如果有的话,它们很少是相同的。
您的应用需要一个用于mysql的用户帐户,但您的应用需要在数据库中跟踪自己的用户 - 通常在名为app_users
的表中。表格可能如下:
id username email passwd_hash salt
-- -------- ----- ----------- ----
01 fred f@a.c sdfasdf3r23 asdwer32
Web应用程序的用户永远不会直接拥有数据库权限,但所有应用程序查询都将通过应用程序的帐户运行。这些查询应该是预处理语句,或者是只执行存储过程的预处理语句。不应允许应用帐户更改架构。应用程序连接到数据库所需的应用程序凭据应加密并存储在Web根目录之外,但是在Web服务器运行的OS用户可以读取的文件夹中。
对于不同级别的权限,您可能拥有多个mysql应用帐户,但这些帐户仍然与存储在数据库中的用户帐户不同。