我有一个django应用程序,它与一个数据库通信,我的其他几个应用程序也与之通信。当应用程序启动时,它会读取不同数据库中的不同表,并使用它来确定要为哪个表使用哪个连接。
允许应用程序读取
这样的态度?
以下是my routers.py的摘录:

db1_tables = connections['db1'].introspection.table_names()
default_db_tables = connections['default'].introspection.table_names()
db3_tables = connections['db3'].introspection.table_names()

class MyAppRouter(object):
    def db_for_read(self, model, **hints):
        if model._meta.db_table in db1_tables :
            return 'db1'
        if model._meta.db_table in default_db_tables:
            return 'default'
        if model._meta.db_table in db3_tables:
            return 'db3'
        return 'default'

    def db_for_write(self, model, **hints):
        return self.db_for_read(model,**hints)

    def allow_syncdb(self, db, model):
        return False

有人能强调一下这种方法的利弊吗?我看到这种方法的一个优点是,我不必在使用的每个数据库中维护表名列表。一个可能的缺点是,我甚至正在读取应用程序无法访问的表的名称。

最佳答案

如果其他表不包含敏感信息,我认为这种方法没有问题。也就是说,我将概括这样的情况:如果你有一个连接到数据库但不使用该数据库的所有表的应用程序,并且那些表存在的知识本身就是一个安全问题——那么这些表不应该在那个数据库中。

09-25 17:00
查看更多