暂无图片
暂无图片
1
暂无图片
暂无图片
1
暂无图片

lightdb for postgresql 系列【两种public】

原创 姚崇 2022-03-20
1463

PostgreSQL中两个public,第一种情况,PUBLIC 是一个特殊的角色,代表着所有人;第二种情况,public是一个schema,默认情况下public schema是赋予给所有创建的用户的,下面我们做个实验看看

postgres=# create user public_test; CREATE ROLE [lightdb@VM-16-10-centos scripts]$ ltsql -Upublic_test -p3066 ltsql (13.3-21.3) Type "help" for help. postgres=> postgres=> create table public_test (id int); CREATE TABLE postgres=> \dt+ public_test List of relations Schema | Name | Type | Owner | Persistence | Size | Description --------+-------------+-------+-------------+-------------+---------+------------- public | public_test | table | public_test | permanent | 0 bytes | (1 row)
复制

可以看到默认情况下,新创建的用户,是可以在public schema下创建对象的,也就是说默认情况下public schema赋予了所有人PUBLIC(用户)。

我们可以通过下面的命令收回这个权限(public schema从所有用户收回)

postgres=# revoke ALL on SCHEMA public from public; REVOKE postgres=# postgres=# exit $ ltsql -Upublic_test ltsql (13.3-21.3) Type "help" for help. postgres=> create table public_test1(id int); ERROR: permission denied for schema oracle LINE 1: create table public_test1(id int);
复制

另外默认情况下,数据库在创建后,允许public角色连接,即允许任何人连接

postgres=# create database public_test; CREATE DATABASE postgres=# postgres=# exit $ ltsql -Upublic_test -dpublic_test ltsql (13.3-21.3) Type "help" for help. public_test=>
复制

需要revoke connect on database new_db_name from public之后,

$ ltsql ltsql (13.3-21.3) Type "help" for help. postgres=# revoke connect on database public_test from public; REVOKE postgres=# exit $ ltsql -Upublic_test -dpublic_test ltsql: error: FATAL: permission denied for database "public_test" DETAIL: User does not have CONNECT privilege.
复制

再显式执行赋予权限

grant connect on database public_test to public_test;
复制

这样就引申出一个话题,如何标准创建用户和给予权限,我们后面再看

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

墨天轮福利君
暂无图片
3年前
评论
暂无图片 0
您好,您的文章已入选墨力原创作者计划合格奖,10墨值奖励已经到账请查收! ❤️我们还会实时派发您的流量收益。
3年前
暂无图片 点赞
评论