2010-09-21 64 views
0

我想访问的用户名+密码表限制在一个查询模式,如:是否有可能在PostgreSQL中过滤查询?

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

(此查询不假装从注入漏洞,只是一个例子点工作)

那可能吗?还是我错过了一些不同的方法?

回答

2

您可以撤消所有用户,只拥有者所有访问user表,并创建一个视图,像这样:

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

然后你的查询将是这样的:

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

其他可能性可能会使用PostgreSQL's rule system来重写或避免user表中某些查询之王。但我不确定你在这里做什么。

+0

我想排除用这种有限帐户转储用户表的可能性。视图方法仍允许转储所有用户名和散列密码。 – forker 2010-09-21 15:46:21

+2

然后你可以写一个函数。您的函数将接收用户/密码,并且如果用户/传递组合匹配,则返回true/false ... – 2010-09-21 16:18:03

0

我不知道您计划的是好还是不好,但应该可以使用rewrite rules。从来没有玩过它。

+0

这是一个很好的提示!谢谢! – forker 2010-09-21 15:31:01

相关问题