我是 PHP 和 MYSQL 的新手,试图创建一个用户可以用来将数据输入数据库的网站。我正在尝试做的一个例子是各种银行及其提供的各种服务的数据库。例如,花旗银行的用户在我的网站上创建了一个帐户,他将输入他的登录 ID、密码、电子邮件和名称他的银行(在这种情况下是花旗银行)。
成功创建帐户并登录后,他将成为花旗银行的“管理员”帐户,有权创建、删除、插入和查看仅来自花旗银行的所有数据。他还可以进一步创建和删除 Outlets,并为该 outlet 创建/删除 SubUser 帐户。SubUser 帐户将拥有 Admin 帐户将拥有的所有权限减去创建更多子用户的权利,但仅限于 Outlet它负责。管理员和子帐户都将通过该网站登录。
我列出了我认为帐户需要的权利:
Rights to database
SELECT,INSERT,UPDATE,DELETE,(JOIN?)
我目前正在考虑为管理员帐户实施下表:
Admin
+----------+-----------+------------+------------+
| BankID | BankName | UserName | Password |
+----------+-----------+------------+------------+
| 1 | Citibank | CitiAdmin | PassCiti |
| 2 | StanChart | StanAdmin | PassStan |
| 3 | HSBC | HSBCAdmin | PassHSBC |
+----------+-----------+------------+------------+
其中 BankID 的类型为 SERIAL,而 BankName、UserName 和 Password 将由用户在创建帐户时输入。我没有将上表拆分为 2 个表的原因,其中一个包含 BankID 和 BankName 以及其他包含用户名和密码的内容是为了便于使用,因为我觉得将其拆分是不必要的,并且会对其进行过度规范化。
虽然下表适用于子用户帐户:
SubUsers
+------+------------+--------------+-------------+
| ID | OutletID | Name | Password |
+------+------------+--------------+-------------+
| 1 | 1 | CitiSub1 | PassSub1 |
| 2 | 1 | CitiSub2 | PassSub2 |
| 3 | 2 | StanSub1 | PassSub1 |
| 4 | 2 | StanSub2 | PassSub2 |
| 5 | 3 | HSBCSub1 | PassSub1 |
| 6 | 4 | HSBCSub2 | PassSub2 |
+------+------------+--------------+-------------+
通过这样做,在用户登录时,我将从 $_POST[User] 和 $POST[Pass] 获取用户条目,并匹配从查询中提取的数据
$query="SELECT Username AND Password FROM Admin AND SubUsers";
如果匹配,用户将登录。通过这样做,我能够实现第一级验证,只有注册用户才能访问数据库。
但是,我将如何限制对管理员帐户和子用户帐户的访问。管理员帐户只能访问与他的银行有关的数据,而子用户帐户将只能访问与他的网点有关的数据。
我考虑过使用 PHP 会话通过更改登录查询从
$query="从管理员和子用户中选择用户名和密码";
到一个查询,首先从 Admin 中选择用户名和密码,并通过它运行 $_POST[User] 和 $_POST[Pass],如果没有匹配,它将从 SubUser 中提取用户名和密码并重复该过程,并且会根据匹配发生在 Admin 表还是 SubUser 表中,将结果记录到会话中。
然而,这样做只会改变用户在登录时可用的网页,而不是他们对数据库本身的实际访问。我能想到的使用这种方法的最接近的解决方案是为用户创建一组全新的网页,具体取决于无论用户是管理员还是子用户,我都不愿意这样做,因为我还是编程新手,并且增加网页数量只会增加不可避免地出现的错误数量。
是否有任何其他方法来限制用户访问数据库,或其他解决方案来优化我正在尝试做的事情?
我已经查看了如何为多个用户配置 phpMyAdmin - 每个用户都只能访问他们的数据库 ,但这对我来说有点过于技术性,并且似乎正在处理用户对数据库而不是表的访问。
任何建议/帮助/指导将不胜感激。