当前位置: 首页 > 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 db_name 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=# \dt
          List of relations
 Schema |   Name   | Type  |  Owner
--------+----------+-------+----------
 public | t0102    | table | postgres
 public | test     | table | r11
 public | test_con | table | postgres
 public | tt       | table | postgres
 u1_s1  | test1    | table | u3
 u1_s1  | test2    | table | u3
 u1_s1  | test3    | table | u3
(7 rows)

postgres=#

2、配置连接某个库时可使用的工作内存
alter database db_name set work_mem ='8MB';

设置的是连接到这个数据库时给这个用户分配的内存

3、配置连接某个库时可使用的维护内存
alter database db_name set maintenance_work_mem TO  '256MB';

4、配置连接某个库后使用的时区
alter database db_name set TimeZone to cet;
alter database db_name set DateStyle to SQL, DMY;(重新登录生效)


5、配置连接某个库后执行语句最多时长(执行1秒超时)
alter database db_name set statement_timeout =1000;


6、配置连接某个库后默认的客户端编码,配置客户端编码为gbk,适用于数据库编码
为utf8,应用程序编码为gbk的应用

alter database db_name set client_encoding to gbk;

7、配置某个库使用日志记录级别(设置后,对这个数据库的访问不记录日志)
alter database db_name set log statement=none;

8、配置连接某个库后的wal日志写盘级别设置后,该库的更新操作只要求本地提交)
alter database db_name set synchronous_commit to local;


9、配置连接某个库后禁用某个规划器(禁用indexonlyscan扫描)
alter database db_name set enable_indexonlyscan to off;

10.配置连接某个库后执行出错时中断连接(对新会话生效)
alter database db_name set exit_on_error to on;

--重新连接后
select pg_backend_pid();

postgres=# alter database u3_db set exit_on_error to  on;
ALTER DATABASE
postgres=# exit
[postgres@db /var/postgre/data]$psql -d u3_db
psql (16.0)
Type "help" for help.

返回当前连接到数据库的会话所对应的后端进程的进程 ID(PID)
u3_db=# select pg_backend_pid();
 pg_backend_pid
----------------
           4615
(1 row)

u3_db=# create table kil;
FATAL:  syntax error at or near ";"
LINE 1: create table kil;
                        ^
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.
u3_db=# select pg_backend_pid();

返回当前连接到数据库的会话所对应的后端进程的进程 ID(PID),可以看到进程已经变了
 pg_backend_pid
----------------
           4704
(1 row)

u3_db=#

10、设置为默认值

--设置某个个性化设置为默认值
ALTER DATABASE db_name reset exit_on_error;
--设置所有个性化设置为默认值
ALTER DATABASE db_name reset ALL;

(三)查看个性化设置

1、查看所有个性化配置
\drds

u3_db=# \drds
                   List of settings
 Role | Database |              Settings
------+----------+------------------------------------
      | postgres | search_path="$user", public, u1_s1
      | u3_db    | exit_on_error=on
(2 rows)

u3_db=#


2、查询数据库的连接数限制只能查看数据字典表
select datname,datconnlimit from pg_database;

连接数限制的设置可以在实例级别,也可以在数据库级别

u3_db=# select datname,datconnlimit from pg_database;
  datname  | datconnlimit
-----------+--------------
 template1 |           -1
 template0 |           -1
 pubdb     |           -1
 pubdb1    |           -1
 u3_db     |           -1
 newdb1    |           -1
 postgres  |           -1
(7 rows)

u3_db=#
-1表示没有限制。

四、PostgreSQl数据库属性修改
数据库的属性我们可以进行修改,修改范围是数据库名字、属主、表空间。

(一)修改数据库的名称
ALTER DATABASE 名称 RENAME TO 新的名称

(二)修改数据库的属主

ALTER DATABASE 名称 OWNER TO {新的属主|CURRENT USERISESSION_USER}

(三)修改数据库到新的表空间

ALTER DATABASE 名称 SET TABLESPACE 新的表空间

相关文章:

  • MATLAB中ifft函数用法
  • MySQL的常见优化策略
  • RT-Thread+STM32L475VET6——ADC采集电压
  • 创建三个节点
  • 通过EDI对接Vitamin Discount Center:高效供应链协作的核心策略
  • 网页制作03-html,css,javascript初认识のhtml的图像设置
  • 【组件安装FAQ】Rocky 8.10 Manager 24.03.3升级到24.10.02
  • Python基于Flask的豆瓣Top250电影数据可视化分析与评分预测系统(附源码,技术说明)
  • 项目管理工具Jira在营销工作管理中的应用与实践
  • 高速PCB设计
  • Bigemap Pro如何设置经纬网出图网格设置
  • 网工项目实践2.6 广域网需求分析及方案制定
  • 数据要素中 数据产权的三权如何分置?
  • Linux下ioctl的应用
  • 框架--Mybatis 2
  • YOLOv12推理详解及部署实现
  • 图解MySQL【日志】——Undo Log
  • 案例-18.文件上传-阿里云OSS-集成
  • 0081.基于springboot+uni-app的垃圾分类小程序+论文
  • PAT乙级( 1018 锤子剪刀布)C语言超详细解析
  • 竞彩湃|欧联杯决赛前,曼联、热刺继续划水?
  • 网易有道一季度净利润同比增长247%:有能力在今年实现更强劲的利润增长
  • 美国与卡塔尔签署超2435亿美元经济及军事合作协议
  • 微软宣布将裁员3%
  • 香港根据《维护国家安全条例》订立附属法例
  • 图讯丨习近平出席中国-拉美和加勒比国家共同体论坛第四届部长级会议开幕式