我的理由是,如果用户或插入字段因任何原因而受到损害,则可以操纵/获取的损害和信息将受到限制。它不应该使应用程序复杂化,因为它只会使用与数据库的正确连接,并且每个模块只执行一次。
是的,有可能。您只需为每个用户创建一个连接/会话。我建议您始终使用 SQLAlchemy 来处理您的 ORM,它就像声明与数据库中的用户一样多的实例一样简单。
engine_select_only = create_engine(u'mysql://user1:pass@127.0.0.1/mydb'
engine_insert_update = create_engine(u'mysql://user1:pass@127.0.0.1/mydb'
engine_insert_update = create_engine(u'mysql://user1:pass@127.0.0.1/mydb'
...
然后您使用最适合您需求的策略将您的引擎映射到您的表格。我从来没有测试过(因为我从来没有实现过这样的东西),但我认为 SQLAlchemy 没有理由不能将相同的对象映射到不同的会话。
会不会太过分了?
我个人的看法是,是的,这是矫枉过正而且完全愚蠢的。如果你正确地编写了你的应用程序,就没有必要做这样的事情。您应该为您的 mysql 连接提供整个应用程序实例所需的确切权限,并且您应该非常小心地检查用户输入。因此,您将保护您的应用程序、运行它的系统和您的 DBMS。
会影响性能吗?
可以,与数据库的每个连接都有成本,并且您的 dbms 具有有限的可能连接池。数学很简单,如果为每个实例打开 4 个连接,则将可能的连接数除以那么多。这不仅会影响您的应用程序,还会影响使用您的 DBMS 的每个应用程序。
还有其他想法吗?
是的,只是不要尝试这样做,只需为您的应用程序提供良好且安全的设计 :-)