3

我正在为将用 Python 编写的 Web 应用程序构建 MySQL 数据库。我想隔离用户功能以提供更好的安全性并可能提高性能。我想这样做: 2组表:

  • 1 应用用户管理表
  • 1 一组存储信息的表

我想创建 4 个 mysql 用户来访问和操作来自应用程序的数据:

  • 1 个用户对用户表具有选择权限
  • 1 个用户对用户表具有插入/更新权限
  • 1 个用户对存储信息的表集具有选择权限
  • 1 个用户对存储信息的表集具有插入/更新权限

因此,读取/写入每个表的每个 Python 模块都将使用所需的用户。

我的理由是,如果用户或插入字段因任何原因而受到损害,则可以操纵/获取的损害和信息将受到限制。它不应该使应用程序复杂化,因为它只会使用与数据库的正确连接,并且每个模块只执行一次。

会不会太过分了?会影响性能吗?还有其他想法吗?

4

2 回答 2

0

我的理由是,如果用户或插入字段因任何原因而受到损害,则可以操纵/获取的损害和信息将受到限制。它不应该使应用程序复杂化,因为它只会使用与数据库的正确连接,并且每个模块只执行一次。

是的,有可能。您只需为每个用户创建一个连接/会话。我建议您始终使用 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 的每个应用程序。

还有其他想法吗?

是的,只是不要尝试这样做,只需为您的应用程序提供良好且安全的设计 :-)

于 2012-12-21T12:02:08.047 回答
0

使用最小特权原则总是一个好主意。

是不是矫枉过正?不,它是任何好的设计的一部分。

它会影响性能吗?不。与数据库的连接只是一个连接,与连接到数据库的帐户关联的权限无关紧要。

于 2012-12-21T14:23:00.400 回答