暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL中用户可以连接所有的数据库,并可以访问数据库中任何Schema下的对象

原创 小伙 2025-06-04
452

PostgreSQL中用户可以连接所有的数据库,并可以访问数据库中任何Schema下的对象

A

正确

B

错误

🚫 正确答案:B. 错误

普通用户默认既不能连接所有数据库,也不能访问任意Schema下的对象! PostgreSQL的权限设计严格遵循最小权限原则,用户必须被显式授权才能访问特定资源。

🔑 权限机制详解 数据库连接权限

默认限制:新用户仅能连接默认数据库postgres(若未单独授权)。

跨库访问:需执行显式授权命令:

      GRANT CONNECT ON DATABASE target_db TO your_user;  -- 授权连接指定数据库
 

Schema与对象访问权限

Schema隔离性:每个Schema是独立的命名空间,用户需被单独授权才能访问其内对象。

对象级控制:即使拥有库级权限,仍需细化授权:

      GRANT SELECT ON TABLE schema_name.table_name TO your_user;  -- 授权查询指定表
 

列级权限:可限制到字段级别(如禁止查看敏感列):

      GRANT SELECT (name, age) ON employees TO analyst;  -- 仅允许查看姓名和年龄
 

PUBLIC角色的误导性

所有用户默认属于PUBLIC角色,但该角色仅拥有基础权限(如连接默认库、执行部分函数),不包含跨库或跨Schema访问权限。 超级用户例外

仅超级用户(如postgres) 可绕过所有权限检查,但普通用户绝无此特权。

⚠️ 典型错误配置案例

-- 错误:以为创建用户即可全库访问 CREATE USER new_user WITH PASSWORD '123'; -- 结果:该用户仅能连接postgres库,且无法访问任何表!

-- 正确流程 GRANT CONNECT ON DATABASE sales_db TO new_user; -- 授权连接 GRANT USAGE ON SCHEMA sales_schema TO new_user; -- 授权使用Schema GRANT SELECT ON ALL TABLES IN SCHEMA sales_schema TO new_user; -- 授权查询所有表

💎 总结

“用户默认可连接所有库并访问任意Schema”是完全错误的认知!PostgreSQL通过层级化权限模型(库 → Schema → 对象 → 列)实现精细控制,每一步访问均需显式授权。
权限管理核心口诀:
无授权即禁止,最小化分配是铁律! 🔐

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论