Re: Couple simple(?) questions... - Mailing list pgsql-novice

From Ron Chmara
Subject Re: Couple simple(?) questions...
Date
Msg-id 3A207F27.1A4D310E@opus1.com
Whole thread Raw
In response to Couple simple(?) questions...  (Dmitri Touretsky <dmitri@listsoft.ru>)
Responses Re: Couple simple(?) questions...
Re[2]: Couple simple(?) questions...
List pgsql-novice
Dmitri Touretsky wrote:
> 1. Is it possible to SELECT from two databases? Something like
>    SELECT db1.table1.field, db2.table1.fields ...

No. So I use the following table naming convention:
dbname1_tablename1
dbname1_tablename2
...
dbname1_tablename5
dbname2_tablename1
dbname2_tablename2
...
dbname2_tablename5

This provides me with easier logical groupings.

> 2. There is a table of the following structure:
>    CREATE TABLE test (
>      id       int4,
>      string1  text,
>      string2  text,
>      ord    int2);
>    I need to get a list of different "string1" strings ordered by
>    "ord". But SELECT DISTINCT id, string1 ... ORDER BY ord" doesn't
>    work. Is there any way to get it?

Well, perhaps you could try making a compound field out of id and
string1, or use a sub-select. It really depends on what you're trying
to do... (get entries with unique id numbers _and_ unigue string1? Unique
id numbers _or_ unique string1? Return unique string1 fields, which
you generate from unique id fields?)

> 3. I have two tables, say table1 and table2. Need to let web users
> insert data into one of the tables. So far it's easy. Hard point:
> web-user should be able insert rows into table1 and at the same time
> update related rows in table2. And I need to maximally secure table2.

Well, either web user can, or cannot. You rules seem to indicate that
even if the web user was submitting bad data, table2 would *still* be
updated. If the web user was overloading table1 in a hacking attempt,
anotther script would still be updating with bad data. If you need
to secure table2, you should not allow the system to automatically
pass any data through, at all.

> I've tried to create a view based on table1 and a set of rules, but
> rules are applied with web username. So if I grant web users right to
> update table2 than I can't protect this table; and if I don't grant
> them those rights than I don't see a way to update rows in table2.
> Question: is there a way to run rule on behalf of different user?
> Something like setusername(user)?

Well, you could have a different (non web) script perform sanity checks,
and then update the tables (say, a perl script), but if their
data is being used to update it, then it doesn't really matter
what user id is involved. You can also grant update-only priviges
on a table. You can also keep two versions of the data, "web"
(dirty) and "admin" (clean). You can also just put this data in it's
own table (table 3), which you use with table 1 and table 2.

> PS. Will appreciate any points to docs on security of web access to
> PostgreSQL.

Well, it's not pretty. Unless you web user is changing its username
for the connection, you're always connecting as one user, usually "www"
or "nobody" or "httpd". You might want to specify how you're connecting
to it over the web, as PHP has different issues from a Perl CGI, etc.
(The connection type, and how it's handled, can have a big impact.)
Are you using DBD/DBI? PHP? Something else?

-Ronabop
--
Brought to you from iBop the iMac, a MacOS, Win95, Win98, LinuxPPC machine,
which is currently in MacOS land.  Your bopping may vary.

pgsql-novice by date:

Previous
From: Don Baccus
Date:
Subject: Re: [HACKERS] Re: Re: re : PHP and persistent connections
Next
From: GH
Date:
Subject: Re: Couple simple(?) questions...