PG 中的錯誤
根據(jù) SQL 標準ps破解補丁沒有權限,模式的所有者始終擁有其中的所有對象。 允許架構包含架構所有者以外的用戶擁有的對象。
僅當架構所有者將架構的“”權限授予其他人,或者超級用戶選擇在架構中創(chuàng)建對象時,才會發(fā)生這種情況。
因此ps破解補丁沒有權限,存在一種情況ps破解補丁沒有權限
,一個對象屬于兩個所有者,并且所有者可以直接刪除其他用戶創(chuàng)建的對象。同樣的情況也發(fā)生在。
模式所有者刪除非擁有的對象
創(chuàng)建一個庫和兩個用戶
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創(chuàng)建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
發(fā)現(xiàn)uu1可以刪除uu2創(chuàng)建的表
testdb=> drop table uu1schema.t1;
DROP TABLE
更能直接刪除
testdb=> drop schema uu1schema cascade;
NOTICE: drop cascades to table uu1schema.t1
DROP SCHEMA
可以看出所有者uu1刪除了uu2創(chuàng)建的表對象。
?
庫所有者刪除非擁有的對象
賦予uu1創(chuàng)建database的權限
alter user uu1 createdb;
uu1創(chuàng)建庫
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