2010-09-21 5 views
0

Je veux limiter l'accès aux nom d'utilisateur + mot de passe table pour un motif de requête comme:Est-il possible de filtrer les requêtes dans PostgreSQL?

SELECT count(id) AS auth_result 
    FROM user 
WHERE username = '%s' 
    AND password = SHA1('%s') 

(cette requête ne prétend pas travailler à partir du point de vulnérabilité d'injection, juste un exemple)

Est-ce possible? ou est-ce que je manque une approche différente?

Répondre

2

Vous pouvez révoquer tout accès à user tableau de tous les utilisateurs, sauf le propriétaire, et de créer une vue avec comme ceci:

create view auth_view as 
select id, username, sha1(password) as sha1pass 
    from user; 

Ensuite, votre requête ressemblera:

select count(id) 
    from auth_view 
where username = '%s' 
    and sha1pass = sha1('%s') 

Autre possibilité utilise peut-être PostgreSQL's rule system pour réécrire ou éviter certaines requêtes sur le tableau user. Mais je ne suis pas sûr de ce que vous essayez de faire ici.

+0

Je veux exclure la possibilité de jeter la table des utilisateurs avec un tel compte limité. L'approche avec vue permet toujours de vider tous les noms d'utilisateur et hashed mots de passe. – forker

+2

Vous pouvez alors écrire une fonction. Votre fonction recevrait user/password et retournerait true/false si la combinaison utilisateur/pass correspondait ... –

0

Je ne sais pas si ce que vous prévoyez est bon ou pas, mais cela devrait être possible avec rewrite rules. Je n'ai jamais joué avec ça.

+0

c'est un bon indice! Merci! – forker

Questions connexes