-
-
Notifications
You must be signed in to change notification settings - Fork 8
2019_04 Actualización a PostgreSQL posterior a 10.2
Desde PostgreSQL 10.3 se sugiere evitar el uso de public
en el search_path
como medida de seguridad que se explica en https://wiki.postgresql.org/wiki/A_Guide_to_CVE-2018-1058%3A_Protect_Your_Search_Path
Por eso las copias de respaldo por omisión ejecutan:
SELECT pg_catalog.set_config('search_path', '', false);
Esto lo hicieron para mitigar que en instalaciones multiusuario un usuario con permiso de escritura en el esquema public
cree allí funciones propias de PostgreSQL que puedan ser troyanos ejecutados por otros usuarios (incluyendo administradores).
Puede verse la ruta de búsqueda de objetos con:
show search_path ;
Rails 5.2.3 con PostgreSQL no está siguiendo esta recomendación y suele establecer search_path en '$user, public'.
Sin embargo una aplicación rails que ejecute set search_path='' requerirá que se posteriormente se use explicitamente public. Tal es el caso de sip y otros motores sobre este en los que la semilla consta de volcados SQL que establecen search_path en '', así que de interrumpirse `db/seed.rb después de haber cargado los volcados:
(byebug) r=Sip::Grupo.connection.execute('show search_path')
#<PG::Result:0x00000487d11bf960 status=PGRES_TUPLES_OK ntuples=1 nfields=1 cmd_tuples=0>
(byebug) r[0]
{"search_path"=>""}
Por lo mismo tras ejecutar rails db:seed' el entorno donde operá queda con
search_pathen '' y no operan partes que requieran public en
search_pathtales como
db:migrate`.
Por eso no está operando:
bin/rails db:drop db:create db:setup db:migrate
(pues db:setup
implicitamente ejecuta db:seed
) Pero si opera:
bin/rails db:drop db:create db:setup
bin/rails db:migrate
En sip
y motores y aplicaciones desarrollados por Pasos de Jesús, procuraremos no asumir que public
está en search_path
y emplear de forma explícita public
. al llamar objetos que están en ese esquema y emplear pg_catalog
de manera explícita para funciones del sistema.
Típicamente deben hacerse cambios en:
-
bin/gc.sh
para separardb:setup
y/odb:seed
dedb:migrate
-
db/seed.rb
otest/dummy/db/seed.rb
para cambiar usuario porpublic.usuario
- Cambiar uso de tablas sin esquema para agregar
public
por ejemplo endb/cambia-basicas.sql
ydb/datos-basicas.sql
- Buscar usos de SQL en la aplicación. Ha resultado útil:
find . -exec grep -e DELETE -e CREATE -e FROM -e INSERT -l {} ';'
Desarrollado por Pasos de Jesús. Dominio público de acuerdo a legislación colombiana. Agradecemos financiación para personalizaciones de dominio público a diversas organizaciones, ver https://github.com/pasosdeJesus/sivel2/blob/master/CREDITOS.md
- Validación de etiquetas de Colombia y sus departamentos entre OSM de Sep.2022 y DIVIPOLA 2022
- Actualización a DIVIPOLA 2022-07 y Resumen ejecutivo de la actualización a DIVIPOLA 2022-07
- Actualización a DIVIPOLA 2021 y Resumen ejecutivo de la actualización a DIVIPOLA 2021
- Actualización a Rails 7
- Actualización a DIVIPOLA 2020 y Resumen ejecutivo de la actualización a DIVIPOLA 2020
- Extensiones para Chomium útiles para desarrollo
- Actualización de sip 2.0b11 a 2.0b12
- Actualización de sip 2.0b10 a 2.0b11
- Actualización de Rails 6.0 a Rails 6.1
- Resumen ejecutivo de la actualización a DIVIPOLA 2019
- Actualización a DIVIPOLA 2019
- Actualización-de-sip-2.0b6-a-sip-2.0b7
- Pasando de sprockets a webpacker con Rails 6
- Actualización a Rails 6 en 6 pasos
- Actualización a DIVIPOLA 2018
- Actualización de Rails 5.1 a Rails 5.2
- Actualizando a Rails 5
- Actualización a PostgreSQL posterior a 10.2