Conf 4 Seguridad en Bases de Datos
Conf 4 Seguridad en Bases de Datos
Conf 4 Seguridad en Bases de Datos
Los datos deben ser reconstruibles, porque por muchas precauciones que
se tomen, siempre pueden ocurrir accidentes.
Es importante poder definir desde qué equipos se pueden conectar los usuarios
a nuestras bases de datos, así como poder definir qué usuarios y a qué bases
de datos se pueden conectar. La configuración de este nivel de seguridad se
realiza en los ficheros pg_hba.conf (hba es acrónimo de Host Based
Authentication), pg_ident.conf y postgresql.conf.
/var/lib/pgsql/data/pg_hba.conf
/etc/postgresql/main/pg_hba.conf
Fichero postgres.conf
SSL son las siglas en inglés de Secure Socket Layer (capa de conexión
segura). Es un protocolo criptográfico empleado para realizar conexiones
seguras entre un cliente y un servidor. De forma básica, una conexión
usando el protocolo SSL funciona de la siguiente forma: El cliente y el
servidor entran en un proceso de negociación, conocido como handshake
(apretón de manos). Este proceso sirve para que se establezca varios
parámetros para realizar la conexión de forma segura. Una vez terminada
la negociación, la conexión segura es establecida. Usando llaves
preestablecidas, se codifica y descodifica todo lo que sea enviado hasta
que la conexión se cierre. La clave se transmite en texto plano si la
conexión no es SSL.
Fichero pg_hba.conf
Para restringir el acceso por la red, Postgres define una serie de parámetros en
el archivo pg_hba.conf. Se debe definir un registro (fila) para cada rango IP al
que se le vaya a permitir conectarse al servidor. En la columna TYPE se
especifica el tipo de registro, que puede ser LOCAL, HOST, HOSTSSL o
HOSTNOSSL. En la columna DATABASE se especifica a qué bases de datos
del servidor se va a dar acceso. En la columna USER se especifica a qué
usuarios del servidor se le va a permitir la conexión remota. En la columna
CIDR-ADREESS se especifica el rango IP al que se le va a dar el acceso y la
columna METHOD especifica el método de autenticación que se va a utilizar.
TYPE
LOCAL: Se define para las conexiones que se realizarán desde el propio
servidor.
HOST: Se utilizará para conexiones remotas no-SSL y SSL.
HOSTSSL: Sólo se utilizarán para conexiones remotas SSL.
HOSTNOSSL: Sólo se utilizarán para las conexiones remotas no-SSL.
DATABASE
ALL: se permite la conexión a cualquier base de datos.
SAMEUSER: solo a bases de datos que su nombre sea el mismo que el usuario
que se conecta.
SAMEROLE: solo a bases de datos que su nombre sea el mismo que el rol que
se conecta.
nombd1, nombd2,…: se permite la conexión a cualquiera de las bases de datos
de la lista.
@fichero: se permite la conexión a las bases de datos incluidas en el fichero,
que debe estar en el mismo directorio que pg_hba.conf
USER:
ALL: se permite la conexión de cualquier rol.
role1, [+] role2,…: se permite la conexión de los roles de la lista y además se
permite la conexión de cualquier rol que sea miembro de role2.
@fichero: se permite la conexión de los roles incluidos en el fichero, que debe
estar en el mismo directorio que pg_hba.conf.
CIDR-ADREESS
Puede utilizarse la dirección CIDR o la combinación dirección_IP máscara_IP. A
continuación se listan algunos ejemplos:
METHOD
TRUST: deja todos los accesos sin necesidad de autenticarse (sólo
recomendable para conexiones desde el equipo local).
REJECT: conexión rechazada sin condiciones.
PASSWORD: se solicita palabra de paso sin encriptar, las palabras de paso se
almacenan en la tabla pg_authid y pueden estar cifradas o no según como se
creara el rol.
MD5: palabra de paso con el método de encriptación md5, y se almacena
también con este método. Es el método recomendado por PostgreSQL. En
versiones de PostgresSQL anteriores a la 7.2 a este método se le conoce como
crypt.
krb5: se utiliza el protocolo Kerberos versión 5 para autentificar al usuario. Este
método se puede utilizar sólo para conexiones con TCP/IP.
ident: utiliza el usuario del sistema desde el que se está intentado conectar.
Fichero pg_ident.conf
Los usuarios, que son los actores de la BD. Cada vez que el SGBD hace
una operación sobre la BD la hace a cuenta de un usuario determinado.
El SGBD debe permitir la operación dependiendo de cuál usuario está
efectuando esta operación.
Los objetos de la BD, que son los elementos a los cuales se puede
aplicar la protección. La seguridad se aplica generalmente a tablas y
vistas, pero en dependencia del SGBD pueden ser protegidos otros
objetos (disparadores, formularios, etc).
Los privilegios, son las acciones que un usuario tiene permitido efectuar
o no sobre los objetos de una BD. Las acciones más comunes que realiza
un usuario sobre un objeto son las de SELECT, INSERT, DELETE y
UPDATE.
Identificadores de usuario
Cada usuario de una base de datos basada en SQL tiene asignado un id-
usuario, generalmente un nombre breve que identifica al usuario dentro del
SGBD. Toda sentencia SQL ejecutada por el SGBD se hace a cuenta de un id-
usuario específico. En general estos identificadores son asignados por el
administrador del sistema. En el estándar de SQL los identificadores de usuario
son nombres de hasta 18 caracteres. Esto varía considerablemente de una
SGBD a otro.
Cada SGBD deberá implementar la forma de autentificar los id-usuarios que han
sido emitidos por su administrador, esto se hace comúnmente a través de una
contraseña, pero el SQL no dice nada sobre esto.
Sintaxis ampliada:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| CREATEUSER | NOCREATEUSER
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| CONNECTION LIMIT connlimit
| [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'timestamp'
| IN ROLE rolename [, ...]
| IN GROUP rolename [, ...]
| ROLE rolename [, ...]
| ADMIN rolename [, ...]
| USER rolename [, ...]
| SYSID uid
Principales parámetros *:
*Para una descripción más detallada de todos los parámetros del comando CREATE ROLE
consultar en los materiales complementarios el documento Roles, grupos y usuarios.pdf.
*Si desea profundizar sobre la sintaxis de los comandos CREATE USER y CREATE GROUP
consulte en los materiales complementarios el documento Roles, grupos y usuarios.pdf.
Ejemplos:
Objetos de seguridad
Privilegios
Existen muchas más acciones que las mencionadas hasta el momento, estos
privilegios también se le aplican a las acciones realizadas mediante los
comandos del DCL (GRANT y REVOKE) y DML (CREATE, ALTER, DROP).
Por ejemplo, cuando se crea una tabla con la sentencia CREATE, quien lo hace
se convierte en su propietario y recibe totales privilegios sobre esa tabla
(SELECT, INSERT, DELETE; UPDATE). Otros usuarios no tienen inicialmente
privilegios sobre la tabla recién creada. Si se les va a proporcionar acceso a la
tabla, hay que concedérselos utilizando la sentencia GRANT.
Concesión de privilegios
GRANT SELECT
INSERT
DELETE
UPDATE
( nombre columna )
,
,
ALL PRIVILEGES
Por ejemplo:
Paso de privilegios
GRANT SELECT
ON vendeste
TO larry
WITH GRANT OPTION
Aquí le está dando permiso al usuario larry a usar la vista de solo lectura y
además le está dando la potestad a larry que pueda dar este permiso a otros
usuarios. Luego ahora larry puede hacer lo siguiente:
GRANT SELECT
ON vendeste
TO sue
El usuario sue tiene derecho a usar la vista pero no puede dar este permiso a
otros usuarios.
Revocación de privilegios
El SGBD para hacer cualquier operación sobre una base de datos se refiere
constantemente a los datos del catálogo de sistema, por ejemplo cuando
procesa una sentencia de SQL.
Nombre Propósito
pg_aggregate aggregate functions
pg_am index access methods
pg_amop access method operators
pg_amproc access method support procedures
pg_attrdef column default values
pg_attribute table columns ("attributes")
pg_authid authorization identifiers (roles)
pg_auth_members authorization identifier membership relationships
pg_cast casts (data type conversions)
pg_class tables, indexes, sequences, views ("relations")
pg_constraint
check constraints, unique constraints, primary key
constraints, foreign key constraints
pg_conversion encoding conversion information
pg_database databases within this database cluster
pg_db_role_setting per-role and per-database settings
pg_default_acl default privileges for object types
pg_depend dependencies between database objects
pg_description descriptions or comments on database objects
pg_enum enum label and value definitions
pg_foreign_data_wrapper foreign-data wrapper definitions
Nombre Propósito
pg_foreign_server foreign server definitions
pg_index additional index information
pg_inherits table inheritance hierarchy
pg_language languages for writing functions
pg_largeobject data pages for large objects
pg_largeobject_metadata metadata for large objects
pg_namespace schemas
pg_opclass access method operator classes
pg_operator operators
pg_opfamily access method operator families
pg_pltemplate template data for procedural languages
pg_proc functions and procedures
pg_rewrite query rewrite rules
pg_shdepend dependencies on shared objects
pg_shdescription comments on shared objects
pg_statistic planner statistics
pg_tablespace tablespaces within this database cluster
pg_trigger triggers
pg_ts_config text search configurations
pg_ts_config_map text search configurations' token mappings
pg_ts_dict text search dictionaries
Asegurar sus datos involucra algo más que conectarse en un firewall con una
interface competente o cualquier otro programa de seguridad informática. Lo que
se necesita es un plan comprensivo de defensa. Y se necesita comunicar este
plan en una manera que pueda ser significativo para la gerencia y usuarios
finales. Esto requiere educación y capacitación, conjuntamente con la
explicación, claramente detallada, de las consecuencias de las violaciones. A
esto se le llama una política de seguridad y es el primer paso para asegurar
responsablemente la red o los datos contenidos en un Sistema Gestor de Bases
de Datos. La política puede incluir instalar un firewall, pero no necesariamente
se debe diseñar su política de seguridad alrededor de las limitaciones del
firewall.