mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Improve documentation for pg_largeobject changes.
Rewrite the documentation in more idiomatic English, and in the process make it somewhat more succinct. Move the discussion of specific large object privileges out of the "server-side functions" section, where it certainly doesn't belong, and into "implementation features". That might not be exactly right either, but it doesn't seem worth creating a new section for this amount of information. Fix a few spelling and layout problems, too.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/lobj.sgml,v 1.50 2009/12/11 03:34:55 itagaki Exp $ -->
|
||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/lobj.sgml,v 1.51 2009/12/17 14:36:16 rhaas Exp $ -->
|
||||
|
||||
<chapter id="largeObjects">
|
||||
<title id="largeObjects-title">Large Objects</title>
|
||||
@@ -59,6 +59,21 @@
|
||||
searches for the correct chunk number when doing random
|
||||
access reads and writes.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
As of <productname>PostgreSQL</> 8.5, large objects have an owner
|
||||
and a set of access permissions, which can be managed using
|
||||
<xref linkend="sql-grant" endterm="sql-grant-title"> and
|
||||
<xref linkend="sql-revoke" endterm="sql-revoke-title">.
|
||||
For compatibility with prior releases, see
|
||||
<xref linkend="guc-lo-compat-privileges">.
|
||||
<literal>SELECT</literal> privileges are required to read a large
|
||||
object, and
|
||||
<literal>UPDATE</literal> privileges are required to write to or
|
||||
truncate it.
|
||||
Only the large object owner (or the database superuser) can unlink, comment
|
||||
on, or change the owner of a large object.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="lo-interfaces">
|
||||
@@ -438,60 +453,9 @@ SELECT lo_export(image.raster, '/tmp/motd') FROM image
|
||||
owning user. Therefore, their use is restricted to superusers. In
|
||||
contrast, the client-side import and export functions read and write files
|
||||
in the client's file system, using the permissions of the client program.
|
||||
The client-side functions can be used by any
|
||||
<productname>PostgreSQL</productname> user.
|
||||
The client-side functions do not require superuser privilege.
|
||||
</para>
|
||||
|
||||
<sect2 id="lo-func-privilege">
|
||||
<title>Large object and privileges</title>
|
||||
<para>
|
||||
Note that access control feature was not supported in the 8.4.x series
|
||||
and earlier release.
|
||||
Also see the <xref linkend="guc-lo-compat-privileges"> compatibility
|
||||
option.
|
||||
</para>
|
||||
<para>
|
||||
Now it supports access controls on large objects, and allows the owner
|
||||
of large objects to set up access rights using
|
||||
<xref linkend="sql-grant" endterm="sql-grant-title"> and
|
||||
<xref linkend="sql-revoke" endterm="sql-revoke-title"> statement.
|
||||
</para>
|
||||
<para>
|
||||
Two permissions are defined on the large object class.
|
||||
These are checked only when <xref linkend="guc-lo-compat-privileges">
|
||||
option is disabled.
|
||||
</para>
|
||||
<para>
|
||||
The first is <literal>SELECT</literal>.
|
||||
It is required on <function>loread()</function> function.
|
||||
Note that when we open large object with read-only mode, we can see
|
||||
a static image even if other concurrent transaction modified the
|
||||
same large object.
|
||||
This principle is also applied on the access rights of large objects.
|
||||
Even if a transaction modified access rights and commit it, it is
|
||||
not invisible from other transaction which already opened the large
|
||||
object.
|
||||
</para>
|
||||
<para>
|
||||
The second is <literal>UPDATE</literal>.
|
||||
It is required on <function>lowrite()</function> function and
|
||||
<function>lo_truncate()</function> function.
|
||||
</para>
|
||||
<para>
|
||||
In addition, <function>lo_unlink()</function> function,
|
||||
<command>COMMENT ON</command> and <command>ALTER LARGE OBJECT</command>
|
||||
statements needs ownership of the large object to be accessed.
|
||||
</para>
|
||||
<para>
|
||||
You may wonder why <literal>SELECT</literal> is not checked on the
|
||||
<function>lo_export()</function> function or <literal>UPDATE</literal>
|
||||
is not checked on the <function>lo_import</function> function.
|
||||
|
||||
These functions originally require database superuser privilege,
|
||||
and it allows to bypass the default database privilege checks,
|
||||
so we don't need to check an obvious test twice.
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="lo-examplesect">
|
||||
|
Reference in New Issue
Block a user