我最近想到了这个想法,但我怀疑这个想法可能是疯狂的。我认为的几个好处是:
显然,这会给我一个长得可笑的用户表,但我还不清楚任何惩罚:该User表已正确索引以进行 O(Log(n)) 单用户查找。
您希望获得哪种类型的日志记录?我在我的应用程序中做的是一个审计表,用于跟踪应用程序用户、应用程序命令和结果(以及其他内容)。这与另一个跟踪单个表更改的审计表一起,提供了我们每个用户需要的所有日志记录。
您还可以在应用程序中设置一个连接池来控制每个应用程序的连接。
乍一看,我认为尝试管理这么多用户是一种负担,超过了任何可能的好处。
通过触发器促进自动记录
您肯定会付出代价,因为您会使用触发器来记录每次登录,从而引入额外的磁盘 I/O。您可以通过一些精心设计的基础设施细微差别来减轻大部分磁盘 I/O,如下所示:
然而,触发器的引入会降低应用程序的性能,只是为了验证用户,特别是在用户登录数量很高的情况下。您的研究的反问:
在每个(web-application-)用户级别控制 mysql 连接
已经有一个内置功能可以根据每小时可以完成的查询数量来控制 mysql 身份验证。请在 MySQL 5.5.12 中 mysql.user 的描述中注意它们:
mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
| plugin | char(64) | YES | | | |
| authentication_string | text | YES | | NULL | |
+------------------------+-----------------------------------+------+-----+---------+-------+
42 rows in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
您有max_questions、max_updates、max_connections 和 max_user_connections。
在 MySQL 5.0 中,您可以限制个人帐户使用以下服务器资源:
可以通过为每个应用程序用户创建相应的 mysql 用户来为您的应用程序用户管理这些。如果您打算管理用户限制,请记住不要重新发明轮子,因为 MySQL 可以在其身份验证协议中控制这些方面。