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

PostgreSQL 学习笔记010 —— PostgreSQL 权限管理(案例)

心有阳光 2023-01-05
1585

PostgreSQL 权限管理(案例)

案例1

用户user2对user1所有的user1db数据库有connect、create、delete、update表权限

-- pg数据库对于新建的用户默认有public权限。也就是用户对已有数据库和表有SELECT,UPDATE,DELETE,CONNECT,USAGE权限。 -- 新建用户user1和user2,u1有createdb创建数据库权限。 postgres=# create user user1 password 'user1' valid until '2023-01-03'; CREATE ROLE postgres=# create user user2 password 'user2' valid until '2023-01-03'; CREATE ROLE postgres=# alter user user1 createdb login; ALTER ROLE postgres=# \dg List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} user1 | Create DB +| {} | Password valid until 2023-01-03 00:00:00+08 | user2 | Password valid until 2023-01-03 00:00:00+08 | {} postgres=> \q [postgres@192 ~]$ psql -U user1 -p 5432 postgres -W Password: psql (14.6) Type "help" for help. postgres=> create database user1db; CREATE DATABASE postgres=> \l+ List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description -----------+----------+----------+-------------+-------------+-----------------------+---------+------------+-------------------------------------------- postgres | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =Tc/postgres +| 8561 kB | pg_default | default administrative connection database | | | | | postgres=CTc/postgres | | | template0 | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres +| 8385 kB | pg_default | unmodifiable empty database | | | | | postgres=CTc/postgres | | | template1 | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres +| 8385 kB | pg_default | default template for new databases | | | | | postgres=CTc/postgres | | | user1db | user1 | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | 8385 kB | pg_default | (4 rows)
-- user2可以登录user1db数据库 并且有connect、create、delete、update表权限。因为默认user1db数据库有public权限。 [postgres@192 ~]$ psql -U user2 -p 5432 user1db psql (14.6) Type "help" for help. user1db=> create table test2(id int); CREATE TABLE

案例2

user1用户回收user1db数据库PUBLIC权限,user2用户不能连接user1db数据库

-- user1用户回收user1db的connect权限 [postgres@192 ~]$ psql -U user1 -p 5432 user1db psql (14.6) Type "help" for help. user1db=> revoke CONNECT on DATABASE user1db from PUBLIC ; REVOKE user1db=> \q -- user2用户登录user1db失败 [postgres@192 ~]$ psql -U user2 -p 5432 user1db psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: permission denied for database "user1db" DETAIL: User does not have CONNECT privilege. -- user1用户授权user1db数据库connect权限给user2用户,user2用户可以登录user1db,并可以在user1db数据库public模式下创建表。 [postgres@192 ~]$ psql -U user1 -p 5432 user1db psql (14.6) Type "help" for help. user1db=> grant CONNECT on DATABASE user1db to user2; GRANT user1db=> \q [postgres@192 ~]$ psql -U user2 -p 5432 user1db psql (14.6) Type "help" for help. user1db=> create table test5(id int); CREATE TABLE

案例3

user1用户新建user1模式,对user2用户授权usage访问user1模式。

-- user1用户新建user1模式,默认user2无权限访问user1模式及模式里的表。 [postgres@192 ~]$ psql -U user1 -p 5432 user1db psql (14.6) Type "help" for help. user1db=> create schema user1; CREATE SCHEMA user1db=> create table user1.test1(id int); CREATE TABLE user1db=> \dp test1 Access privileges Schema | Name | Type | Access privileges | Column privileges | Policies --------+-------+-------+-------------------+-------------------+---------- user1 | test1 | table | | | (1 row) user1db=> \q
[postgres@192 ~]$ psql -U user2 -p 5432 user1db psql (14.6) Type "help" for help. user1db=> select * from user1.test1; ERROR: permission denied for schema user1 LINE 1: select * from user1.test1; user1db=> \q
-- 授予user2用户访问user1模式时,注意需要先对user2用户授权usage访问user1模式,否则报权限不足。 [postgres@192 ~]$ psql -U user1 -p 5432 user1db psql (14.6) Type "help" for help. user1db=> grant SELECT on ALL tables in schema user1 to user2; GRANT user1db=> \q
[postgres@192 ~]$ psql -U user2 -p 5432 user1db psql (14.6) Type "help" for help. user1db=> select * from user1.tser1 ; ERROR: permission denied for schema user1 LINE 1: select * from user1.tser1 ; user1db=> \q
-- 正确操作方式 [postgres@192 ~]$ psql -U user1 -p 5432 user1db psql (14.6) Type "help" for help. user1db=> grant USAGE ON schema user1 to user2; GRANT user1db=> grant SELECT on ALL tables in schema user1 to user2; GRANT user1db=> \dp user1.test1 Access privileges Schema | Name | Type | Access privileges | Column privileges | Policies --------+-------+-------+---------------------+-------------------+---------- user1 | test1 | table | user1=arwdDxt/user1+| | | | | user2=r/user1 | | (1 row) user1db=> \q
[postgres@192 ~]$ psql -U user2 -p 5432 user1db psql (14.6) Type "help" for help. user1db=> select * from user1.test1 ; id ---- (0 rows) user1db=> \q
-- 对于后续user1用户在user1模式下新建的表user2用户无权限访问。如果想对该schema下新建的表也获得权限,需要对该schema的owner授权给用户。 [postgres@192 ~]$ psql -U user1 -p 5432 user1db psql (14.6) Type "help" for help. user1db=> alter default privileges for ROLE user1 in schema user1 grant select on tables to user2; ALTER DEFAULT PRIVILEGES user1db=> create table user1.test2(id int); CREATE TABLE user1db=> \q
[postgres@192 ~]$ psql -U user2 -p 5432 user1db psql (14.6) Type "help" for help. user1db=> select * from user1.test2 ; id ---- (0 rows) user1db=> \q
最后修改时间:2023-01-05 21:30:20
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论