Skip to content

Commit

Permalink
Mise à jour en 9.5.5
Browse files Browse the repository at this point in the history
  • Loading branch information
gleu committed Oct 30, 2016
1 parent 5d98307 commit 01cf931
Show file tree
Hide file tree
Showing 19 changed files with 2,451 additions and 118 deletions.
173 changes: 149 additions & 24 deletions postgresql/adminpack.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,156 @@
support que <application>pgAdmin</application> ou d'autres outils de gestion
et d'administration peuvent utiliser pour fournir des fonctionnalités
supplémentaires, comme la gestion à distance de journaux applicatifs.
L'utilisation de toutes ces fonctions est restreinte aux superutilisateurs.
</para>

<sect2>
<title>Fonctions codées</title>
<para>
Les fonctions ajoutées par <filename>adminpack</filename> ne peuvent
être exécutées que par un super-utilisateur. La liste des fonctions est la
suivante&nbsp;:

<programlisting>
int8 pg_catalog.pg_file_write(fname text, data text, append bool)
bool pg_catalog.pg_file_rename(oldname text, newname text, archivename text)
bool pg_catalog.pg_file_rename(oldname text, newname text)
bool pg_catalog.pg_file_unlink(fname text)
setof record pg_catalog.pg_logdir_ls()

/* Renommage des fonctions internes existantes pour une compatibilité
avec pgAdmin */
int8 pg_catalog.pg_file_read(fname text, data text, append bool)
bigint pg_catalog.pg_file_length(text)
int4 pg_catalog.pg_logfile_rotate()
</programlisting>

</para>

