From 79f2af08e301d720694cf7599bbe5772473c9dae Mon Sep 17 00:00:00 2001 From: steve-chavez Date: Mon, 20 Apr 2020 18:16:06 -0500 Subject: [PATCH] Add wording for schema structure --- _static/db.png | Bin 10150 -> 9232 bytes auth.rst | 2 +- best_practices.rst | 20 +++++++++++++------- diagrams/README.md | 12 +++++++++++- diagrams/db.png | Bin 0 -> 9232 bytes diagrams/db.tex | 6 +++--- 6 files changed, 28 insertions(+), 12 deletions(-) create mode 100644 diagrams/db.png diff --git a/_static/db.png b/_static/db.png index bd463f2ef2a49d5c0f7a1dfca40cce621d35be3b..a3dd2d85abeecea82f09e27d0dbbccbd67678397 100644 GIT binary patch delta 6745 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 delta 7716 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 diff --git a/auth.rst b/auth.rst index 48de88125..29d49be49 100644 --- a/auth.rst +++ b/auth.rst @@ -298,7 +298,7 @@ PostgREST uses JWT mainly for authentication and authorization purposes and enco Schema Isolation ================ -A PostgREST instance is configured to expose all the tables, views, and stored procedures of a single schema specified in a server configuration file. This means private data or implementation details can go inside a private schema and be invisible to HTTP clients. You can then expose views and stored procedures which insulate the internal details from the outside world. It keeps you code easier to refactor, and provides a natural way to do API versioning. For an example of wrapping a private table with a public view see the :ref:`public_ui` section below. +You can isolate your api schema from internal implementation details, as explained in :ref:`schema_structure`. For an example of wrapping a private table with a public view see the :ref:`public_ui` section below. SQL User Management =================== diff --git a/best_practices.rst b/best_practices.rst index cd80ac539..6a4b0d97c 100644 --- a/best_practices.rst +++ b/best_practices.rst @@ -1,14 +1,20 @@ -Schema structure ----------------- +.. _schema_structure: + +Schema Structure +================ + +A PostgREST instance exposes all the tables, views, and stored procedures of a single `PostgreSQL schema `_ (a namespace of database objects). This means private data or implementation details can go inside different private schemas and be invisible to HTTP clients. + +It is recommended that you don't expose tables on your API schema. Instead expose views and stored procedures which insulate the internal details from the outside world. +This allows you to change the internals of your schema and maintain backwards compatibility. It also keeps your code easier to refactor, and provides a natural way to do API versioning. .. image:: _static/db.png - :align: center .. _func_privs: Function privileges -------------------- +=================== By default, when a function is created, the privilege to execute it is not restricted by role. The function access is PUBLIC—executable by all roles(more details at `PostgreSQL Privileges page `_). This is not ideal for an API schema. To disable this behavior, you can run the following SQL statement: @@ -17,7 +23,7 @@ By default, when a function is created, the privilege to execute it is not restr -- Assuming your schema is named "api" ALTER DEFAULT PRIVILEGES IN SCHEMA api REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; - -- Or to stop functions from being executable in the whole database(note the removal of the IN SCHEMA part). + -- Or to stop functions from being PUBLICly executable in the whole database ALTER DEFAULT PRIVILEGES REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; See `PostgreSQL alter default privileges `_ for more details. @@ -40,7 +46,7 @@ By default, a function is executed with the privileges of the user who calls it. Another option is to define the function with the :code:`SECURITY DEFINER` option. Then only one permission check will take place, the permission to call the function, and the operations in the function will have the authority of the user who owns the function itself. See `PostgreSQL documentation `_ for more details. Views with RLS --------------- +============== Views are invoked with the privileges of the view owner, much like stored procedures with the ``SECURITY DEFINER`` option. When created by a SUPERUSER role, all `row-level security `_ will be bypassed unless a different, non-SUPERUSER owner is specified. @@ -53,7 +59,7 @@ Views are invoked with the privileges of the view owner, much like stored proced ALTER VIEW sample_view OWNER TO api_views_owner; Views with Rules ----------------- +================ Insertion on VIEWs with complex `RULEs `_ might not work out of the box with PostgREST. It's recommended that you `use triggers instead of RULEs `_. diff --git a/diagrams/README.md b/diagrams/README.md index ee4e31da5..36fd9911d 100644 --- a/diagrams/README.md +++ b/diagrams/README.md @@ -15,7 +15,7 @@ The schema structure diagram is done with LaTeX. You can use a GUI like https:// Then use this command to generate the png file. ```bash -pdflatex --shell-escape -halt-on-error -output-directory ../_static db.tex +pdflatex --shell-escape -halt-on-error db.tex ## and move it to the static folder(it's not easy to do it in one go with the pdflatex) mv db.png ../_static/ @@ -28,3 +28,13 @@ You can install the full latex suite with `nix`: ``` nix-env -iA texlive.combined.scheme-full ``` + +To tweak the file with a live reload environment use: + +```bash +# open the pdf(zathura used as an example) +zathura db.pdf & + +# live reload with entr +echo db.tex | entr pdflatex --shell-escape -halt-on-error db.tex +``` diff --git a/diagrams/db.png b/diagrams/db.png new file mode 100644 index 0000000000000000000000000000000000000000..f5eb82b214db6fb276f74f59667ec0662e35a511 GIT binary patch literal 9232 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 E04z%AMF0Q* literal 0 HcmV?d00001 diff --git a/diagrams/db.tex b/diagrams/db.tex index 907b3c814..f4580f891 100644 --- a/diagrams/db.tex +++ b/diagrams/db.tex @@ -19,7 +19,7 @@ \begin{document} -\newcommand\customScale{0.4} +\newcommand\customScale{0.35} \begin{tikzpicture}[x=0.75pt,y=0.75pt,yscale=-1,xscale=1, scale=\customScale, every node/.style={scale=\customScale}] @@ -57,11 +57,11 @@ % Text Node \draw (322,178) node [anchor=north west][inner sep=0.75pt] [color={rgb, 255:red, 255; green, 255; blue, 255 } ,opacity=1 ] [align=left] {\large\textbf{api}}; % Text Node -\draw (202,97) node [anchor=north west][inner sep=0.75pt] [color={rgb, 255:red, 255; green, 255; blue, 255 } ,opacity=1 ] [align=left] {\large\textbf{auth}}; +\draw (190,97) node [anchor=north west][inner sep=0.75pt] [color={rgb, 255:red, 255; green, 255; blue, 255 } ,opacity=1 ] [align=left] {\large\textbf{internal}}; % Text Node \draw (300,99) node [anchor=north west][inner sep=0.75pt] [color={rgb, 255:red, 255; green, 255; blue, 255 } ,opacity=1 ] [align=left] {\large\textbf{private}}; % Text Node -\draw (414,97) node [anchor=north west][inner sep=0.75pt] [color={rgb, 255:red, 255; green, 255; blue, 255 } ,opacity=1 ] [align=left] {\large\textbf{other}}; +\draw (417,101) node [anchor=north west][inner sep=0.75pt] [color={rgb, 255:red, 255; green, 255; blue, 255 } ,opacity=1 ] [align=left] {\large\textbf{core}}; % Text Node \draw (358,306) node [anchor=north west][inner sep=0.75pt] [align=left] {REST};