是否有可能在PostgreSQL中过滤查询?

时间:2010-09-21 15:09:48

标签: security postgresql

我想将对username + password表的访问限制为一个查询模式,如:

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

(这个查询并没有假装从注入漏洞的角度来看,只是一个例子)

这可能吗?或者我错过了一些不同的方法?

3 个答案:

答案 0 :(得分: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表上的某些查询王。但我不确定你在这里要做什么。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我建议你写一个函数,并使它成为SECURITY DEFINER。例如,参见http://www.hagander.net/talks/hidden%20gems%20of%20postgresql.pdf,第28-36页。