首页 > 数据库 >关于postgresql权限的一个bug

关于postgresql权限的一个bug

时间:2022-10-18 20:01:47浏览次数:69  
标签:postgresql postgres database create uu1 uu1schema testdb 权限 bug


PG中的bug

根据SQL标准,一个模式的所有者总是拥有其中的所有对象。PostgreSQL允许模式包含由模式所有者以外的用户拥有的对象。

这种情况才会发生在,当模式拥有者将模式的"CREATE"权限授予其他人,或者超级用户选择在模式中创建对象。

所以,就存在这么一种情况,一个对象属于两个owner,schema的owner可以直接drop其他用户创建的对象。

同样这种情况在database中也出现。


模式owner删除非所属对象

创建一个库和两个用户
postgres=# create database tesedb;
CREATE DATABASE
postgres=# \conninfo
You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432".
postgres=# create user uu1;
CREATE ROLE
postgres=# create user uu2;
CREATE ROLE

赋予uu1 create的权限
testdb=> \c testdb postgres;
You are now connected to database "testdb" as user "postgres".
testdb=# grant create on database testdb to uu1;
GRANT


uu1创建schema
testdb=# \c testdb uu1;
You are now connected to database "testdb" as user "uu1".
testdb=> create schema uu1schema;
CREATE SCHEMA
testdb=> \dn+
List of schemas
Name | Owner | Access privileges | Description
-----------+----------+----------------------+------------------------
public | postgres | postgres=UC/postgres+| standard public schema
| | =UC/postgres |
uu1schema | uu1 | |



赋予uu2 create权限
postgres=# \c testdb
You are now connected to database "testdb" as user "postgres".
testdb=# grant create on schema uu1schema to uu2;
GRANT

uu在uu1的schema下去建表
postgres=# \c testdb uu2;
testdb=> create table uu1schema.t1(id int);
CREATE TABLE


发现uu1可以删除uu2创建的表
testdb=> drop table uu1schema.t1;
DROP TABLE

更能直接删除
testdb=> drop schema uu1schema cascade;
NOTICE: drop cascades to table uu1schema.t1
DROP SCHEMA

可以看到,uu1schema的owner uu1删除掉了uu2创建的表对象。

库owner删除非所属对象

赋予uu1创建database的权限
alter user uu1 createdb;

uu1创建库
testdb=> create database db1;
CREATE DATABASE


uu2连接上db1
\c db1 uu2
create table t1(id int);

切换到uu1
db1=> \c db1 uu1;
You are now connected to database "db1" as user "uu1".
db1=> drop table t1; 无法删除表
ERROR: must be owner of table t1

但是却能直接删库
testdb=> drop database db1;
DROP DATABASE

标签:postgresql,postgres,database,create,uu1,uu1schema,testdb,权限,bug
From: https://blog.51cto.com/u_13874232/5768035

相关文章

  • BUG记录 ---- 小程序开发
    1.bug记录微信开发者工具公众号网页调试的调试器没了?改变打开开发者工具的方式,改为windows从任务栏打开工具!!!!而不是从快捷方式或者底部固定栏打开开发者工具里面的......
  • Win 权限维持小思路
    0x01linkinfo.dll介绍:explorer进程每隔一段时间就会自动去加载它一次所以可以用来做权限维持。使用Cobaltstrike生成对应系统位数DLL文件放置目标系统C:\Windows\目录下重......
  • PostgreSQL 数据库开发规范
    背景PostgreSQL的功能非常强大,但是要把PostgreSQL用好,开发人员是非常关键的。下面将针对PostgreSQL数据库原理与特性,输出一份开发规范,希望可以减少大家在使用PostgreSQL......
  • 浙江工业大学校赛 画图游戏 BugZhu抽抽抽!!
    BugZhu抽抽抽!!TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):695    AcceptedSubmission(s):253......
  • 【Bug解决】centos安装docker显示 No package docker-ce available
    问题:我在如下安装docker的命令到yum-yinstalldocker-ce报错Nopackagedocker-ceavailable#1.下载关于docker的依赖环境yum-yinstallyum-utilsdevice-mapper-per......
  • 拒绝了对对象 ‘GetTips‘ (数据库 ‘vipsoft‘,架构 ‘dbo‘)的 EXECUTE 权限
    SQLServer2016安装数据库—属性—权限—选择用户或角色—勾选执行权限即可。 ......
  • 一个有趣的BUG
    最近在协助团队完成ES数据的切换(业务数据迁移),过程中遇到一个比较好玩的BUG,和大家分享并作为经验记录。 01 问题发现过程 通过前期的方案设计和比较,我们决定通过elas......
  • Laravel 文件缓存场景 BUG
    起因在使用缓存场景,直接命令运行产生的缓存文件。与nginx+phpfpm运行产生的缓存文件,权限所属人不同,导致缓存文件无法使用。建议解决切换缓存引擎,将缓存引擎换为redis......
  • root开启权限
    ubuntu中root开启伪分布式权限:vimstart-dfs.sh和vimstop-dfs.sh后均在开头插入HDFS_DATANODE_USER=rootHDFS_DATANODE_SECURE_USER=hdfsHDFS_NAMENODE_USER=rootHDFS_......
  • 常用PostgreSQL函数
    工作中用到的函数做一下记录加深影响。to_number用法:to_number(text1,text2)text1:需要转换的字符串text2:格式化模板,如模式9,代表一个数位......