我想将对username + password表的访问限制为一个查询模式,如:
SELECT count(id) AS auth_result
FROM user
WHERE username = '%s'
AND password = SHA1('%s')
(这个查询并没有假装从注入漏洞的角度来看,只是一个例子)
这可能吗?或者我错过了一些不同的方法?
答案 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页。