schema权限控制

默认情况下,用户不能访问不属于他们的模式中的任何对象。要允许这样做,模式的所有者必须授予该模式的USAGE特权。为了允许用户使用模式中的对象,可能需要为对象授予额外的权限。

还允许用户在其他人的模式中创建对象。要允许这样做,需要授予模式上的CREATE特权。注意,默认情况下,每个人在公共模式上都有CREATE和USAGE特权。这允许所有能够连接到给定数据库的用户在其公共模式中创建对象。一些使用模式要求撤销该特权:

db3=> \c db3 postgres
You are now connected to database "db3" as user "postgres".
db3=# create schema sb3 ;
CREATE SCHEMA
db3=# create table sb3.sb4(id int);
CREATE TABLE
db3=# \d
        List of relations
 Schema | Name | Type  |  Owner
--------+------+-------+----------
 public | sb3  | table | postgres
 public | t    | table | postgres
 public | t1   | table | test
(3 rows)

db3=# show search_path ;
   search_path
-----------------
 "$user", public
(1 row)

db3=# set search_path ="$user", public,sb3;
SET
db3=# \d
        List of relations
 Schema | Name | Type  |  Owner
--------+------+-------+----------
 public | sb3  | table | postgres
 public | t    | table | postgres
 public | t1   | table | test
 sb3    | sb4  | table | postgres
(4 rows)

--test用户无法访问不属于test的模式中的任何对象
db3=# \c db3 test
You are now connected to database "db3" as user "test".
db3=> \d
        List of relations
 Schema | Name | Type  |  Owner
--------+------+-------+----------
 public | sb3  | table | postgres
 public | t    | table | postgres
 public | t1   | table | test
(3 rows)

--切换到owner或者supper用户进行授权
db3=>  \c db3 postgres
You are now connected to database "db3" as user "postgres".

--授予他们可以访问的权限,模式的所有者必须授予该模式的USAGE特权
db3=# grant USAGE on SCHEMA sb3 to test;
GRANT
db3=# \c db3 test
You are now connected to database "db3" as user "test".
db3=> \d
        List of relations
 Schema | Name | Type  |  Owner
--------+------+-------+----------
 public | sb3  | table | postgres
 public | t    | table | postgres
 public | t1   | table | test
(3 rows)

--依然无法访问sb3模式下的对象,对search_path进行设置
db3=> show search_path ;
   search_path
-----------------
 "$user", public
(1 row)

db3=> set search_path ="$user", public,sb3;
SET
db3=> show search_path ;
     search_path
----------------------
 "$user", public, sb3
(1 row)

db3=> \d
        List of relations
 Schema | Name | Type  |  Owner
--------+------+-------+----------
 public | sb3  | table | postgres
 public | t    | table | postgres
 public | t1   | table | test
 sb3    | sb4  | table | postgres
(4 rows)

--为了允许用户使用模式中的对象,可能需要为对象授予额外的权限。
db3=> create table sb3.test(id int);
ERROR:  permission denied for schema sb3
LINE 1: create table sb3.test(id int);
                     ^
db3=> \c db3 postgres
You are now connected to database "db3" as user "postgres".

--授予create的权限
db3=# grant CREATE ON SCHEMA sb3 to test;
GRANT
db3=# \c db3 test
You are now connected to database "db3" as user "test".
db3=> create table sb3.test(id int);
CREATE TABLE

--收回create的权限
--第一个“public”是模式,第二个“public”是每一个用户。在第一种意义上,它是一个标识符,在第二种意义上,它是一个关键字,因此大小写不同;回顾第4.1.1节的指导方针。
db3=> \c db3 postgres
You are now connected to database "db3" as user "postgres".
db3=# REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE

--回收某个用户上的public权限
(db3=# REVOKE CREATE ON SCHEMA public FROM test;)

db3=# \c db3 test
You are now connected to database "db3" as user "test".
db3=> create table public.pub(id int);
ERROR:  permission denied for schema public

参考连接:https://www.postgresql.org/docs/14/ddl-schemas.html#DDL-SCHEMAS-PUBLIC

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值