热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PostgreSQL最佳实践:用户权限管理

问题的起因:QQ群里有人提问怎么不让用户拥有建表权限?创建一个新用户后,用该用

作者:李晓光(黑哥)

昆明畅博科技有限公司

     问题的起因:QQ群里有人提问怎么不让用户拥有建表权限?创建一个新用户后,用该用户登录后可以创建表。

1 public权限解读

     用户默认情况下具有public权限,public默认具有创建和使用schema的权限,因此意味着可以在schema中创建对象(包括表)、列出schema中的对象,并在其权限允许时访问它们。

     所以创建数据库或schema完成后做的第一件事是

 1.1 创建数据库完成后

--回收schema的public权限

--revoke all on schema public from public; --正常情况使用这个

revoke all on schema public,tiger,tiger_data,topology from public; --使用postgis扩展使用这个

--从core数据库收回public的所有权限

    revoke all on database core from public;
    revoke all on database postgres from public;

    --重新将schema授予数据库所有者

    grant all on schema public,tiger,tiger_data,topology to 数据库所有者;

    1.2 创建schema完成后

      create schema history;
      revoke all on schema history from public;

      --重新将schema history授予数据库所有者

      grant all on schema history to 数据库所有者;

      2 测试

           假设现在有一数据库core.

      2.1 postgrese用户连接至core数据库

        psql -h localhost -p 5432 -U postgres -d core

        --创建一个名称sel的用户

          create user sel with nosuperuser nocreatedb nocreaterole noinherit login noreplication nobypassrls password '123';

          --允许连接至数据库core

            grant connect on database core to sel;

            --查看角色使用\duS+

              \duS+

              --或

                \duS+ sel

                --查看用户在schema的权限

                  \dp

                  --查看数据库的用户

                    \l+



                    **权限解释:**

                    r -- SELECT ("读")
                    w -- UPDATE ("写")
                    a -- INSERT ("追加")
                    d -- DELETE
                    D -- TRUNCATE
                    x -- REFERENCES
                    t -- TRIGGER
                    X -- EXECUTE
                    U -- USAGE
                    C -- CREATE
                    c -- CONNECT
                    T -- TEMPORARY
                    arwdDxt -- ALL PRIVILEGES (对于表,对其他对象会变化)

                    * -- 用于前述特权的授权选项

                    2.2 在另一个进程中运行

                      psql -h localhost -p 5432 -U sel -d core


                      drop table aaa;
                      create table aaa(
                      objectid integer
                      );
                      select * from features;

                      上面的sql报

                        ERROR: table "aaa" does not exist
                        ERROR: no schema has been selected to create in
                        ERROR: relation "features" does not exist

                        2.3 用postgrese用户登录core数据库为sel用户授权

                          psql -h localhost -p 5432 -U postgres -d core

                               您需要什么权限就授予什么权限,这里授予sel用户可以select public schema下的所有对象。

                            grant usage on schema public to sel;
                            grant select on all tables in schema public to sel;

                            2.4 再次转到在另一个进程中运行

                              psql -h localhost -p 5432 -U sel -d core


                              select * from features;
                              delete from features;

                                   现在已经可以正常查询数据了,但是此用户只有查询权限。

                              3 删除用户

                              3.1 使用postgrese用户连接至core数据库

                                   注意你授予用户什么权限必须在drop用户前先revoke,然后再删除,否则报依赖错。所以授权文件保存好以便将来删除用户,不然查询关联性非常麻烦。

                                psql -h localhost -p 5432 -U postgres -d core

                                --回收分配的权限并删除用户

                                  revoke select on all tables in schema public from sel;
                                  revoke usage on schema public from sel;
                                  revoke connect on database core from sel;
                                  drop role sel;

                                       另外,删除角色通常不仅仅是快速DROP ROLE的问题。角色拥有的任何对象都必须首先删除或重新分配给其他所有者;删除已用于拥有对象的角色的最一般方法是(见中文手册21.4):

                                    REASSIGN OWNED BY doomed_role TO successor_role;
                                    DROP OWNED BY doomed_role;
                                    DROP ROLE doomed_role;


                                    I Love PG

                                    关于我们

                                    中国开源软件推进联盟PostgreSQL分会(简称:中国PG分会)于2017年成立,由国内多家PostgreSQL生态企业所共同发起,业务上接受工信部中国电子信息产业发展研究院指导。中国PG分会是一个非盈利行业协会组织。我们致力于在中国构建PostgreSQL产业生态,推动PostgreSQL产学研用发展。



                                    欢迎投稿

                                    做你的舞台,show出自己的才华 。

                                    投稿邮箱:partner@postgresqlchina.com

                                                                   

                                                                     ——愿能安放你不羁的灵魂


                                    技术文章精彩回顾




                                    PostgreSQL学习的九层宝塔
                                    PostgreSQL职业发展与学习攻略
                                    搞懂PostgreSQL数据库透明数据加密之加密算法介绍
                                    一文读懂PostgreSQL-12分区表
                                    一文搞懂PostgreSQL物化视图
                                    PostgreSQL源码学习之:RegularLock
                                    Postgresql源码学习之词法和语法分析
                                    2019,年度数据库舍 PostgreSQL 其谁?
                                    Postgres是最好的开源软件
                                    PostgreSQL是世界上最好的数据库
                                    从Oracle迁移到PostgreSQL的十大理由
                                    从“非主流”到“潮流”,开源早已值得拥有

                                    PG活动精彩回顾




                                    创建PG全球生态!PostgresConf.CN2019大会盛大召开
                                    首站起航!2019“让PG‘象’前行”上海站成功举行
                                    走进蓉城丨2019“让PG‘象’前行”成都站成功举行
                                    中国PG象牙塔计划发布,首批合作高校授牌仪式在天津举行
                                    群英论道聚北京,共话PostgreSQL
                                    相聚巴厘岛| PG Conf.Asia 2019  DAY0、DAY1简报
                                    相知巴厘岛| PG Conf.Asia 2019 DAY2简报
                                    独家|硅谷Postgres大会简报
                                    PostgreSQL线上沙龙第一期精彩回顾
                                    PostgreSQL线上沙龙第二期精彩回顾
                                    PostgreSQL线上沙龙第三期精彩回顾
                                    PostgreSQL线上沙龙第四期精彩回顾
                                    PostgreSQL线上沙龙第五期精彩回顾
                                    PostgreSQL线上沙龙第六期精彩回顾
                                    直播回顾 | Bruce Momjian:原生分布式将在PG 14版本发布

                                    PG培训认证精彩回顾




                                    中国首批PGCA认证考试圆满结束,203位考生成功获得认证!
                                    中国第二批PGCA认证考试圆满结束,115位考生喜获认证!
                                    重要通知:三方共建,中国PostgreSQL认证权威升级!
                                    近500人参与!首次PGCE中级、第三批次PGCA初级认证考试落幕!
                                    通知:PostgreSQL技术能力电子证书上线!
                                    2020年首批 | 中国PostgreSQL初级认证考试圆满结束



                                    推荐阅读
                                    • 本文详细介绍了如何使用OpenSSL自建CA证书的步骤,包括准备工作、生成CA证书、生成服务器待签证书以及证书签名等过程。 ... [详细]
                                    • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
                                    • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
                                    • 网站访问全流程解析
                                      本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
                                    • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
                                      在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
                                    • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
                                      在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
                                    • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
                                      在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
                                    • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
                                      本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
                                    • PTArchiver工作原理详解与应用分析
                                      PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
                                    • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
                                      在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
                                    • 深入探索HTTP协议的学习与实践
                                      在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
                                    • Spring框架中的面向切面编程(AOP)技术详解
                                      面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
                                    • Swoole加密机制的安全性分析与破解可能性探讨
                                      本文深入分析了Swoole框架的加密机制,探讨了其在实际应用中的安全性,并评估了潜在的破解可能性。研究结果表明,尽管Swoole的加密算法在大多数情况下能够提供有效的安全保护,但在特定场景下仍存在被攻击的风险。文章还提出了一些改进措施,以增强系统的整体安全性。 ... [详细]
                                    • 深入解析 OpenSSL 生成 SM2 证书:非对称加密技术与数字证书、数字签名的关联分析
                                      本文深入探讨了 OpenSSL 在生成 SM2 证书过程中的技术细节,重点分析了非对称加密技术在数字证书和数字签名中的应用。非对称加密通过使用公钥和私钥对数据进行加解密,确保了信息传输的安全性。公钥可以公开分发,用于加密数据或验证签名,而私钥则需严格保密,用于解密数据或生成签名。文章详细介绍了 OpenSSL 如何利用这些原理生成 SM2 证书,并讨论了其在实际应用中的安全性和有效性。 ... [详细]
                                    • Cosmos生态系统为何迅速崛起,波卡作为跨链巨头应如何应对挑战?
                                      Cosmos生态系统为何迅速崛起,波卡作为跨链巨头应如何应对挑战? ... [详细]
                                    author-avatar
                                    ShiZha0_625
                                    这个家伙很懒,什么也没留下!
                                    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
                                    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有