BUG #1497: Default permissions allow any user to create objects in any database

Started by Barry Brownabout 21 years ago5 messagesbugs
Jump to latest
#1Barry Brown
barry@cs.sierracollege.edu

The following bug has been logged online:

Bug reference: 1497
Logged by: Barry Brown
Email address: barry@cs.sierracollege.edu
PostgreSQL version: 8.0.1
Operating system: RHEL 3.0
Description: Default permissions allow any user to create objects in
any database
Details:

The docs say that initially only the owner of a database may use the objects
created in it. But I have found that ANY user can work with any object by
default, even in the template1 database.

To reproduce the bug, I will create a user called 'sqltest' with password
'foobar', connect to template1 as that user, and create a table.

First, create the user:
[root@cs data]# su - postgres
-bash-2.05b$ psql template1
Welcome to psql 8.0.1, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\g or terminate with semicolon to execute query
\q to quit

template1=# create user sqltest password 'foobar';
CREATE USER

Next, connect as that user to template1:
[barry@cs barry]$ psql -U sqltest template1
Password:
Welcome to psql 8.0.1, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

template1=>

Finally, create a table:
template1=> create table foo (
template1(> id_num int
template1(> );
CREATE TABLE
template1=> \dt foo
List of relations
Schema | Name | Type | Owner
--------+------+-------+---------
public | foo | table | sqltest
(1 row)

I should not be able to do this.

I compiled PostgreSQL from the FC3 SRPM found on rpmfind.net. I had to
disable SSL, KRB, and Selftest in the spec file to make it compile.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Barry Brown (#1)
Re: BUG #1497: Default permissions allow any user to create objects in any database

"Barry Brown" <barry@cs.sierracollege.edu> writes:

I should not be able to do this.

Not everyone would agree with you. But if you want to work that way,
revoke public CREATE privileges on the public schema, and revoke public
CREATE privileges on the database so people can't create new schemas.

regards, tom lane

#3Bruce Momjian
bruce@momjian.us
In reply to: Barry Brown (#1)
Re: BUG #1497: Default permissions allow any user to create objects

Barry Brown wrote:

The following bug has been logged online:

Bug reference: 1497
Logged by: Barry Brown
Email address: barry@cs.sierracollege.edu
PostgreSQL version: 8.0.1
Operating system: RHEL 3.0
Description: Default permissions allow any user to create objects in
any database
Details:

The docs say that initially only the owner of a database may use the objects
created in it. But I have found that ANY user can work with any object by
default, even in the template1 database.

Uh, where did you see that in the docs?

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#4Barry Brown
barry@cs.sierracollege.edu
In reply to: Bruce Momjian (#3)
Re: BUG #1497: Default permissions allow any user to create objects in any database

First paragraph of section 17.4 (Privileges):

"When a database object is created, it is assigned an owner. .... By
default, only an owner (or a superuser) can do anything with the
object. In order to allow other users to use it, privileges must be
granted."

To me, that paragraphs says that only the owner of a database can do
anything with it and all other privileges must be explicitly granted to
others.

-B

On Feb 23, 2005, at 11:10 PM, Bruce Momjian wrote:

Show quoted text

Barry Brown wrote:

The following bug has been logged online:

Bug reference: 1497
Logged by: Barry Brown
Email address: barry@cs.sierracollege.edu
PostgreSQL version: 8.0.1
Operating system: RHEL 3.0
Description: Default permissions allow any user to create
objects in
any database
Details:

The docs say that initially only the owner of a database may use the
objects
created in it. But I have found that ANY user can work with any
object by
default, even in the template1 database.

Uh, where did you see that in the docs?

-- 
Bruce Momjian                        |  http://candle.pha.pa.us
pgman@candle.pha.pa.us               |  (610) 359-1001
+  If your life is a hard drive,     |  13 Roberts Road
+  Christ can be your backup.        |  Newtown Square, Pennsylvania 
19073
#5Bruce Momjian
bruce@momjian.us
In reply to: Barry Brown (#4)
Re: BUG #1497: Default permissions allow any user to create objects

Barry Brown wrote:

The docs say that initially only the owner of a database may use the
objects
created in it. But I have found that ANY user can work with any
object by
default, even in the template1 database.

Uh, where did you see that in the docs?

First paragraph of section 17.4 (Privileges):

"When a database object is created, it is assigned an owner. .... By
default, only an owner (or a superuser) can do anything with the
object. In order to allow other users to use it, privileges must be
granted."

To me, that paragraphs says that only the owner of a database can do
anything with it and all other privileges must be explicitly granted to
others.

Yea, that is confusing. When they say "database object", the don't mean
database, but object created in the database, like a table or view.

I modified the text to not mention "database":

When an object is created, it is assigned an owner. The

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073