diff options
author | Robert Haas | 2010-09-28 00:55:27 +0000 |
---|---|---|
committer | Robert Haas | 2010-09-28 00:55:27 +0000 |
commit | 4d355a8336e0f2265b31d678ffd1ee5cf9e79fae (patch) | |
tree | 9ab7e59c81ca1a8417ea2bfe8b3c11e232f3a9ee /doc/src | |
parent | 2ce003973db82205cec55d596d51e957293019d1 (diff) |
Add a SECURITY LABEL command.
This is intended as infrastructure to support integration with label-based
mandatory access control systems such as SE-Linux. Further changes (mostly
hooks) will be needed, but this is a big chunk of it.
KaiGai Kohei and Robert Haas
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/catalogs.sgml | 172 | ||||
-rw-r--r-- | doc/src/sgml/ref/allfiles.sgml | 1 | ||||
-rw-r--r-- | doc/src/sgml/ref/pg_dump.sgml | 10 | ||||
-rw-r--r-- | doc/src/sgml/ref/pg_dumpall.sgml | 9 | ||||
-rw-r--r-- | doc/src/sgml/ref/pg_restore.sgml | 10 | ||||
-rw-r--r-- | doc/src/sgml/ref/security_label.sgml | 194 | ||||
-rw-r--r-- | doc/src/sgml/reference.sgml | 1 |
7 files changed, 397 insertions, 0 deletions
diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index ab11b150653..8e4081cb33c 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -209,6 +209,11 @@ </row> <row> + <entry><link linkend="catalog-pg-seclabel"><structname>pg_seclabel</structname></link></entry> + <entry>security labels on database objects</entry> + </row> + + <row> <entry><link linkend="catalog-pg-shdepend"><structname>pg_shdepend</structname></link></entry> <entry>dependencies on shared objects</entry> </row> @@ -4229,6 +4234,77 @@ </sect1> + <sect1 id="catalog-pg-seclabel"> + <title><structname>pg_seclabel</structname></title> + + <indexterm zone="catalog-pg-seclabel"> + <primary>pg_seclabel</primary> + </indexterm> + + <para> + The catalog <structname>pg_seclabel</structname> stores security + labels on database objects. See the + <xref linkend="sql-security-label"> statement. + </para> + + <table> + <title><structname>pg_seclabel</structname> Columns</title> + + <tgroup cols="4"> + <thead> + <row> + <entry>Name</entry> + <entry>Type</entry> + <entry>References</entry> + <entry>Description</entry> + </row> + </thead> + + <tbody> + <row> + <entry><structfield>objoid</structfield></entry> + <entry><type>oid</type></entry> + <entry>any OID column</entry> + <entry>The OID of the object this security label pertains to</entry> + </row> + + <row> + <entry><structfield>classoid</structfield></entry> + <entry><type>oid</type></entry> + <entry><literal><link linkend="catalog-pg-class"><structname>pg_class</structname></link>.oid</literal></entry> + <entry>The OID of the system catalog this object appears in</entry> + </row> + + <row> + <entry><structfield>objsubid</structfield></entry> + <entry><type>int4</type></entry> + <entry></entry> + <entry> + For a security label on a table column, this is the column number (the + <structfield>objoid</> and <structfield>classoid</> refer to + the table itself). For all other object types, this column is + zero. + </entry> + </row> + + <row> + <entry><structfield>provider</structfield></entry> + <entry><type>text</type></entry> + <entry></entry> + <entry>The label provider associated with this label.</entry> + </row> + + <row> + <entry><structfield>label</structfield></entry> + <entry><type>text</type></entry> + <entry></entry> + <entry>The security label applied to this object.</entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + <sect1 id="catalog-pg-shdepend"> <title><structname>pg_shdepend</structname></title> @@ -5884,6 +5960,11 @@ </row> <row> + <entry><link linkend="view-pg-seclabels"><structname>pg_seclabels</structname></link></entry> + <entry>security labels</entry> + </row> + + <row> <entry><link linkend="view-pg-settings"><structname>pg_settings</structname></link></entry> <entry>parameter settings</entry> </row> @@ -6791,6 +6872,97 @@ </sect1> + <sect1 id="view-pg-seclabels"> + <title><structname>pg_seclabels</structname></title> + + <indexterm zone="view-pg-seclabels"> + <primary>pg_seclabels</primary> + </indexterm> + + <para> + The view <structname>pg_seclabels</structname> provides information about + security labels. It as an easier-to-query version of the + <link linkend="catalog-pg-seclabel"><structname>pg_seclabel</></> catalog. + </para> + + <table> + <title><structname>pg_seclabels</> Columns</title> + + <tgroup cols="4"> + <thead> + <row> + <entry>Name</entry> + <entry>Type</entry> + <entry>References</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row> + <entry><structfield>objoid</structfield></entry> + <entry><type>oid</type></entry> + <entry>any OID column</entry> + <entry>The OID of the object this security label pertains to</entry> + </row> + <row> + <entry><structfield>classoid</structfield></entry> + <entry><type>oid</type></entry> + <entry><literal><link linkend="catalog-pg-class"><structname>pg_class</structname></link>.oid</literal></entry> + <entry>The OID of the system catalog this object appears in</entry> + </row> + <row> + <entry><structfield>objsubid</structfield></entry> + <entry><type>int4</type></entry> + <entry></entry> + <entry> + For a security label on a table column, this is the column number (the + <structfield>objoid</> and <structfield>classoid</> refer to + the table itself). For all other object types, this column is + zero. + </entry> + </row> + <row> + <entry><structfield>objtype</structfield></entry> + <entry><type>text</type></entry> + <entry></entry> + <entry> + The type of object to which this label applies, as text. + </entry> + </row> + <row> + <entry><structfield>objnamespace</structfield></entry> + <entry><type>oid</type></entry> + <entry><literal><link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.oid</literal></entry> + <entry> + The OID of the namespace for this object, if applicable; + otherwise NULL. + </entry> + </row> + <row> + <entry><structfield>objname</structfield></entry> + <entry><type>text</type></entry> + <entry></entry> + <entry> + The name of the object to which this label applies, as text. + </entry> + </row> + <row> + <entry><structfield>provider</structfield></entry> + <entry><type>text</type></entry> + <entry><literal><link linkend="catalog-pg-seclabel"><structname>pg_seclabel</structname></link>.provider</literal></entry> + <entry>The label provider associated with this label.</entry> + </row> + <row> + <entry><structfield>label</structfield></entry> + <entry><type>text</type></entry> + <entry><literal><link linkend="catalog-pg-seclabel"><structname>pg_seclabel</structname></link>.label</literal></entry> + <entry>The security label applied to this object.</entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + <sect1 id="view-pg-settings"> <title><structname>pg_settings</structname></title> diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml index 7b97883d1bd..f5d67a20787 100644 --- a/doc/src/sgml/ref/allfiles.sgml +++ b/doc/src/sgml/ref/allfiles.sgml @@ -132,6 +132,7 @@ Complete list of usable sgml source files in this directory. <!entity rollbackPrepared system "rollback_prepared.sgml"> <!entity rollbackTo system "rollback_to.sgml"> <!entity savepoint system "savepoint.sgml"> +<!entity securityLabel system "security_label.sgml"> <!entity select system "select.sgml"> <!entity selectInto system "select_into.sgml"> <!entity set system "set.sgml"> diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml index 1b8402e78c1..8242b536d73 100644 --- a/doc/src/sgml/ref/pg_dump.sgml +++ b/doc/src/sgml/ref/pg_dump.sgml @@ -778,6 +778,16 @@ PostgreSQL documentation </para> </listitem> </varlistentry> + + <varlistentry> + <term><option>--security-label</option></term> + <listitem> + <para> + With this option, it also outputs security labels of database + objects to be dumped, if labeled. + </para> + </listitem> + </varlistentry> </variablelist> </para> </refsect1> diff --git a/doc/src/sgml/ref/pg_dumpall.sgml b/doc/src/sgml/ref/pg_dumpall.sgml index 14fa1091128..68dcc35c50e 100644 --- a/doc/src/sgml/ref/pg_dumpall.sgml +++ b/doc/src/sgml/ref/pg_dumpall.sgml @@ -493,6 +493,15 @@ PostgreSQL documentation </para> </listitem> </varlistentry> + <varlistentry> + <term><option>--security-label</option></term> + <listitem> + <para> + With this option, it also outputs security labels of database + objects to be dumped, if labeled. + </para> + </listitem> + </varlistentry> </variablelist> </para> </refsect1> diff --git a/doc/src/sgml/ref/pg_restore.sgml b/doc/src/sgml/ref/pg_restore.sgml index 9dc2511f5f3..78606969a98 100644 --- a/doc/src/sgml/ref/pg_restore.sgml +++ b/doc/src/sgml/ref/pg_restore.sgml @@ -329,6 +329,16 @@ </varlistentry> <varlistentry> + <term><option>--no-security-label</option></term> + <listitem> + <para> + Do not output commands to restore security labels, + even if the archive contains them. + </para> + </listitem> + </varlistentry> + + <varlistentry> <term><option>-P <replaceable class="parameter">function-name(argtype [, ...])</replaceable></option></term> <term><option>--function=<replaceable class="parameter">function-name(argtype [, ...])</replaceable></option></term> <listitem> diff --git a/doc/src/sgml/ref/security_label.sgml b/doc/src/sgml/ref/security_label.sgml new file mode 100644 index 00000000000..7fce58bc13a --- /dev/null +++ b/doc/src/sgml/ref/security_label.sgml @@ -0,0 +1,194 @@ +<!-- +$PostgreSQL$ +PostgreSQL documentation +--> + +<refentry id="SQL-SECURITY-LABEL"> + <refmeta> + <refentrytitle>SECURITY LABEL</refentrytitle> + <manvolnum>7</manvolnum> + <refmiscinfo>SQL - Language Statements</refmiscinfo> + </refmeta> + + <refnamediv> + <refname>SECURITY LABEL</refname> + <refpurpose>define or change a security label applied to an object</refpurpose> + </refnamediv> + + <indexterm zone="sql-security-label"> + <primary>SECURITY LABEL</primary> + </indexterm> + + <refsynopsisdiv> +<synopsis> +SECURITY LABEL [ FOR <replaceable class="PARAMETER">provider</replaceable> ] ON +{ + TABLE <replaceable class="PARAMETER">object_name</replaceable> | + COLUMN <replaceable class="PARAMETER">table_name</replaceable>.<replaceable class="PARAMETER">column_name</replaceable> | + AGGREGATE <replaceable class="PARAMETER">agg_name</replaceable> (<replaceable class="PARAMETER">agg_type</replaceable> [, ...] ) | + DOMAIN <replaceable class="PARAMETER">object_name</replaceable> | + FUNCTION <replaceable class="PARAMETER">function_name</replaceable> ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) | + LARGE OBJECT <replaceable class="PARAMETER">large_object_oid</replaceable> | + [ PROCEDURAL ] LANGUAGE <replaceable class="PARAMETER">object_name</replaceable> | + SCHEMA <replaceable class="PARAMETER">object_name</replaceable> | + SEQUENCE <replaceable class="PARAMETER">object_name</replaceable> | + TYPE <replaceable class="PARAMETER">object_name</replaceable> | + VIEW <replaceable class="PARAMETER">object_name</replaceable> +} IS '<replaceable class="PARAMETER">label</replaceable>' +</synopsis> + </refsynopsisdiv> + + <refsect1> + <title>Description</title> + + <para> + <command>SECURITY LABEL</command> applies a security label to a database + object. An arbitrary number of security labels, one per label provider, can + be associated with a given database object. Label providers are loadable + modules which register themselves by using the function + <function>register_label_provider</>. + </para> + + <note> + <para> + <function>register_label_provider</> is not an SQL function; it can + only be called from C code loaded into the backend. + </para> + </note> + + <para> + The label provider determines whether a given a label is valid and whether + it is permissible to assign that label to a given object. The meaning of a + given label is likewise at the discretion of the label provider. + <productname>PostgreSQL</> places no restrictions on whether or how a + label provider must interpret security labels; it merely provides a + mechanism for storing them. In practice, this facility is intended to allow + integration with label-based mandatory access control (MAC) systems such as + <productname>SE-Linux</>. Such systems make all access control decisions + based on object labels, rather than traditional discretionary access control + (DAC) concepts such as users and groups. + </para> + </refsect1> + + <refsect1> + <title>Parameters</title> + + <variablelist> + <varlistentry> + <term><replaceable class="parameter">object_name</replaceable></term> + <term><replaceable class="parameter">table_name.column_name</replaceable></term> + <term><replaceable class="parameter">agg_name</replaceable></term> + <term><replaceable class="parameter">function_name</replaceable></term> + <listitem> + <para> + The name of the object to be commented. Names of tables, + aggregates, domains, functions, sequences, types, and views can + be schema-qualified. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable class="parameter">provider</replaceable></term> + <listitem> + <para> + The name of the provider with which this label is to be associated. The + named provider must be loaded and must consent to the proposed labeling + operation. If exactly one provider is loaded, the provider name may be + omitted for brevity. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable class="parameter">argmode</replaceable></term> + + <listitem> + <para> + The mode of a function argument: <literal>IN</>, <literal>OUT</>, + <literal>INOUT</>, or <literal>VARIADIC</>. + If omitted, the default is <literal>IN</>. + Note that <command>COMMENT ON FUNCTION</command> does not actually pay + any attention to <literal>OUT</> arguments, since only the input + arguments are needed to determine the function's identity. + So it is sufficient to list the <literal>IN</>, <literal>INOUT</>, + and <literal>VARIADIC</> arguments. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable class="parameter">argname</replaceable></term> + + <listitem> + <para> + The name of a function argument. + Note that <command>COMMENT ON FUNCTION</command> does not actually pay + any attention to argument names, since only the argument data + types are needed to determine the function's identity. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable class="parameter">argtype</replaceable></term> + + <listitem> + <para> + The data type(s) of the function's arguments (optionally + schema-qualified), if any. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable class="parameter">large_object_oid</replaceable></term> + <listitem> + <para> + The OID of the large object. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>PROCEDURAL</literal></term> + + <listitem> + <para> + This is a noise word. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable class="parameter">label</replaceable></term> + <listitem> + <para> + The new security label, written as a string literal; or <literal>NULL</> + to drop the security label. + </para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>Examples</title> + + <para> + The following example shows how the security label of a table might + be changed. + +<programlisting> +SECURITY LABEL FOR selinux ON TABLE mytable IS 'system_u:object_r:sepgsql_table_t:s0'; +</programlisting> + </para> + </refsect1> + + <refsect1> + <title>Compatibility</title> + <para> + There is no <command>SECURITY LABEL</command> command in the SQL standard. + </para> + </refsect1> +</refentry> diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml index 052fe0e8fb2..463746cda3a 100644 --- a/doc/src/sgml/reference.sgml +++ b/doc/src/sgml/reference.sgml @@ -160,6 +160,7 @@ &rollbackPrepared; &rollbackTo; &savepoint; + &securityLabel; &select; &selectInto; &set; |