mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-03-24 08:52:09 +01:00
240 lines
12 KiB
XML
240 lines
12 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- EN-Revision: 855bfee2f3db70d7dbb4c60c7c4a4efa567f1c60 Maintainer: Fan2Shrek Status: ready -->
|
|
<!-- Reviewed: yes -->
|
|
<refentry xml:id="sqlite3.setauthorizer" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<refnamediv>
|
|
<refname>SQLite3::setAuthorizer</refname>
|
|
<refpurpose>Configure une fonction de rappel à utiliser comme autorisateur pour limiter ce qu'une instruction peut faire</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsect1 role="description">
|
|
&reftitle.description;
|
|
<methodsynopsis role="SQLite3">
|
|
<modifier>public</modifier> <type>bool</type><methodname>SQLite3::setAuthorizer</methodname>
|
|
<methodparam><type class="union"><type>callable</type><type>null</type></type><parameter>callback</parameter></methodparam>
|
|
</methodsynopsis>
|
|
<para>
|
|
Définit une fonction de rappel qui sera appelée par SQLite chaque fois qu'une action est effectuée
|
|
(lecture, suppression, mise à jour, etc.). Cela est utilisé lors de la préparation d'une instruction SQL à partir
|
|
d'une source non fiable pour s'assurer que les instructions SQL ne tentent pas d'accéder à des données
|
|
auxquelles elles ne sont pas autorisées à accéder, ou qu'elles ne tentent pas d'exécuter des instructions
|
|
malveillantes qui endommagent la base de données. Par exemple, une application peut autoriser un utilisateur
|
|
à saisir des requêtes SQL arbitraires pour évaluation par une base de données. Mais l'application ne veut pas
|
|
que l'utilisateur puisse apporter des modifications arbitraires à la base de données. Un autorisateur pourrait
|
|
alors être mis en place pendant que le SQL saisi par l'utilisateur est préparé pour interdire tout sauf les
|
|
déclarations SELECT.
|
|
</para>
|
|
<para>
|
|
La fonction de rappel de l'autorisateur peut être appelée plusieurs fois pour chaque instruction préparée par
|
|
SQLite. Une requête <literal>SELECT</literal> ou <literal>UPDATE</literal> appellera l'autorisateur pour chaque
|
|
colonne qui serait lue ou mise à jour.
|
|
</para>
|
|
<para>
|
|
La fonction de rappel de l'autorisateur est appelée avec jusqu'à cinq paramètres. Le premier paramètre est toujours
|
|
donnée, et est un <type>int</type> (code d'action) correspondant à une constante de
|
|
<literal>SQLite3</literal>. Les autres paramètres ne sont passés que pour certaines actions. Le
|
|
tableau suivant décrit les deuxième et troisième paramètres en fonction de l'action :
|
|
<table>
|
|
<title>Liste des codes d'action et des paramètres</title>
|
|
<tgroup cols="3">
|
|
<thead>
|
|
<row>
|
|
<entry>Action</entry>
|
|
<entry>Second paramètre</entry>
|
|
<entry>Troisième paramètre</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row><entry><constant>SQLite3::CREATE_INDEX</constant></entry><entry>Nom de l'index</entry><entry>Nom de la table</entry></row>
|
|
<row><entry><constant>SQLite3::CREATE_TABLE</constant></entry><entry>Nom de la table</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::CREATE_TEMP_INDEX</constant></entry><entry>Nom de l'index</entry><entry>Nom de la table</entry></row>
|
|
<row><entry><constant>SQLite3::CREATE_TEMP_TABLE</constant></entry><entry>Nom de la table</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::CREATE_TEMP_TRIGGER</constant></entry><entry>Nom du déclencheur</entry><entry>Nom de la table</entry></row>
|
|
<row><entry><constant>SQLite3::CREATE_TEMP_VIEW</constant></entry><entry>Nom de la vue</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::CREATE_TRIGGER</constant></entry><entry>Nom du déclencheur</entry><entry>Nom de la table</entry></row>
|
|
<row><entry><constant>SQLite3::CREATE_VIEW</constant></entry><entry>Nom de la vue</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::DELETE</constant></entry><entry>Nom de la table</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::DROP_INDEX</constant></entry><entry>Nom de l'index</entry><entry>Nom de la table</entry></row>
|
|
<row><entry><constant>SQLite3::DROP_TABLE</constant></entry><entry>Nom de la table</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::DROP_TEMP_INDEX</constant></entry><entry>Nom de l'index</entry><entry>Nom de la table</entry></row>
|
|
<row><entry><constant>SQLite3::DROP_TEMP_TABLE</constant></entry><entry>Nom de la table</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::DROP_TEMP_TRIGGER</constant></entry><entry>Nom du déclencheur</entry><entry>Nom de la table</entry></row>
|
|
<row><entry><constant>SQLite3::DROP_TEMP_VIEW</constant></entry><entry>Nom de la vue</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::DROP_TRIGGER</constant></entry><entry>Nom du déclencheur</entry><entry>Nom de la table</entry></row>
|
|
<row><entry><constant>SQLite3::DROP_VIEW</constant></entry><entry>Nom de la vue</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::INSERT</constant></entry><entry>Nom de la table</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::PRAGMA</constant></entry><entry>Nom Pragma</entry><entry>Le premier argument passé au pragma, ou &null;</entry></row>
|
|
<row><entry><constant>SQLite3::READ</constant></entry><entry>Nom de la table</entry><entry>Nom de la colonne</entry></row>
|
|
<row><entry><constant>SQLite3::SELECT</constant></entry><entry>&null;</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::TRANSACTION</constant></entry><entry>Opération</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::UPDATE</constant></entry><entry>Nom de la table</entry><entry>Nom de la colonne</entry></row>
|
|
<row><entry><constant>SQLite3::ATTACH</constant></entry><entry>Filename</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::DETACH</constant></entry><entry>Nom de la base de données</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::ALTER_TABLE</constant></entry><entry>Nom Database</entry><entry>Nom de la table</entry></row>
|
|
<row><entry><constant>SQLite3::REINDEX</constant></entry><entry>Nom de l'index</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::ANALYZE</constant></entry><entry>Nom de la table</entry><entry>&null;</entry></row>
|
|
<row><entry><constant>SQLite3::CREATE_VTABLE</constant></entry><entry>Nom de la table</entry><entry>Nom du module</entry></row>
|
|
<row><entry><constant>SQLite3::DROP_VTABLE</constant></entry><entry>Nom de la table</entry><entry>Nom du module</entry></row>
|
|
<row><entry><constant>SQLite3::FUNCTION</constant></entry><entry>&null;</entry><entry>Nom de la fonction</entry></row>
|
|
<row><entry><constant>SQLite3::SAVEPOINT</constant></entry><entry>Opération</entry><entry>Nom du point de sauvegarde</entry></row>
|
|
<row><entry><constant>SQLite3::RECURSIVE</constant></entry><entry>&null;</entry><entry>&null;</entry></row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</para>
|
|
<para>
|
|
Le quatrième paramètre sera le nom de la base de données (<literal>"main"</literal>,
|
|
<literal>"temp"</literal>, etc.) si applicable.
|
|
</para>
|
|
<para>
|
|
Le cinquième paramètre de la fonction de rappel de l'autorisateur est le nom du déclencheur ou de la vue le plus
|
|
interne qui est responsable de la tentative d'accès ou &null; si cette tentative d'accès est directement issue du
|
|
code SQL de niveau supérieur.
|
|
</para>
|
|
<para>
|
|
Lorsque que la fonction de rappel retourne <constant>SQLite3::OK</constant>, cela signifie que l'opération
|
|
demandée est acceptée. Lorsque la fonction de rappel retourne <constant>SQLite3::DENY</constant>, l'appel qui a
|
|
déclenché l'autorisateur échouera avec un message d'erreur expliquant que
|
|
l'accès est refusé.
|
|
</para>
|
|
<para>
|
|
Si le code d'action est <constant>SQLite3::READ</constant> et que la fonction de rappel retourne
|
|
<constant>SQLite3::IGNORE</constant>, alors l'instruction préparée est construite pour substituer une valeur
|
|
&null; à la place de la colonne de la table qui aurait été lue si <constant>SQLite3::OK</constant> avait été retourné.
|
|
Le retour de <constant>SQLite3::IGNORE</constant> peut être utilisé pour refuser à un utilisateur non fiable l'accès
|
|
à des colonnes individuelles d'une table.
|
|
</para>
|
|
<para>
|
|
Lorsqu'une table est référencée par un <literal>SELECT</literal> mais aucune valeur de colonne n'est extraite de
|
|
cette table (par exemple dans une requête comme <literal>"SELECT count(*) FROM table"</literal>), alors la fonction
|
|
de rappel de l'autorisateur est invoquée une fois pour cette table avec un nom de colonne qui est une chaîne vide.
|
|
</para>
|
|
<para>
|
|
Si le code d'action est <constant>SQLite3::DELETE</constant> et que la fonction de rappel retourne
|
|
<constant>SQLite3::IGNORE</constant>, alors l'opération DELETE se poursuit mais l'optimisation de troncature est
|
|
désactivée et toutes les lignes sont supprimées individuellement.
|
|
</para>
|
|
<para>
|
|
Seul un seule autorisateur peut être en place sur une connexion de base de données à la fois. Chaque appel à
|
|
<methodname>SQLite3::setAuthorizer</methodname> remplace l'appel précédent. Désactivez l'autorisateur en installant
|
|
un rappel &null;. L'autorisateur est désactivé par défaut.
|
|
</para>
|
|
<para>
|
|
La fonction de rappel de l'autorisateur ne doit pas faire quoi que ce soit qui modifiera la connexion de base de
|
|
données qui a invoqué la fonction de rappel de l'autorisateur.
|
|
</para>
|
|
<para>
|
|
Il est à noter que l'autorisateur n'est appelé que lorsqu une instruction est préparée, pas lorsqu'elle est
|
|
exécutée.
|
|
</para>
|
|
<para>
|
|
Plus de détails peuvent être trouvés dans la
|
|
<link xlink:href="&url.sqlite;c3ref/set_authorizer.html">documentation de SQLite3</link>.
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="parameters">
|
|
&reftitle.parameters;
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><parameter>callback</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
Le <type>callable</type> à appeler.
|
|
</para>
|
|
<para>
|
|
Si &null; est passé, cela désactivera le rappel de l'autorisateur actuel.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</refsect1>
|
|
|
|
<refsect1 role="returnvalues">
|
|
&reftitle.returnvalues;
|
|
<para>
|
|
&return.success;
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="errors">
|
|
&reftitle.errors;
|
|
<para>
|
|
Cette méthode ne lance aucune erreur, mais si un autorisateur est activé et retourne une
|
|
valeur invalide, la préparation de l'instruction lancera une erreur (ou une exception, selon
|
|
l'utilisation de la méthode <methodname>SQLite3::enableExceptions</methodname>).
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="examples">
|
|
&reftitle.examples;
|
|
<example>
|
|
<title>Exemple de <methodname>SQLite3::setAuthorizer</methodname></title>
|
|
<para>
|
|
Ceci n'autorise que l'accès en lecture, et seuls certains colonnes de la table
|
|
<literal>users</literal> seront retournées. Les autres colonnes seront remplacées par
|
|
&null;.
|
|
</para>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$db = new SQLite3('data.sqlite');
|
|
$db->exec('CREATE TABLE users (id, name, password);');
|
|
$db->exec('INSERT INTO users VALUES (1, \'Pauline\', \'Snails4eva\');');
|
|
|
|
$allowed_columns = ['id', 'name'];
|
|
|
|
$db->setAuthorizer(function (int $action, ...$args) use ($allowed_columns) {
|
|
if ($action === SQLite3::READ) {
|
|
list($table, $column) = $args;
|
|
|
|
if ($table === 'users' && in_array($column, $allowed_columns) {
|
|
return SQLite3::OK;
|
|
}
|
|
|
|
return SQLite3::IGNORE;
|
|
}
|
|
|
|
return SQLite3::DENY;
|
|
});
|
|
|
|
print_r($db->querySingle('SELECT * FROM users WHERE id = 1;'));
|
|
]]>
|
|
</programlisting>
|
|
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
Array
|
|
(
|
|
[id] => 1
|
|
[name] => Pauline
|
|
[password] =>
|
|
)
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</refsect1>
|
|
|
|
</refentry>
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|