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

9.PG数据库层权限管理(pg系列课程)第2遍

一、PostgreSQL数据库属主

  • Postgres中的数据库属主属于创建者,只要有createdb的权限就可以创建数据库,数据库属主不一定拥有存放在该数据库中其它用户创建的对象的访问权限。
  • 数据库在创建后,允许public角色连接,即允许任何人连接。(如果要限制某个用户,那么先要取消public用户的权限。)
  • 数据库在创建后不允许除了超级用户和owner之外的任何人在数据库中创建schema。(允许创建表不允许创建schema。是因为创建的表是默认在public下的,如果要创建schema的话需要单独授权)
  • 数据库在创建后,会自动创建名为public的schema,这个schema的al权限已经赋予给了public角色,即允许任何人在里面创建对象,但对己存在的其它用户的表不具有任何权限。

二、PostgreSQl数据库权限

GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }ON DATABASE database_name [, ...]TO role_specification [, ...] [ WITH GRANT OPTION ][ GRANTED BY role_specification ]

(一)CREATE:

可以在指定数据库创建schema的权限

(建表的权限不需要单独给,建库的时候就已经把建表的权限给了public)

例如:grant create on database test01 to u1;


(二)CONNECT:

可以连接到指定数据库的权限

授权用户连接数据库的权限
grant connect on database db_name to user_name;撤销用户连接数据库的权限
revoke connect on database db_name from public;
revoke connect on database db_name from user_name;由于数据库在创建后,允许public角色连接,即允许任何人连接。所以如果要取
消某个用户对指定数据库连接的权限,需要先取消public的连接权限,再取消该
用户的连接权限。


(三)TEMPORARY:

可以创建临时表的权限

(四)ALL:

指定数据库所有的权限

(五)查看哪些用户有哪些数据库的哪些权限

查看哪些用户有哪些数据库的哪些权限
select datname,datacl from pg_database where datname='db_name';datacl 列是一个数组类型,权限条目通常以以下格式表示:
rolename=权限/授予者rolename:拥有权限的角色或用户。
权限:授予的权限,例如 CTc(CREATE、TEMPORARY、CONNECT)。
授予者:授予该权限的角色。datname |                     datacl
---------+------------------------------------------------mydb    | {admin=CTc/postgres,user1=c/postgres}postgres| template1 | {=c/postgres,postgres=CTc/postgres}template0 | {=c/postgres,postgres=CTc/postgres}admin=CTc/postgres 表示用户 admin 拥有 CREATE、TEMPORARY 和 CONNECT 权限,这些权限是由 postgres 用户授予的。
user1=c/postgres 表示用户 user1 拥有 CONNECT 权限,这些权限是由 postgres 用户授予的。
=c/postgres 表示所有用户(PUBLIC)都拥有 CONNECT 权限,这些权限是由 postgres 用户授予的。

三、postgresql数据库级别的参数如何设置

(一)设置方法

postgresql是参数设置分为实例级、数据库级、用户级和会话级,而有些参数可以在所有级别中设置,优先级顺序为会话级>用户级>数据库级>实例级。

数据库参数配置语法:
ALTER DATABASE 名称 SET  配置参数 {TO|=} {值|DEFAULT}
ALTER DATABASE 名称 SET  配置参数 FROM CURRENT
ALTER DATABASE 名称 RESET 配置参数
ALTER DATABASE 名称 RESET ALL

(二)设置示例

1、设置数据库搜索路径:
alter database postgres set search_path to "$user", public, schema_name;

设置模式搜索路径
postgres=# alter database postgres set search_path to "$user",public,u1_s1;
ALTER DATABASE
postgres=# show search_path;search_path
-----------------"$user", public
(1 row)设置完要exit退出再重新连进来才生效。
postgres=# exit
[postgres@db /var/postgre/data]$psql
psql (16.0)
Type "help" for help.postgres=# show search_path;search_path
------------------------"$user", public, u1_s1
(1 row)postgres=# \dtList of relationsSchema |   Name   | Type  |  Owner
--------+----------+-------+----------public | t0102    | table | postgrespublic | test     | table | r11public | test_con | table | postgrespublic | tt       | table | postgresu1_s1  | test1    | table | u3u1_s1  | test2    | table | u3u1_s1  | test3    | table | u3
(7 rows)postgres=#

27min


http://www.mrgr.cn/news/91446.html

相关文章:

  • ubuntu22.04离线安装K8S
  • DeepSeek部署到本地(解决ollama模型下载失败问题)
  • 0.1 量海航行:量化因子列表汇总(持续更新)
  • Windows 启动 SSH 服务
  • 搞懂deepseek(一) 搭建一个自己的智能助手
  • 2025-02-18 学习记录--C/C++-PTA 7-25 念数字
  • 基于Ubuntu系统的docker环境对MySQL8.0.36主从部署
  • Recall(召回率)和 Precision(精确率) 的区别和F1分数
  • 【模板】图论 最短路 (Floyd+SPFA+Dijkstra)
  • 第一课 — nRF Connect SDK介绍
  • 代码补全『三重奏』:EverEdit如何用上下文识别+语法感知+智能片段重构你的编码效率!
  • 蓝桥杯单片机基础部分——6、555定时器
  • DeepSeek V3和R1
  • C++共享指针实战
  • ls命令的全面参数解析与详尽使用指南
  • 观察者模式原理详解以及Spring源码如何使用观察者模式?
  • gcc和g++的区别以及明明函数有定义为何链接找不到
  • 3.10 企业级AI内容生成引擎:从策略到落地的全链路技术指南
  • 02.05、链表求和
  • 网络安全的态势如何以及如何解决?