我有一个 Django 应用程序,它与一个数据库对话,而我的其他几个应用程序则与之对话。当应用程序启动时,它会读取不同数据库中的不同表,并使用它来确定对哪个表使用哪个连接。
允许应用程序读取所有表名是好的做法还是坏的做法 这样的方式?
以下是我的 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
谁能强调这种方法的优缺点?我看到这种方法的一个优点是我不必在我使用的每个数据库中维护一个表名列表。一个可能的缺点是我什至正在读取我的应用程序无权访问的那些表的名称。
最佳答案
如果其他表不包含敏感信息,我认为这种方法没有问题。也就是说,我会这样概括这种情况:如果您有一个连接到数据库但不使用该数据库的所有表的应用程序,并且知道这些表存在本身就是一个安全问题——那么这些表应该不在该数据库中。
关于django - 是否应允许应用程序访问 pg_catalog?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6764588/