如何撤销登录角色中的所有组角色?有没有办法自动做到这一点?如何撤销登录角色中的所有组角色
0
A
回答
4
既然你可以GRANT
/REVOKE
一次身兼数职,一个DO
命令与动态SQL会更简单/快(基于集合的操作经常要更快一些在RDBMS比循环):
DO
$$
BEGIN
EXECUTE (
SELECT 'REVOKE ' || string_agg(quote_ident(rolname), ', ')
|| ' FROM ' || u.usename
FROM pg_user u
JOIN pg_auth_members m ON (m.member = u.usesysid)
JOIN pg_roles r ON (r.oid = m.roleid)
WHERE u.usename = 'my_user'
GROUP BY u.usename
);
END
$$
的DO
命令以及string_agg()
aggregate function需要PostgreSQL 9.0或更高版本。
quote_ident()
确保非标准标识符不会造成麻烦(包括SQL注入)。
有效执行如下命令:
REVOKE role_a, role_b, "FROM postgres; DELETE * FROM usr; --" FROM my_user;
,如果没有格兰特的发现不会做任何事情。
Note the tricky name in double quotes, but properly quoted by quote_ident()
.
BTW:这个撤销所有格兰特的 “组角色” 与否。这些都只是PostgreSQL的角色,有些具有LOGIN
权限,有些则不具备(“组角色”)。 user
和group
之间的区别是历史。
0
认为需要通过结果撤销rolname FROM USENAME查询所有角色
select usename, rolname
from pg_user
join pg_auth_members on (pg_user.usesysid=pg_auth_members.member)
join pg_roles on (pg_roles.oid=pg_auth_members.roleid)
和LOOP;
相关问题
- 1. ASP.NET登录角色?
- 2. 如何获取角色中的所有用户,包括角色中的角色?
- 3. 从继承角色撤销SELECT
- 4. 设计:登录到另一个角色时自动注销一个角色
- 5. JSP登录用户角色
- 6. 登录时检查角色
- 7. 登录Web角色MVC
- 8. Elmah登录Azure Worker角色?
- 9. 扩展角色/角色组
- 10. 如何创建角色用户登录?
- 11. 如何确定登录用户角色
- 12. 选择用户帐户未登录数据库180天以撤销角色
- 13. 隐藏角色的“所有记录”
- 14. 组角色/组与流星角色包
- 15. 确定给定期间的所有人员角色授予/撤销
- 16. 如何获取systemuser的所有角色?
- 17. asp.net身份获取登录用户的所有角色
- 18. 如何让我的程序打印出每个角色为“角色#1 :(角色),角色#2 :(角色)等”?
- 19. 如何检索用户所属的所有角色(组)?
- 20. Web角色/员工角色/ VM角色?
- 21. 如何组织Ansible角色?
- 22. PHP根据用户的“角色”登录
- 23. 登录 - 不同的用户角色
- 24. 安装Jenkins角色策略插件后 - 所有登录失败
- 25. Sitecore获取所有角色
- 26. 如何检查未登录的用户是否有角色?
- 27. SAP Hana撤消用户的所有特权和角色
- 28. ASP.NET身份 - 如何获取所有角色以及如何删除角色?
- 29. 如何获取dotnetnuke中的所有角色组
- 30. 获取当前用户角色下的所有角色
谢谢Erwin的回答。 –