跳转至

数据库

一、数据库属主

  • Postgres中的数据库属主属于创建者,只要有createdb的权限就可以创建数据库,数据库属主不一定拥有存放在该数据库中其它用户创建的对象的访问权限。
  • 数据库在创建后,允许public角色连接,即允许任何人连接。
  • 数据库在创建后,不允许除了超级用户和owner之外的任何人在数据库中创建schema。
  • 数据库在创建后,会自动创建名为public的schema,这个schema的all权限已经赋子给了public角色,即允许任何人在里面创建对象,但对己存在的其它用户的表不具有任何权限。

二、数据库权限

  • CREATE:可以在指定数据库创建schema的权限
  • CONNECT:可以连接到指定数据库的权限
  • TEMPORARY:可以创建临时表的权限
  • ALL:指定数据库所有的权限

三、权限管理

由于数据库在创建后,允许public角色连接,即允许任何人连接。所以如果要取消某个用户对指定数据库连接的权限,需要先取消public的连接权限,再取消该用户的连接权限。

1
2
3
4
5
6
7
-- 授权用户连接数据库的权限
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;
--查看哪些用户有某个数据库的connect权限
select datname,datacl from pg_database where datname='newdb';

数据库环境设置

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

1
2
3
4
ALTER DATABASE name SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER DATABASE name SET configuration_parameter FROM CURRENT
ALTER DATABASE name RESET configuration_parameter
ALTER DATABASE name RESET ALL

例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-- 设置数据库搜索路径:
alter database postgres set search_pathl to '$user',public,schema_name;
-- 配置连接某个库时可使用的工作内存
alter database postgres set work_mem = '8MB';
-- 配置连接某个库时可使用的维护内存
alter database postgres set maintenance_work_mem TO '256MB';
-- 配置连接某个库后使用的时区
alter database postgres set TimeZone to cet;
alter database postgres set DateStyle to SQL,DMY; --重新登录生效
-- 配置连接某个库后执行语句最多时长(执行1秒超时)
alter database postgres set statement timeout = 1000;
-- 配置连接某个库后默认的客户端编码, 配置客户端编码为gbk, 适用于数据库编码为utf8,应用程序编码为gbk的应用
alter database postgres set client_encoding to gbk;
-- 配置某个库使用日志记录级别(设置后,对这个数据库的访问不记录日志)
alter database postgres set log_statement=none;
-- 配置连接某个库后的wal日志写盘级别(设置后,该库的更新操作只要求本地提交)
alter database postgres set synchronous_commit to local;
-- 配置连接某个库后禁用某个规划器(禁用indexonlyscan扫描)
alter database postgres set enable_indexonlyscan to off;
--查看所有个性化配置
\drds
-- 查询数据库的连接数限制只能查看数据字典表
select datname, datconnlimit from pg_database;
--设置某个个性化设置为默认值
ALTER DATABASE postgres reset exit_on_error;
-- 设置所有个性化设置为默认值
ALTER DATABASE postgres reset ALL;