django - 是否应允许应用程序访问 pg_catalog?

标签 django postgresql

我有一个 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/

相关文章:

python - 用于网络分析屏幕的Django设计模式需要很长时间才能计算出来

django 后端不支持绝对路径

PostgreSQL OUTER 连接逻辑

mysql - PostgreSQL 上的公式查询

python - 在 python 中使用 SQLAlchemy 将行迭代地插入到 postgreSQL 数据库中

python - django 子应用程序中的循环导入

python - 有人知道任何用户信誉引擎吗?

Python:pysqlite库不支持C扩展加载

sql - SQL中如何替换数字

postgresql - 网络故障后恢复 pg_restore