当前位置: 首页 > news >正文

6.用户及权限管理

用户及权限管理

用户和角色

什么是角色?

角色是一系列相关权限的集合。为了管理方便,通常把一系列相关的数据库权限赋给一个角色,如果哪个用户需要这些权限,就把角色赋给相应的用户。

在 PostgreSQL 中,为了简化管理,角色与用户是没有区别的,一个用户也是一个角色,我们可以把一个用户的权限赋给另一个用户。

用户和角色在整个数据库实例中是全局的,在同一个实例中的不同数据库中,看到的用户都是相同的。

超级用户

  • 超级用户是初始化该数据库时与操作系统用户名相同的用户。
  • 如果数据库是建在操作系统用户postgres下的(通常我们把数据库安装在此用户下),那么这个数据库超级用户的名称也叫postgres
  • 在超级用户下可以创建更多的普通用户。

创建用户和角色

语法

CREATEROLE name[[WITH]option[...]]CREATEUSERname[[WITH]option[...]]

option 取值介绍

  • SUPERUSER|NOSUPERUSER:表示创建出来的用户是否为超级用户。
  • CREATEDB|NOCREATEDB:指定创建出来的用户是否有执行CREATE DATABASE的权限。
  • CREATEROLE|NOCREATEROLE:指定创建出来的用户是否有创建其他角色的权限。
  • CREATEUSER|NOCREATEUSER:指定创建出来的用户是否有创建其他用户的权限。
  • LOGIN|NOLOGIN:创建出来的用户是否有LOGIN权限,可以临时禁止用户的LOGIN权限,此时用户无法连接到数据库。

权限的管理

用户的权限分为两类:

第一类:创建用户时指定的权限

  1. 超级用户的权限
  2. 创建数据库的权限
  3. 是否允许LOGIN的权限

第二类:由GRANTREVOKE命令管理的权限

  1. 在数据库中创建模式(SCHEMA)的权限
  2. 允许在指定的数据库中创建临时表的权限
  3. 连接某个数据库的权限
  4. 在模式中创建数据库对象的权限,如创建表、视图、函数等
  5. 在一些表中做SELECTUPDATEINSERTDELETE等操作的权限
  6. 在一张具体的表的列上进行SELECTUPDATEINSERT操作的权限
  7. 在表上创建触发器的权限
  8. 把表、索引等建到指定表空间的权限

注意

在使用时要分清上述两类权限:

  • 如果要给用户赋予创建数据库的权限,需要使用ALTER ROLE命令。
  • 要给用户赋予创建模式的权限时,则需要使用GRANT命令。

PostgreSQL 中的 DDL 权限

PostgreSQL 没有专门的 DDL 语句权限,能否创建表取决于在模式(SCHEMA)中是否有CREATE的权限。

函数和触发器的权限

为了加强安全性,PostgreSQL 只允许超级用户使用某些 PL 语言写函数。


权限的层次总结

PostgreSQL 中的权限是按以下几个层次进行管理的:

  1. 首先管理用户特殊属性上的权限,如超级用户权限、创建数据库的权限、创建用户的权限、LOGIN权限等。
  2. 然后是在数据库中创建模式的权限。
  3. 接着是在模式中创建数据库对象的权限,如创建表、索引等。
  4. 之后是查询表、向表中插入数据、更新表、删除表中数据的权限。
  5. 最后是操作表中某些字段的权限。

如何创建一个只读用户

第一步:收回默认的创建表权限

REVOKECREATEONSCHEMApublicFROMpublic;

这是因为在 PostgreSQL 中,默认任何用户都可以在名为public的 Schema 中创建表,而只读用户是不允许创建表的,所以先要把此权限收回。

第二步:创建一个名为readonly的用户

CREATEUSERreadonlyWITHPASSWORD'query';

第三步:将现有表的 SELECT 权限赋予用户readonly

GRANTSELECTONALLTABLESINSCHEMApublicTOreadonly;

注意:上面的 SQL 命令只是把现有表的权限赋予了用户readonly,如果此时创建了新表,readonly用户仍不能读取。

第四步:设置默认权限,使新创建的表自动授权

ALTERDEFAULTPRIVILEGESINSCHEMApublicGRANTSELECTONTABLESTOreadonly;

注意:以上过程只是给名为public的 Schema 下的表赋予了只读权限,如果想让该用户访问其他 Schema 下的表,需要类似地设置相应 Schema 的权限。


http://www.jsqmd.com/news/284637/

相关文章:

  • 枸杞岛:东海锚形绿岛,藏着山海奇观与贻贝之乡的温柔
  • 探寻思艾特创新成果,其在数据与AI领域有什么独特成就?
  • 单芯片智能电源管理芯方案TP4316:精准定义1A移动电源的细分市场竞争力
  • 坚守代码前线:一名资深测试工程师的职业价值宣言
  • 星程x工厂展对行业的推动作用大吗,带来怎样变化?
  • 告别配图焦虑:Nano Banana Pro 深度实战
  • 真正的Type-C同口充放电、2.4A大电流与高达92%的双向转换效率:海川SM5339/SM5340如何定义高集成度电源SOC
  • 学术文献引用工具排名:六款主流平台及智能规范建议
  • FXS双出风口笼形转子选粉机
  • 2026年有名的北京美国定制旅游平台,达美国际旅行社排名情况如何?
  • DC直流开关电源
  • 2026预测精度实证:全球市场实证数据与预测精度驱动因素分析
  • 性能测试中的唯一标识问题研究
  • 每日面试题分享152:什么是循环依赖?
  • GB4599-2024 落地!汽车照明迎重大升级,自适应功能 + 辅助投射成安全新标配~
  • 每日面试题分享153:JVM垃圾回收调优的目标是什么?
  • 2026年福建水凝面膜公司权威推荐榜单:紧致面膜 /修护面膜 /敏感肌面膜 /水光面膜/祛痘面膜服务机构精选
  • AutoCAD二次开发――参数化绘制带轮设计
  • 60N04NF-ASEMI中低压MOS标杆60N04NF
  • 每日面试题分享154:为什么Vue中的date属性是函数而不是对象?
  • 导师推荐!10个AI论文网站测评,研究生科研写作必备
  • FPGA实现数字噪声发生器:探索灵活的噪声生成世界
  • 救命神器9个一键生成论文工具,继续教育学生轻松搞定论文!
  • 2026年江苏律师事务所推荐:天听所、民商律师事务所、交通事故律师、劳动纠纷律师、工伤纠纷律师事务所、一站式法律服务新标杆
  • Java程序员必会SpringBoot进阶骚操作都在这里了!
  • 真心建议大家去看Google《Al Agent》真的能颠覆你的认知!!
  • 使用zigbee2mqtt模拟发送信息
  • 区域代理机制:区县到市级代理如何分层管理?
  • Java程序员简历加分项:高并发经验必不可少!
  • 同仁市尖扎泽库河南蒙古族英语雅思培训辅导机构推荐;2026权威出国雅思课程中心学校口碑排行榜