</sect2>
<para>
Les fonctions indiquées dans <xref linkend="functions-adminpack-table"/>
fournissent un accès en écriture aux fichiers de la machine hébergeant le
serveur. (Voir aussi les fonctions dans <xref linkend="functions-admin-
genfile"/>, qui fournissent un accès en lecture seule.) Seuls les fichiers
stockés dans les répertoire de l'instance sont accessibles, même si un
chemin relatif ou absolu est autorisé.
</para>

<table id="functions-adminpack-table">
<title>Fonctions <filename>adminpack</filename></title>
<tgroup cols="3">
<thead>
<row><entry>Nom</entry> <entry>Type de retour</entry> <entry>Description</entry>
</row>
</thead>

<tbody>
<row>
<entry><function>pg_catalog.pg_file_write(filename text, data text, append boolean)</function></entry>
<entry><type>bigint</type></entry>
<entry>
Écrit ou ajoute dans un fichier texte
</entry>
</row>
<row>
<entry><function>pg_catalog.pg_file_rename(oldname text, newname text <optional>, archivename text</optional>)</function></entry>
<entry><type>boolean</type></entry>
<entry>
Renomme un fichier
</entry>
</row>
<row>
<entry><function>pg_catalog.pg_file_unlink(filename text)</function></entry>
<entry><type>boolean</type></entry>
<entry>
Supprime un fichier
</entry>
</row>
<row>
<entry><function>pg_catalog.pg_logdir_ls()</function></entry>
<entry><type>setof record</type></entry>
<entry>
Liste les journaux applicatifs dans le répertoire ciblé par
<varname>log_directory</varname>
</entry>
</row>
</tbody>
</tgroup>
</table>

<indexterm>
<primary>pg_file_write</primary>
</indexterm>
<para>
<function>pg_file_write</function> écrit les <parameter>data</parameter>
spécifiées dans le fichier nommé par <parameter>filename</parameter>. Si
<parameter>append</parameter> est false, le fichier ne doit pas déjà
exister. Si <parameter>append</parameter> est true, le fichier peut déjà
exister, et les données y seront ajoutées si c'est le cas. Renvoit le nombre
d'octets écrits.
</para>

<indexterm>
<primary>pg_file_rename</primary>
</indexterm>
<para>
<function>pg_file_rename</function> renomme un fichier. Si
<parameter>archivename</parameter> est omis ou NULL, il renomme simplement
<parameter>oldname</parameter> en <parameter>newname</parameter> (ce dernier
ne doit pas déjà exister). Si <parameter>archivename</parameter> est fourni,
il commence par renommer <parameter>newname</parameter> en
<parameter>archivename</parameter> (qui ne doit pas déjà exister), puis il
renomme <parameter>oldname</parameter> en <parameter>newname</parameter>.
Dans le cas d'échec lors de la deuxième étape de renommage, il essaiera de
renommer <parameter>archivename</parameter> en
<parameter>newname</parameter> avant de renvoyer l'erreur. Renvoie true en
cas de success, false si un des fichiers sources n'est pas présent ou
modifiables. Tous les autres cas renvoient des erreurs.
</para>

<indexterm>
<primary>pg_file_unlink</primary>
</indexterm>
<para>
<function>pg_file_unlink</function> supprime le fichier indiqué. Renvoie
true en cas de succès, false si le fichier indiqué n'est pas présent ou si
l'appel à <function>unlink()</function> échoue. Tous les autres cas
renvoient des erreurs.
</para>

<indexterm>
<primary>pg_logdir_ls</primary>
</indexterm>
<para>
<function>pg_logdir_ls</function> renvoie les horodatages de démarrage et
les noms de fichiers pour tous les journaux applicatifs compris dans le
répertoire <xref linkend="guc-log-directory"/>. Le paramètre <xref
linkend="guc-log-filename"/> doit avoir sa configuration par défaut
(<literal>postgresql-%Y-%m-%d_%H%M%S.log</literal>) pour utiliser cette
fonction.
</para>

<para>
Les fonctions indiquées dans <xref linkend="functions-adminpack-deprecated-
table"/> sont obsolètes et ne devraient plus être utilisées dans de
nouvelles applications. Utilisez à la place celles indiquées dans <xref
linkend="functions-admin-signal-table"/> et dans <xref linkend="functions-
admin-genfile"/>. Ces fonctions sont fournies dans
<filename>adminpack</filename> uniquement pour des raisons de compatibilité
pour les anciennes versions de <application>pgAdmin</application>.
</para>

<table id="functions-adminpack-deprecated-table">
<title>Fonctions obsolètes de <filename>adminpack</filename></title>
<tgroup cols="3">
<thead>
<row><entry>Nom</entry> <entry>Type du retour</entry> <entry>Description</entry>
</row>
</thead>

<tbody>
<row>
<entry><function>pg_catalog.pg_file_read(filename text, offset bigint, nbytes bigint)</function></entry>
<entry><type>text</type></entry>
<entry>
Autre nom pour <function>pg_read_file()</function>
</entry>
</row>
<row>
<entry><function>pg_catalog.pg_file_length(filename text)</function></entry>
<entry><type>bigint</type></entry>
<entry>
Identique à la colonne <structfield>size</structfield> renvoyée par la
fonction <function>pg_stat_file()</function>
</entry>
</row>
<row>
<entry><function>pg_catalog.pg_logfile_rotate()</function></entry>
<entry><type>integer</type></entry>
<entry>
Autre nom pour <function>pg_rotate_logfile()</function>, mais notez
qu'elle renvoie un entier 0 ou 1 à la place d'un booléen
</entry>
</row>
</tbody>
</tgroup>
</table>

</sect1>
7 changes: 7 additions & 0 deletions postgresql/catalogs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10250,6 +10250,13 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx
</tgroup>
</table>

<para>
Bien que la plupart des abréviations de fuseau horaire représente des
décalages fixes d'UTC, certaines ont variées historiquement en valeur (voir
<xref linkend="datetime-config-files"/> pour plus d'informations). Dans de
tels cas, cette vue présente leur signification actuelle.
</para>

</sect1>

<sect1 id="view-pg-timezone-names">
Expand Down
47 changes: 33 additions & 14 deletions postgresql/datetime.xml
Original file line number Diff line number Diff line change
Expand Up @@ -402,22 +402,41 @@
</para>

<para>
Un <replaceable>abréviation_fuseau_horaire</replaceable> n'est que
l'abréviation définie. Le <replaceable>décalage</replaceable> est le
décalage en secondes à partir d'UTC, une valeur positive signifiant à
l'est de Greenwich, une valeur négative à l'ouest. Ainsi, -18000
représente cinq heures à l'ouest de Greenwich, soit l'heure standard de
la côte ouest nord américaine. <literal>D</literal> indique que le nom du
fuseau représente une heure soumise à des règles de changement d'heure
plutôt que l'heure standard. Sinon, un
<replaceable>nom_fuseau_horaire</replaceable> peut être indiqué, auquel cas
la définition du fuseau horaire est consultée, et la signification de
l'abréviation dans cette zone est utilisée. Cette alternative n'est recommandé
que pour les abréviations dont la signification a varié dans le temps, car
rechercher la signification est bien plus coûteux que d'utiliser une valeur
entière corrigée.
Un <replaceable>abréviation_zone</replaceable> n'est que l'abréviation en
cours de définition. Un <replaceable>décalage</replaceable> est un entier
correspondant au décalage équivalent en secondes à partir d'UTC, un nombre
positif correspondant à l'est de Greenwich, et un nombre négatif l'ouest.
Par exemple, -18000 serait cinq heures à l'ouest de Greenwich, autrement
dit le fuseau horaire de la côté est de l'Amérique du Nord.
<literal>D</literal> indique que le nom du fuseau horaire représente un
changement d'horaire par rapport à l'heure normale.
</para>

<para>
Autrement, un <replaceable>nom_fuseau_horaire</replaceable> peut être donné
référençant un fuseau horaire défini dans la base de données IANA des
fuseaux horaires. La définition de zone est consultée pour vérifier si
l'abréviation est ou a été utilisé dans cette zone et, si c'est le cas, la
signification appropriée à utiliser &mdash; autrement dit, la signification
en cours au moment de l'horodatage dont la valeur est en cours de
détermination, ou la signification précédant immédiatement, ou la
signification la plus ancienne si elle n'a été utilisée qu'après cet
horodatage. Ce comportement est essentiel pour garer les abréviations dont
la signification a varié dans le temps. Il est aussi permis de définir une
abréviation en terme de nom de fuseau horaire dans lequel cet abréviation
n'apparaît pas. Dans ce cas, utiliser l'abréviation est équivalent à écrire
le nom du fuseau horaire.
</para>

<tip>
<para>
Utiliser un seul entier <replaceable>décalage</replaceable> est préféré
lors de la définition d'une abréviation dont le décalage d'UTC n'a jamais
changé car ce type d'abréviation est bien moins coûteuse à traiter que
celles qui nécessite de consulter une définition des fuseaux horaires.
</para>
</tip>

<para>
La syntaxe <literal>@INCLUDE</literal> autorise l'inclusion d'autres fichiers
du répertoire <filename>.../share/timezonesets/</filename>. Les inclusions
Expand Down
36 changes: 18 additions & 18 deletions postgresql/ddl.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1662,7 +1662,7 @@ CREATE POLICY police_utilisateur ON utilisateurs
<programlisting>
-- Simple exemple basée sur le fichier passwd
CREATE TABLE passwd (
username text UNIQUE NOT NULL,
user_name text UNIQUE NOT NULL,
pwhash text,
uid int PRIMARY KEY,
gid int NOT NULL,
Expand Down Expand Up @@ -1696,17 +1696,17 @@ CREATE POLICY all_view ON passwd FOR SELECT USING (true);
-- Les utilisateurs normaux peuvent mettre à jour leurs propres lignes,
-- tout en limitant les shells qu'ils peuvent choisir
CREATE POLICY user_mod ON passwd FOR UPDATE
USING (current_user = username)
USING (current_user = user_name)
WITH CHECK (
current_user = username AND
current_user = user_name AND
shell IN ('/bin/bash','/bin/sh','/bin/dash','/bin/zsh','/bin/tcsh')
);

-- Donner à admin tous les droits normaux
GRANT SELECT, INSERT, UPDATE, DELETE ON passwd TO admin;
-- Les utilisateurs ne peuvent que sélectionner des colonnes publiques
GRANT SELECT
(username, uid, gid, real_name, home_phone, extra_info, home_dir, shell)
(user_name, uid, gid, real_name, home_phone, extra_info, home_dir, shell)
ON passwd TO public;
-- Autoriser les utilisateurs à mettre à jour certaines colonnes
GRANT UPDATE
Expand All @@ -1726,38 +1726,38 @@ GRANT UPDATE
postgres=&gt; set role admin;
SET
postgres=&gt; table passwd;
username | pwhash | uid | gid | real_name | home_phone | extra_info | home_dir | shell
----------+--------+-----+-----+-----------+--------------+------------+-------------+-----------
admin | xxx | 0 | 0 | Admin | 111-222-3333 | | /root | /bin/dash
bob | xxx | 1 | 1 | Bob | 123-456-7890 | | /home/bob | /bin/zsh
alice | xxx | 2 | 1 | Alice | 098-765-4321 | | /home/alice | /bin/zsh
user_name | pwhash | uid | gid | real_name | home_phone | extra_info | home_dir | shell
-----------+--------+-----+-----+-----------+--------------+------------+-------------+-----------
admin | xxx | 0 | 0 | Admin | 111-222-3333 | | /root | /bin/dash
bob | xxx | 1 | 1 | Bob | 123-456-7890 | | /home/bob | /bin/zsh
alice | xxx | 2 | 1 | Alice | 098-765-4321 | | /home/alice | /bin/zsh
(3 rows)

-- Tester ce que Alice est capable de faire:
postgres=&gt; set role alice;
SET
postgres=&gt; table passwd;
ERROR: permission denied for relation passwd
postgres=&gt; select username,real_name,home_phone,extra_info,home_dir,shell from passwd;
username | real_name | home_phone | extra_info | home_dir | shell
----------+-----------+--------------+------------+-------------+-----------
admin | Admin | 111-222-3333 | | /root | /bin/dash
bob | Bob | 123-456-7890 | | /home/bob | /bin/zsh
alice | Alice | 098-765-4321 | | /home/alice | /bin/zsh
postgres=&gt; select user_name,real_name,home_phone,extra_info,home_dir,shell from passwd;
user_name | real_name | home_phone | extra_info | home_dir | shell
-----------+-----------+--------------+------------+-------------+-----------
admin | Admin | 111-222-3333 | | /root | /bin/dash
bob | Bob | 123-456-7890 | | /home/bob | /bin/zsh
alice | Alice | 098-765-4321 | | /home/alice | /bin/zsh
(3 rows)

postgres=&gt; update passwd set username = 'joe';
postgres=&gt; update passwd set user_name = 'joe';
ERROR: permission denied for relation passwd
-- Alice est autorisée à modifier son propre nom (real_name), mais pas celui des autres
postgres=&gt; update passwd set real_name = 'Alice Doe';
UPDATE 1
postgres=&gt; update passwd set real_name = 'John Doe' where username = 'admin';
postgres=&gt; update passwd set real_name = 'John Doe' where user_name = 'admin';
UPDATE 0
postgres=&gt; update passwd set shell = '/bin/xx';
ERROR: new row violates WITH CHECK OPTION for "passwd"
postgres=&gt; delete from passwd;
ERROR: permission denied for relation passwd
postgres=&gt; insert into passwd (username) values ('xxx');
postgres=&gt; insert into passwd (user_name) values ('xxx');
ERROR: permission denied for relation passwd
-- Alice peut modifier son propre mot de passe; RLS empêche silencieusement la mise à jour d'autres lignes
postgres=&gt; update passwd set pwhash = 'abc';
Expand Down
33 changes: 31 additions & 2 deletions postgresql/func.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8309,12 +8309,12 @@ CREATE TYPE couleurs AS ENUM ('rouge', 'orange', 'jaune', 'vert', 'bleu', 'viole
<row>
<entry><literal>#</literal> </entry>
<entry>Point ou boîte d'intersection</entry>
<entry><literal>'((1,-1),(-1,1))' # '((1,1),(-1,-1))'</literal></entry>
<entry><literal>box '((1,-1),(-1,1))' # box '((1,1),(-2,-2))'</literal></entry>
</row>
<row>
<entry><literal>#</literal> </entry>
<entry>Nombre de points dans le chemin ou le polygone</entry>
<entry><literal># '((1,0),(0,1),(-1,0))'</literal></entry>
<entry><literal># path '((1,0),(0,1),(-1,0))'</literal></entry>
</row>
<row>
<entry><literal>@-@</literal> </entry>
Expand Down Expand Up @@ -15708,6 +15708,21 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n);
<parameter>privilège</parameter> sur
<parameter>tablespace</parameter></entry>
</row>
<row>
<entry><literal><function>has_type_privilege</function>(<parameter>user</parameter>,
<parameter>type</parameter>,
<parameter>privilege</parameter>)</literal>
</entry>
<entry><type>boolean</type></entry>
<entry>l'utilisateur a-t-il le privilège pour le type</entry>
</row>
<row>
<entry><literal><function>has_type_privilege</function>(<parameter>type</parameter>,
<parameter>privilege</parameter>)</literal>
</entry>
<entry><type>boolean</type></entry>
<entry>l'utilisateur actuel a-t-il le privilège pour le type</entry>
</row>
<row>
<entry><literal><function>pg_has_role</function>(<parameter>utilisateur</parameter>,
<parameter>rôle</parameter>,
Expand Down Expand Up @@ -15770,6 +15785,9 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n);
<indexterm>
<primary>has_tablespace_privilege</primary>
</indexterm>
<indexterm>
<primary>has_type_privilege</primary>
</indexterm>
<indexterm>
<primary>pg_has_role</primary>
</indexterm>
Expand Down Expand Up @@ -15903,6 +15921,17 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');
Le seul privilège possible est <literal>CREATE</literal>.
</para>

<para>
<function>has_type_privilege</function> vérifie si un utilisateur peut
accéder à un type de données d'une façon particulière. Ses possibilités en
terme d'argument sont analogues à
<function>has_table_privilege</function>. Lors de la spécification d'un
type par une chaîne de caractères plutôt que par un OID, l'entrée
autorisée est la même que pour le type de données <type>regtype</type>
(voir <xref linkend="datatype-oid"/>). Le type de droit d'accès autorisé
doit s'évaluer à <literal>USAGE</literal>.
</para>

<para>
<function>pg_has_role</function> vérifie si l'utilisateur possède
un privilège particulier d'accès à un rôle. Ses arguments sont
Expand Down

0 comments on commit 01cf931

Please sign in to comment.