2011-07-20 8 views
1

私は、私のいくつかの他のアプリケーションが話しているデータベースと会話するdjangoアプリケーションを持っています。アプリケーションが起動すると、異なるデータベースの異なるテーブルが読み込まれ、どのテーブルにどの接続を使用するかが決まります。アプリケーションはpg_catalogにアクセスできますか?

のようにすべてのテーブル名をアプリケーションが読み取れるようにすることをお勧めしますか?

次は私の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 

誰もが、このアプローチの長所と短所を強調することはできますか?私がこのアプローチで見る利点の1つは、使用している各データベースにテーブル名のリストを保持する必要がないことです。私のアプリケーションがアクセスできないテーブルの名前さえも読んでいる可能性があります。

答えて

0

他のテーブルに機密情報が含まれていない場合は、この方法に問題はありません。つまり、データベースに接続してそのデータベースのすべてのテーブルを使用していないアプリケーションがあり、それらのテーブルが存在するという知識自体がセキュリティ上の問題である場合、それらのテーブルは次のようになります。そのデータベースにはいません。

+0

良い点!また、\ dtと似ていると思います –

関連する問題