Postgresql赋予用户所有表只读权限

在postgresql中,赋予用户权限是比较复杂的,除了要考虑对已有对象的赋权,还要考虑未来新增对象的赋权,下面就举例说明如何赋予某用户对所有表的只读权限.

1
2
3
4
5
# 对已有对象的赋予权限
postgres# GRANT SELECT ON ALL TABLES IN SCHEMA schema_name to [YOUR_ROLE or YOUR_USER];

# 包含对未来新增对象赋予权限
ALTER DEFAULT PRIVILEGES GRANT SELECT ON TABLES to [YOUR_ROLE or YOUR_USER];
  • 检查所有已经存在的表。
1
2
3
4
SELECT COUNT(*)
FROM pg_catalog.pg_tables
WHERE schemaname != 'pg_catalog' AND
      schemaname != 'information_schema';
  • 检查用户可以访问的所以表。
1
2
3
SELECT COUNT(*)
FROM information_schema.role_table_grants
WHERE grantee = 'user';
updatedupdated2024-01-122024-01-12