Beneficios de seguridad de la creación de procedimientos almacenados mysql

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp

Contenidos

Crear procedimientos almacenados de mysql implica crear un conjunto de declaraciones SQL, nombrarlas y almacenarlas en mysql como un grupo. De esta forma puede ser reutilizado y compartido por múltiples programas, obteniendo al mismo tiempo algunas ventajas importantes.

istock-693216672-3783833

Créditos fotográficos: Peterpal

Una de las razones más beneficiosas para crear procedimientos almacenados mysql es la capa adicional de seguridad. que se coloca en la base de datos de la aplicación que solicita datos. Si la cuenta de usuario creada para la aplicación o el portal web está configurada solo con permisos de ejecución, la cuenta de usuario no podrá entrar de forma directa a las tablas siguientes.

Esta ayuda a evitar que un pirata informático acceda de forma directa a las tablas de la base de datos. El riesgo en el que se incurre si un pirata informático utiliza esa cuenta de usuario que ejecuta un procedimiento almacenado es mucho menor que con una cuenta de usuario que tiene permisos completos de inserción, actualización y eliminación de forma directa en las tablas.

Control de acceso al crear procedimientos almacenados mysql

En la práctica, al crear procedimientos almacenados de mysql, es factible usar algunas reglas que facilitan el control de la cuenta Puede especificar un usuario en un atributo DEFINER de objeto. Estos son los siguientes:

  • Que solo es factible especificar un valor DEFINER que no sea su propia cuenta, si tiene el SÚPER privilegio.
  • Que el único valor de usuario legal para todos los que no disponen el privilegio SUPER es su propia cuenta, ya sea que se haya especificado literalmente o a través de el uso de CURRENT_USER, haciendo imposible configurar el definidor para alguna otra cuenta.

Otra ventaja de crear procedimientos almacenados mysql es que se puede minimizar el riesgo potencial del programa almacenado y ver la creación y el uso. Para hacer esto, simplemente siga estas pautas:

  • Utilice el INVENTARIO DE SEGURIDAD SQL en la definición de objeto cuando sea factible para una rutina o vista almacenada, dado que esto solo puede ser utilizado por usuarios con los permisos adecuados para las operaciones hechas por el objeto.
  • Especifique un atributo DEFINER explícito al crear programas o vistas almacenados en el contexto del definidor, mientras se utiliza una cuenta que tiene el privilegio SUPER, dado que ese atributo se referirá a una cuenta que solo tiene los privilegios requeridos para las operaciones hechas por el objeto. Solo en los casos en que sea absolutamente necesario, se podría especificar una cuenta DEFINER con muchos privilegios.
  • Impedir que los usuarios especifiquen cuentas DEFINER con muchos privilegios, algo que, como administradores se pueden lograr creando procedimientos almacenados mysql, siempre que no se les otorgue el privilegio SUPER.
  • Describe los objetos en el contexto DEFINER teniendo en cuenta que pueden tener acceso a datos para los que el usuario que invoca no tiene privilegios. En algunos casos, se puede evitar hacer referencia a estos objetos si no se otorgan privilegios particulares a usuarios no autorizados. Para esto, bastaría con determinar que los usuarios sin el privilegio EXECUTE no pueden hacer referencia a funciones o procedimientos almacenados y que los usuarios con el privilegio adecuado nunca pueden hacer referencia a una vista (como sería el caso, a modo de ejemplo, de SELECT para seleccione o INSERT para insertarlo).

A pesar de esto, no olvides que este tipo de medidas de seguridad al crear procedimientos almacenados de mysql no se pueden aplicar a desencadenadores y eventos, dado que no disponen una característica de SEGURIDAD SQL y siempre se ejecutan en un contexto de definición, por lo que no hay un usuario para referirse a ellos de forma directa.

(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = «//connect.facebook.net/es_ES/all.js#xfbml=1&status=0»;
fjs.parentNode.insertBefore(js, fjs);
}(document, ‘script’, ‘facebook-jssdk’));

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.