0

Nous examinons comment limiter les risques d'injection SQL en autorisant uniquement les fonctions clés à effectuer des tâches dans notre application rails. Je suis l'agent de sécurité, pas une personne à temps plein. De la façon dont je le vois, écrire uniquement dans la base de données devrait se produire lorsqu'un compte est créé (enregistrement) ou le compte est modifié (mise à jour du profil utilisateur). À des fins de simplification, supposons qu'aucune autre mise à jour ne soit effectuée dans l'application par les utilisateurs.Utilisateurs de bases de données multiples par fonction

Si quelqu'un ne bloque pas une attaque par injection SQL sur une requête en lecture seule, nous serions mieux protégés avec deux appels distincts.

Les rails peuvent-ils supporter la configuration suivante? -

  • Une connexion de base de données pour tous « lire » demande
  • Une connexion de base de données (même base de données exacte) pour toutes les demandes « écriture »

Si oui, comment ce regard dans le fichier de base de données et les demandes de code?

+0

Vous devriez être en mesure d'utiliser une variante de la réponse donnée à la question suivante. C'est juste au lieu de déclarer une base de données séparée pour le modèle que vous allez connecter à la même DB avec des paramètres différents. http://stackoverflow.com/questions/6122508/connecting-rails-3-1-with-multiple-databases – rovermicrover

+0

@rovermicrover Bien qu'intéressante, cette question ne semble pas concerner l'accès à la même base de données avec des autorisations différentes dans le fichier db.yml (user1 = "insérer, mettre à jour" user2 = "sélectionner") – hackajar

+0

Ok, deux modèles, en utilisant la même table. Chacun avec son propre utilisateur DB, qui a des autorisations différentes. On peut même hériter de l'autre, la seule différence étant le paramètre DB/Utilisateur déclaré par la méthode dans le lien fourni. – rovermicrover

Répondre

0

Je pensais que je pourrais aussi bien poster.

class User < ActiveRecord::Base 
    self.abstract_class = true 

    ... 

end 

CUR = Créer mise à jour Lire

R = Lecture seule

class UserCUR < User 
    establish_connection "user_cur_database_#{Rails.env}" 
end 

class UserR < User 
    establish_connection "user_r_database_#{Rails.env}" 
end 

database.yml

user_cur_database_production: 
    adapter: w.e.sql 
    host: yourhost 
    username: user_cur 
    password: ******** 
    database: yourdb 

user_r_database_production: 
    adapter: w.e.sql 
    host: yourhost 
    username: user_r 
    password: ******** 
    database: yourdb 

Lorsque les utilisateurs auraient des droits d'accès différents

Yo Vous pourriez faire la même chose, mais sur l'application rails en fait au lieu de dans le DB, je sais que ce n'est pas ce que vous cherchez exactement, mais peut fournir un peu plus d'aide.

Is there an easy way to make a Rails ActiveRecord model read-only?

+0

Oui, c'est ce que je cherchais. En outre, aider à régler un pari: Est-il commun pour les rails - ou une plate-forme Web à trois niveaux - d'obtenir granulaire avec les autorisations db? – hackajar

Questions connexes