Markus Wanner <mar...@bluegap.ch> writes:
> But okay, you're saying we *have* and *want* a guarantee that even a
> superuser cannot execute arbitrary native code via libpq (at least in
> default installs w/o extensions).

There are several problems confused into that sentence already. I think
the next step of this discussion should be about talking about the
problems we have and figuring out *if* we want to solve them, now that
we managed to explicitely say what we want as a project.

  - per-installation (not even per-cluster) DSO availability

    If you install PostGIS 1.5 on a system, then it's just impossible to
    bring another cluster (of the same PostgreSQL major version), let
    alone database, with PostGIS 2.x, even for migration assessment
    purposes. The "By Design™" part is really hard to explain even to
    security concious users.

  - hot standby and modules (aka DSO)

    As soon as you use some functions in 'language C' you need to
    carefully watch your external dependencies ahead of time. If you do
    CREATE EXTENSION hstore;, create an hstore column and a GiST index
    on it, then query the table on the standby… no luck. You would tell
    me that it's easy enough to do and that it's part of the job, so see
    next point.

  - sysadmin vs dba, or PostgreSQL meets the Cloud

    The current model of operations is intended for places where you
    have separate roles: the sysadmin cares about the OS setup and will
    provide with system packages (compiled extensions and the like), and
    DBA are never root on the OS. They can CREATE EXTENSION and maybe
    use the 'postgres' system account, but that's about it.

    Given the current raise of the Cloud environements and the devops
    teams, my understanding is that this model is no longer the only
    one. Depending on who you talk to, in some circles it's not even a
    relevant model anymore: user actions should not require the
    intervention of a "sysadmin" before hand.

    While I appreciate that many companies still want the old behavior
    that used to be the only relevant model of operations, I think we
    should also provide for the new one as it's pervasive enough now for
    us to stop ignoring it with our "I know better" smiling face.

Now it should be possible to solve at least some of those items while
still keeping the restriction above, or with an opt-in mechanism to
enable the "works by default, but you have to solve the security
implications yourself" behaviour. A new GUC should do it, boolean,
defaults false:

  runs_in_the_cloud_with_no_security_concerns = false

I don't think the relaxed behaviour we're talking about is currently
possible to develop as an extension, by the way.

> Andres made two contrib-free suggestions: with COPY TO BINARY, you get a

Well, what about using lo_import()?

>> Things aren't quite so bad if we write the bits to a file first and
>> then dynamically load the file.  That way at least noexec or similar
>> can provide protection.  But it still seems like a pretty dangerous
>> direction.
>
> I agree now. Thanks for elaborating.

Yes it's dangerous. It's also solving real world problems that I see no
other way to solve apart from bypassing the need to ever load a DSO
file, that is embedding a retargetable C compiler in the backend.

Regards,
-- 
Dimitri Fontaine
http://2ndQuadrant.fr     PostgreSQL : Expertise, Formation et Support


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to