在Postgres数据库中,应用程序数据可以以不同的方式组织使用Postgres模式。Postgres数据库集群,每当我们创建一个新的数据库时,它会创建默认的模式被称为公共模式。这篇文章将会讨论在PostgreSQL 15公共模式安全升级。
|
1
2
3
4
5
6
7
8
9
10
11
12
|
postgres
=
#创建数据库d1;
创建
数据库
postgres
=
#
postgres
=
# c d1
你
是
现在
连接
来
数据库
“d1”
作为
用户
“postgres”
。
d1
=
#
d1
=
# dn
列表
的
模式
的名字
|
老板
- - -
- - -
- - -
- - -
+
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - - - - -
公共
|
pg_database_owner
(
1
行
)
|
当我们创建一个表没有指定模式名,它被创建的模式,这是设置的search_path。默认情况下,search_path的第一部分定义名称相同的模式当前用户,第二个search_path指的一部分公共模式。
|
1
2
3
4
5
|
postgres
=
#显示search_path;
search_path
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - - - - -
“美元用户”
,
公共
(
1
行
)
|
Postgres顺序查找模式根据列表中提到的search_path,所以当我们执行create table命令、Postgres创建表在第一模式search_path中提到。如果它不存在,就创建它下面的模式。
同样,如果没有指定模式名select查询,Postgres将搜索表内根据指定的模式search_path。
公共模式安全升级在PostgreSQL 15
Postgres 14,当你创建一个数据库用户,默认情况下,它被创建创建和使用公共模式上的特权。
这意味着直到Postgres 14,任何用户都可以手动编写公共模式直到你撤销用户的创建特权在公共模式。
PostgreSQL 15日开始创建公共模式特权撤销/删除从所有用户除了数据库所有者。
Postgres 15,现在新用户不能创建表或写数据Postgres公共默认模式。你必须手动授予创建新用户权限。
使用新用户特权在公共模式仍然存在Postgres 15,像Postgres 14和以前的版本。
下面的例子显示了一个新用户(test1)可以创建一个表在Postgres 14不授予任何权限。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
|
postgres
=
# conninfo
你
是
连接
来
数据库
“postgres”
作为
用户
“test1”
通过
套接字
在
“/ var /跑步/ postgresql”
在
港口
“5432”
。
postgres
=
#选择版本();
版本
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - - - - -
PostgreSQL
14.8
在
x86_64
- - - - - -
个人电脑
- - - - - -
linux
- - - - - -
gnu
,
编译
通过
海湾合作委员会
(
海湾合作委员会
)
4.8.5
20150623
(
红色的
帽子
4.8.5
- - - - - -
44
)
,
64年
- - - - - -
位
(
1
行
)
postgres
=
#
postgres
=
#
postgres
=
#显示search_path;
search_path
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - - - - -
“美元用户”
,
公共
(
1
行
)
postgres
=
#
postgres
=
#创建表部门(empID int);
创建
表
postgres
=
#插入部值(10);
插入
0
1
postgres
=
#
|
下面的例子显示,Postgres 15只允许新用户(test1)创建表发放创建特权的公共模式。
|
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
28
|
postgres
=
# conninfo
你
是
连接
来
数据库
“postgres”
作为
用户
“test1”
通过
套接字
在
“/ var /跑步/ postgresql”
在
港口
“5432”
。
postgres
=
#选择版本();
版本
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - - - - -
PostgreSQL
15.3
在
x86_64
- - - - - -
个人电脑
- - - - - -
linux
- - - - - -
gnu
,
编译
通过
海湾合作委员会
(
海湾合作委员会
)
4.8.5
20150623
(
红色的
帽子
4.8.5
- - - - - -
44
)
,
64年
- - - - - -
位
(
1
行
)
postgres
=
#显示search_path;
search_path
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - - - - -
“美元用户”
,
公共
(
1
行
)
postgres
=
#创建表部门(empID int);
错误
:
许可
否认
为
模式
公共
行
1
:
创建
表
部门
(
empID
int
)
;
postgres
=
# conninfo
你
是
连接
来
数据库
“postgres”
作为
用户
“postgres”
通过
套接字
在
“/ var /跑步/ postgresql”
在
港口
“5432”
。
postgres
=
#
postgres
=
#格兰特创建模式公众test1;
格兰特
postgres
=
#
postgres
=
# conninfo
你
是
连接
来
数据库
“postgres”
作为
用户
“test1”
通过
套接字
在
“/ var /跑步/ postgresql”
在
港口
“5432”
。
postgres
=
#创建表部门(empID int);
创建
表
postgres
=
#
|
下面的例子表明,使用特权公共模式Postgres 15中的新用户仍然存在,如Postgres 14和以前的版本。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
21
|
postgres
=
# conninfo
你
是
连接
来
数据库
“postgres”
作为
用户
“postgres”
通过
套接字
在
“/ var /跑步/ postgresql”
在
港口
“5432”
。
postgres
=
#
postgres
=
#创建表运输(vehicleno int);
创建
表
postgres
=
#插入传输值(25);
插入
0
1
postgres
=
#
postgres
=
test1 #格兰特选择运输;
格兰特
postgres
=
#问
- - - - - -
bash
- - - - - -
4.2
美元
psql
- - - - - -
d
postgres
- - - - - -
U
test1
密码
为
用户
test1
:
psql
(
15.3
)
类型
“帮助”
为
帮助
。
postgres
=
# select * from运输;
vehicleno
- - -
- - -
- - -
- - -
- - -
- - - - - -
25
(
1
行
)
postgres
=
#
|
公共模式所有权变化PostgreSQL 15
在Postgres 14和以前的版本,默认情况下,公共模式属于引导超级用户(postgres),但从postgres 15,公共所有权模式已经改变到新的pg_database_owner的角色。它使每个数据库所有者拥有数据库的公共模式。
下面的例子显示了所有权变化之间的Postgres 14和15 Postgres。
Postgres 14
|
1
2
3
4
5
6
|
postgres
=
# dn
列表
的
模式
的名字
|
老板
- - -
- - -
- - -
- - -
+
- - -
- - -
- - -
- - -
- - -
公共
|
postgres
(
1
行
)
|
Postgres 15
|
1
2
3
4
5
6
7
|
postgres
=
# dn
列表
的
模式
的名字
|
老板
- - -
- - -
- - -
- - -
+
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - - - - -
公共
|
pg_database_owner
(
1
行
)
postgres
=
#
|
下面的链接访问详情Postgres模式。
https://www.postgresql.org/docs/15/ddl-schemas.html
https://www.postgresql.org/docs/release/15.0/
雷竞技下载官网Percona分布PostgreSQL提供最好的和最关键的企业组件从开源社区在一个分布,设计和测试一起工作。





