Sidebar

La versión 12.5.3a de Adaptive Server Enterprise (ASE) introdujo una nueva característica que permite la encripción y desencripción de columnas, fortaleciendo así la seguridad y el acceso a los datos almacenados en la base de datos, de tal manera que sólo los usuarios debidamente autorizados tengan acceso a la información.

Este documento brinda una breve descripción de la configuración y uso de la opción de encripción de datos en ASE.

Configuración y Uso

Para utilizar la encripción de datos, siga éstos pasos.

  1. Instale la licencia ASE_ENCRYPTION.
La instalación de la licencia ASE_ENCRYPTION se lleva a cabo usando el Sybase Licence Manager, generalmente ubicado en %SYBASE%\%SYSAM%\lmgr.exe (Windows), o $SYBASE/$SYBASE_SYSAM/lmgr (Unix).
  1. Active la opción de configuración 'enable encrypted columns'.

Usando el procedimiento almacenado sp_configure active la opción 'enable encrypted columns'. Por ejemplo:

sp_configure 'enable encrypted columns', 1
go

Esta opción es estática, así que usted debe reiniciar ASE para que entre en efecto.

Importante:
Los siguientes pasos se deben llevar a cabo en la base de datos en donde reside la tabla en la que se encriptarán los datos.
  1. Cree una contraseña de encripción del sistema.
Usando el procedimiento almacenado sp_encryption cree una contraseña de encripción para el sistema. Esta contraseña es específica para la base de datos en la que se ejecuta sp_encryption. La contraseña de encripción debe ser definida en cada base de datos en donde se vayan a encriptar datos. Para ejecutar sp_encryption usted debe tener el rol sso_role (Oficial de Seguridad del Sistema).

Ejemplo:

-- Crea una contraseña de encripción para
-- la base de datos 'produccion_db':

use produccion_db
go
sp_encryption system_encr_passwd, control2005
go
  1. Cree una llave de encripción.
Usando el comando create encryption key, cree una llave de encripción. Este comando le permite especificar el algoritmo de encripción, el tamaño de la llave y otras propiedades de la llave.

Usted puede crear llaves diferentes para cada columna que encripte. Las llaves pueden ser compartidas por varias columnas, pero cada columna sólo puede tener una llave.

Usando la opción default en el comando create encryption key, se crea una llave predeterminada para la base de datos, que es usada cuando el calificador encrypt de los comandos create tablealter table se usa sin un nombre de llave (ver el punto 5).

Para ejecutar create encryption key usted debe tener el rol sso_role.

Ejemplo:

-- Crea la llave de encripción 'llave1':

create encryption key llave1
  as default
  for AES with keylength 256
go

Una vez creada la llave, usted puede usarla para crear columnas encriptadas (con create table o alter table), u otorgar permiso a otros usuarios o roles para crear columnas encriptadas usando ésta llave.

Ejemplo:

-- Otorga permiso al rol 'db_admin_role'
-- sobre la llave 'llave1':

grant select on llave1
  to db_admin_role

go
  1. Encripte datos.
Usando una llave de encripción, es posible encriptar columnas de los siguientes tipos de datos:
  • int, smallint, tinyint
  • float4 y float8
  • decimal y numeric
  • char y varchar
  • binary y varbinary

Para encriptar columnas de una nueva tabla, use la cláusula encrypt de la sentencia create table. Por ejemplo:

-- Crea una tabla con una columna encriptada.
-- Usa la llave predeterminada de la base de datos.

create table empleados(código char(15) encrypt,
  nombres varchar(30), apellidos varchar(30))

go

Si se hubiera querido usar otra llave (diferente a la predeterminada), la cláusula encrypt indica el nombre de la llave. Por ejemplo:

-- Crea una tabla con una columna encriptada.
-- Usa la llave 'llave2':

create table clientes(t_credito char(15) encrypt with llave2,
  ... )
go

Para encriptar columnas de una tabla existente, use la cláusula encrypt de la sentencia alter table. La cláusula tiene las mismas opciones que para el comando create table. Por ejemplo:

-- Encripta los datos de una columna de una tabla ya existente.
-- Usa la llave 'llave1':

alter table proveedores(codigo char(4) encrypt with llave1,
  ... )
go

También es posible agregar una columna encriptada a una tabla ya existente. Por ejemplo:

-- Agrega una nueva columna encriptada a una tabla ya existente
-- Usa la llave predeterminada:

alter table cuentas
  add saldo numeric(10,0) encrypt
go

En todos los casos, el usuario debe tener permiso sobre la llave de encripción.

  1. Desencripte datos.
Para desencriptar los datos, el usuario debe tener:
  • Permiso de select sobre la columna.
  • Permiso de decrypt sobre la columna (introducido en ASE 12.5.3a).

Estos permisos deben ser otorgados al usuario, por el dueño de la tabla, usando el comando grant. Por ejemplo:

-- Otorga permisos de selección y desencripción
-- al usuario 'jperez':

grant select, decrypt
  on proveedores(codigo)
  to jperez

go

Así mismo, el dueño de la tabla puede revocar los permisos, usando el comando revoke

Si el usuario no tiene permiso decrypt sobre una columna, verá un mensaje de error como el siguiente, al intentar ver dicha columna:

Server Message:  Number  10330, Severity  14
Server 'SYBASE', Line 1:
DECRYPT permission denied on object table_name,
  database db_name, owner object_owner

Conclusiones

La encripción de datos introducida en ASE 12.5.3a permite fortalecer la seguridad y el acceso a los datos almacenados en ASE. Para configurar y usar esta opción de ASE se requiere de la licencia ASE_ENCRYPTION.


Tips BD