Tienes que aprender sobre bases de datos, y lo tienes que hacer ahora, y por ahora me refiero allá
Las bases de datos son fundamentales, no solamente en ciberseguridad, sino siendo sinceros en cualquier área técnica
ya que mismamente esta plataforma que estás usando para ver este video usa una base de datos
Y conocer realmente cómo funcionan estas tecnologías es algo fundamental, principalmente para ciberseguridad
en cualquier dominio al que te vayas a dedicar. Esto es obligatorio, viejo. Por lo que en este video vas a ver qué es una base de datos, cómo funcionan, qué elementos la componen
y sobre todo, cómo hacer consultas dentro de dicha base de datos. entendiendo siempre el trasfondo y lo que estás haciendo
porque aquí la intención no es que lances cláusulas de SQL a lo loco es que realmente comprendas lo que estás haciendo
así que mi recomendación toma un lápiz, toma un papel y dedícale tiempo a este video las veces que sean necesarias
repítelo las veces que quieras para que de esta forma puedas integrar bien estos conocimientos
pero antes, te presento al patrocinador de este video algo que le falta a la mayoría de pentesters
o meramente personas que se quieran dedicar a ciberseguridad es el poder crear múltiples perfiles diferentes dentro de su propio navegador
para que así puedan por ejemplo interactuar con una web y enviarle la huella digital que ellos desean
Y por eso te quiero hablar de Octobowser. Y tú me dirás, ya está quién es. Octobowser es un navegador que permite crear múltiples perfiles
Y tú me dirás, ¿y qué es un perfil? Pues básicamente es una instancia dentro del navegador, a la que le puedes configurar una IP única, un user agent único
y las configuraciones que desees. Solo que dichas configuraciones se van a aplicar solamente a dicho perfil
por lo que técnicamente puedes tener múltiples navegadores dentro de uno solo, consiguiendo así que si eres pentester puedes auditar el activo que estés auditando
desde diferentes contextos, sin que por ejemplo tengas que usar múltiples navegadores. o meramente el modo incógnito. O también si eres una persona que le preocupa su ciberseguridad
perfectamente puedes crearte un perfil más privado y usarlo solamente en los momentos que quieras navegar en sitios web que no conoces. Y nosotros desde Hickseq hablamos con Octobowser
para obtener una oferta especial para ustedes, que básicamente son 4 días de acceso gratuito
a esta herramienta, y las primeras 20 personas recibirán, además de esto, 100 perfiles inmediatamente
que pueden usar por esos 4 días gratuitos. E importante, para que esta promoción te aplique
tienes que usar el código XLMAX o meramente acceder desde el enlace que tendrás en la
descripción y en el comentario fijado. Dicho esto, gracias a Autorowser por patrocinar este video
Ahora sí, continuemos. Muy bien, empecemos por lo básico, que es una base de datos. Una base de datos es un sistema
organizado para el almacenamiento, gestión y recuperación de información. Mismamente, esta plataforma desde donde ves este curso usa por lo menos una base de datos. Pero bien
no nos quedemos solamente en qué es. Aquí lo importante es saber cómo funciona. Para entender cómo funciona una base de datos, podemos compararla con un sistema de archivo. En este
sistema la información se almacena en tablas, que podríamos visualizar como cajones de ese archivo
Cada cajón, o tabla, contiene información que puede estar, o no, relacionada entre sí. Por ejemplo
una tabla podrá contener información sobre clientes, mientras que otra podrá contener
información sobre los empleados de esa empresa. Ahora, esta información está almacenada dentro
de una tabla de una forma en específico, y concretamente se hace a través de registros
y de columnas, registros de forma horizontal y columnas de forma vertical. O dicho de otra
forma, cada fila en una tabla representa un registro, que es el conjunto único de datos
relacionados entre sí. Siguiendo con nuestro ejemplo, una fila en la tabla de clientes
podría contener toda la información relacionada con un cliente en específico, mientras que
por otro lado las columnas de la tabla representan esos diferentes campos, concretamente esos
campos que definen qué información se va a almacenar en cada registro, como digamos
el nombre del cliente, su dirección, su número de teléfono, si le clava el vistazo a la
que le gusta, etc. Dicho de una forma mucho más simple, si tenemos tres columnas, digamos
nombre, apellido y estado civil, estas columnas, las verticales, definen qué información
se va a almacenar en cada una de ellas, mientras que los registros, los horizontales, son como
tal los datos relacionados entre sí de una misma entidad, datos puestos en cada columna
Al tener cada dato rellenado en cada columna, se forma el registro, y así pueden haber muchos
más datos dentro de cada columna, que de forma horizontal corresponderían a cada registro
Ahora, para poder interactuar con una base de datos, es decir, para añadir, modificar
eliminar o consultar información, se usa un lenguaje llamado SQL. SQL son las siglas de
Structured Query Language, inglés de Cambridge, papá. Y este lenguaje es el que hace de nexo entre
nosotros y la base de datos. Es decir, traduce nuestras consultas a un lenguaje que la base de
datos puede comprender, de esa forma ejecutándolo y dándonos la información. Un ejemplo muy simple
de esto, que indagaremos al 100% en el futuro, pero como spoiler, que es SelectNombreFromClientes
Con esta cláusula le estamos pidiendo que nos seleccione todos los registros, que estén dentro
de la columna nombre, y que a su vez esta columna esté en la tabla clientes. Por lo
que al ejecutar esto, la base de datos se va a ir a la tabla clientes, va a irse a la
columna nombres, va a tomar todos esos registros y nos los va a devolver. Y obviamente la velocidad
a la que lo haga dependerá principalmente del número de registros que tenga que devolvernos
Y ya por último, ten en cuenta que tenemos varios tipos de bases de datos. Bueno, varios
hay dos. Y cada uno está diseñado para diferentes necesidades, a nivel del almacenamiento y
gestión de los datos. Y estas son las bases de datos relacionales y las no relacionales
En este curso indagaremos principalmente en las relacionales, porque son las más comunes
y son las que principalmente te vas a conseguir. A nivel de, por ejemplo, estar testeando si existen inyecciones SQL en la aplicación web que estés auditando
Ojo, esto no quiere decir que no existan inyecciones no SQL, que también existen. Y no es que como tal nunca vayas a toparte con bases de datos no relacionales
Pero como te digo, en este caso indagaremos solamente en las relacionales, por lo menos en este curso
Pero bien, ¿qué diferencias existen entre una y otra? Brevemente, las bases de datos relacionales organizan los datos en tablas
que están relacionadas entre sí, como el ejemplo que pusimos antes. Adicionalmente, este tipo de bases de datos usa el lenguaje SQL
El que también comentamos antes Y se usan principalmente para datos que ya están estructurados
Y un ejemplo claro de sistemas gestores de bases de datos Es MySQL o MySQL o MySQL
O MySQL, como le quiere decir papá PostgreSQL o SQLite Que si lo pronunciamos a lo ponquecito es SQLite
Sí, puede malinterpretarse Ahora, por otro lado, están las bases de datos no relacionales
O no SQL Donde aquí la arquitectura es mucho más flexible Que en una base de datos relacional
Adicionalmente que pueden almacenar datos en otros formatos más variados, digamos JSON, BSON y demás
Y una de las diferencias más resaltables es que aquí no se utiliza el lenguaje SQL para hacer las consultas
Aunque sí es verdad que en algunos casos se ofrecen variantes o lenguajes de consultas similares, pero como tal no es SQL
ya que como tal aquí las consultas se hacen principalmente a través de APIs o lenguajes de consultas específicos
que están adaptados al tipo de estructura de datos, que tiene este tipo de base de datos, muchos datos
Ya que como tal este tipo de base de datos está diseñada para ser escalable, soportando así un volumen de datos bastante alto, si aplicase
Y ejemplos de sistemas gestores de bases de datos que usan este modelo pueden ser MongoDB, Cassandra o Coaches Database
Pero como te digo, en este curso principalmente vamos a ver bases de datos relacionales, y no tanto las no relacionales, porque aquí apoyaremos siempre las relaciones, papá
Aunque ten en cuenta que no es que una sea mejor que otra, simplemente se usan para propósitos diferentes
Así que con esto explicado, continuemos. Muy bien, indaguemos ahora un poco más sobre las tablas, las columnas, los registros y en este caso también los datos
Porque sí, lo explicamos en la clase pasada. Pero es importante que tengas claros estos conceptos
Además que son súper simples, viejo. Repasando. Una base de datos se divide prácticamente en un conjunto de tablas
Y las tablas también se dividen. En este caso en columnas. O campos. Donde a medida que se van almacenando datos
Dentro de cada una de estas columnas. Se crea por daño colateral un registro
Como te expliqué antes. Las columnas son verticales. Los registros son horizontales
Y la tabla es la unión de las columnas y los registros. Y adicionalmente
Cada información que está almacenada en cada registro. Y en cada columna. es un dato
Por lo que dicho de otra forma, las columnas, los registros, las tablas y en general las bases de datos
son simplemente un conjunto de datos organizados, como yo te lo expliqué antes
Y te digo, en este tipo de cursos lo principal es que vayamos a la parte práctica y por eso no voy a redundar
tanto en este tema porque realmente es muy simple de entender. Pero sí quería puntualizar
concretamente en estos conceptos porque a lo largo del curso voy a estar refiriéndome a tablas
columnas, registros y datos. Y no quiero que tú te quedes como bueno, quiero una columna porque si es así papá
pues te mando a la policía. Ahora, entendiendo esto, Comprenderás que una base de datos puede tener múltiples tablas
Tablas que a su vez pueden contener sus propias columnas Pero estas tablas pueden llegar a estar relacionadas entre s�
Y se relacionan precisamente a través de alguna columna Cuyos datos puedan compartir entre s�
Para de cierta forma sincronizar la información Dicho de otra forma Mientras más compleja sea una base de datos
Verás que más tablas va a tener Esto es evidente Pero tiene un motivo Y es que mientras más tablas tenga
Más se puede dividir la información De forma que sea mucho más práctico poder acceder a ella
O lo que es igual No es lo mismo que por ejemplo una base de datos de una empresa tenga solamente una tabla que tenga m columnas para almacenar toda la informaci Esto realmente casi nunca lo vas a ver Lo que posiblemente en entornos realistas te consigas Va a hacer que estas columnas se agrupan en m tablas
Donde cada una de estas tablas va a almacenar un tipo específico de información
Y por ende, como es información que puede llegar a estar relacionada entre sí Existe otro concepto
Que son las relaciones entre tablas Siguiendo con el ejemplo Digamos que tenemos una tabla de proyectos
Y una tabla de clientes En este caso estas dos tablas pueden estar relacionadas entre s�
y pueden estar relacionados a través de, por ejemplo, el campo de ID del cliente, dentro de la tabla de proyectos
Para que de esta forma, si nosotros queremos ver cuántos proyectos tiene un cliente asignado, simplemente tendríamos que filtrar por la tabla de proyectos
pidiendo toda la información, pero diciendo que solamente nos devuelva las que tengan el ID del cliente
del cual queremos consultar. Y para que todo esto sea posible, como te dije, existe el concepto de claves
o en algunos casos le pueden llamar llaves. Así que continuemos. Muy bien
Hablemos ahora de la diferencia principal entre un sistema gestor de bases de datos y una base de datos
Porque mucha gente suele confundir estos términos Pero tú estás en GIGSEC, mi rey
Y de aquí vas a poder salir de muchas formas, pero no confundido A ver, un sistema gestor de bases de datos es un software diseñado para crear, administrar y operar una base de datos
Piénsalo así como el conjunto de herramientas y técnicas que se utilizan para procesar y organizar los datos
Básicamente, es este software que le permite a los usuarios, como tú como yo
Y a otros programas externos poder interactuar con la base de datos en cuestión
A través de, por ejemplo, el lenguaje SQL Usando para esto, por ejemplo, cláusulas
De este lenguaje Por otro lado, una base de datos es una colección organizada de datos
Como ya lo vimos antes Datos que están organizados en tablas y columnas
Como también lo vimos antes De manera que un sistema gestor de bases de datos puede acceder a estos
Y básicamente los pueda gestionar En vez a las órdenes que nosotros o programas de terceros le demos
En pocas palabras, viejo La base de datos es el almacén de la información Mientras que el sistema gestor de bases de datos
Es la interfaz a través de la cual interactuamos con ese almacén Por ponerte otro ejemplo
más simple de entender. Una base de datos sería la biblioteca, y el sistema gestor de bases de
datos sería el bibliotecario, el cual tenemos amenazado, y tiene que seguir nuestras órdenes
o le va a ir mal. Ahora, existen varios tipos de sistemas de gestión de bases de datos
donde cada uno está diseñado para trabajar con diferentes tipos de bases de datos, dependiendo del contexto. Y estos sistemas gestores de bases de datos pueden ser tanto
para bases de datos relacionales como no relacionales, y son los que vimos antes
por ejemplo, MySQL, PostgreSQL, u otros que no mencionamos, por ejemplo el de Oracle
o meramente el de Microsoft. Pero con lo que realmente quiero que te quedes es que, por ejemplo, si dices
tengo una base de datos MySQL o MySQL o MySQL o como le quieras decir, viejo
Al decir esto, pues realmente no es erróneo y se puede llegar a entender lo que estás tratando de expresar
Pero que tengas en cuenta, para ese último caso, para esa afirmación, lo correcto será decir
tengo una base de datos en el sistema gestor de bases de datos MySQL o MySQL
O bueno, no voy a decir todas las variantes que tiene ese nombre. Y algo importante, el lenguaje que vamos a ver en este curso
es el lenguaje SQL y este lenguaje es global para todas las bases de datos
que son relacionales. Es decir, el lenguaje MySQL no existe, ni tampoco existe el lenguaje
MariaDB, eso no existe. Por eso es que te digo que no hay que confundir sistemas gestores de bases de datos con bases de datos, ni con el lenguaje de consultas que usamos para interactuar
con dichos datos, que en este caso es SQL. Porque a pesar de que todos estos elementos
interactúan entre sí, en esencia no son exactamente lo mismo, y esto es importante
entenderlo. Así que con esto explicado, continuemos. Muy bien, hablemos ahora del lenguaje SQL
SQL son las siglas de Structured Query Language O lenguaje de consulta estructurada, viejo, no nos compliquemos
Y este es un lenguaje que hace de nexo entre nosotros y el sistema gestor de bases de datos
Para a través de las consultas que le enviamos en este lenguaje Realizar acciones en específico a los datos
Que están a su vez dentro de estas bases de datos Que están a su vez dentro de los sistemas gestores de bases de datos
Muchos datos Originalmente SQL fue desarrollado en 1970 Por investigadores de IBM
IBM en esa época, para que entiendas, era Jesucristo Ahora mismo no es que no sea buena
Sino que pasó de ser Jesucristo al padre de tu parroquia Pero bueno, ellos desarrollaron ese cuel
Y este lenguaje se basa en los principios del modelo relacional propuesto por Edgar Cod
A lo que tú dirás, ¿quién es este compa? Pues fíjate, el compa Cod fue un matemático Que incursionó también en el mundo de la computación
Y para no entrar en relleno Este compa propuso el uso de las relaciones Para representar los datos y definir la estructura de una base de datos
De una forma más organizada y lógica Lo que permitía en este caso un almacenamiento, recuperación y manipulación de los datos
De una forma más intuitiva y eficiente Que con la que se trabajaba en ese entonces
Básicamente, este compa quería buscar hacer más eficiente La forma de interactuar con una base de datos
A lo que IBM, en base a lo que Code propuso, creó el lenguaje SQL Y como podrás intuir cómo está basado en este modelo que propuso Code
Funciona principalmente sistemas gestores de bases de datos A nivel de bases de datos relacionales
Porque precisamente este fue el paradigma que propuso Code Pero bueno, volvamos a la actualidad SQL como tal es catalogado en muchos casos como un lenguaje de programación
y en cierto aspecto sí puede ser clasificado como tal. Fuera de aquí HTML, tú no
Pero la forma más precisa de describirlo es como un lenguaje de manejo o de manipulación de bases de datos
y no tanto como un lenguaje que está diseñado para construir aplicaciones o sistemas de software
Porque realmente SQL no está hecho para construir aplicaciones, sino para hacer consultas
Digamos que es el compa que estuvo contigo en el máster. Él también tuvo el título. Y tú y él tienen ese máster
pero tú ejerces y sabes. Eres un lenguaje de programación, a lo que este otro compa no sabe nada
pero también tiene el título. Es decir, es un lenguaje de programación, entre comillas. Ahora, ten en cuenta
Desde su creación SQL ha evolucionado muchísimo, tanto así que en 1986 la ANSI lo estandarizó por primera vez
a lo que los de la ISO dijeron nosotros también queremos, y en 1987 también lo estandarizaron
Por ende SQL pasó por varias revisiones y ampliaciones, para incluir nuevas funcionalidades y mejorar la eficiencia del lenguaje
lo que da origen que el lenguaje SQL que podemos emplear actualmente tenga pinchados en cuenta esteroides
en comparación con la primera versión que se hizo, y esto es evidente. Ahora, ten en cuenta algo muy importante, SQL se conforma de comandos, declaraciones y cláusulas
Aunque siendo sinceros, esto es simplemente una forma más práctica y ordenada, entre comillas
de poder clasificar el número de instrucciones que podemos enviar a, por ejemplo, una base de datos, a través del lenguaje SQL
Te explico brevemente. Cuando hablamos de comandos, podemos englobar a todas esas instrucciones que están dentro del lenguaje SQL
Cuando hablamos de declaraciones, nos referimos específicamente a un tipo de instrucción del lenguaje SQL
pero que dicha instrucción no necesariamente modifica los datos. Un ejemplo de esta puede ser Select, ya que con esta declaración podemos consultar datos, pero no necesariamente los modificamos
Y ya por último, tenemos las cláusulas, que las cláusulas se utilizan para refinar, o mejor dicho, modificar, el comportamiento de una instrucción SQL
Un ejemplo claro de esto son cláusulas que nos permiten filtrar la información, digamos WHERE, ORDER BY, GROUP BY o HAVING
Pero para efectos prácticos, tanto las cláusulas como las declaraciones son comandos o instrucciones
Y como te digo, esto simplemente es una forma ordenada de llamarlo. Al final de cuentas decir que CL es una declaración o un comando es lo mismo, o decir que por ejemplo WHERE es una cláusula o un comando es lo mismo
Pero está bien que lo conozcas. Y ya por último, en base también a este número de instrucciones o comandos que tenemos disponibles en el lenguaje SQL
todas estas instrucciones, tanto declaraciones como cláusulas, a su vez también podemos dividirlas en 5 categorías
A lo que se le conoce también de forma coloquial como los tipos del lenguaje SQL, que bueno, no son tipos del lenguaje SQL
Es simplemente agrupar las instrucciones en 5 tipos. Y estos tipos son los siguientes, DQL, DML, DDL, DCL y TCL
Sí, muchas Ls. DML son todas esas instrucciones que nos permiten manipular los datos
DDL engloba las instrucciones que nos permiten definir los datos DCL engloba las instrucciones que nos permiten tener un control sobre los datos
TCL engloba todas las instrucciones que nos permiten hacer transacciones entre los datos
Y DQL es como Plutón O sea, antes era un planeta, pero como que ahora nadie se acuerda de él
Lo que pasa con DQL es que casi no se tiene en cuenta Porque se tiende a meter dentro de DML
O sea, no se mete DQL en DML, que la gente lo asocia así Pero como tal, DQL engloba las instrucciones que nos permiten consultar los datos
Pero para efectos prácticos, viejo En este curso solamente nos centraremos en DDL y DML
Pero ahora, indaguemos más sobre cada uno, y lo haremos en la siguiente clase. Así que con esto explicado, continuemos
Muy bien, el total de las cláusulas que tenemos en el lenguaje SQL, lo podemos dividir en cinco principales categorías
Pero realmente en este curso nos vamos a enfocar principalmente en DML y DDL
ya que DQL, DCL y TCL para este curso no son tan relevantes
Si tú quieres ser administrador de bases de datos, pues sí. Pero si lo que buscas es entender SQL para despu aplicarlo digamos a una auditor de seguridad y explotar inyecciones de SQL pues es mejor que aprendas la informaci que s te va a ser Pero bueno veamos brevemente cada uno DML son las siglas de Data Manipulation Language y como tal est en global las cl que est destinadas a la manipulaci de datos
Es decir, cláusulas que nos permiten insertar, consultar, actualizar y eliminar los datos
que se almacenan de forma individual en cada columna. Básicamente, con las cláusulas que conforman el DML, podemos precisamente hacer eso, manipular los datos
Con lo que en este caso debes ir con cuidado, porque después terminas borrando algo que no tienes que borrar, papá
Seguidamente, tenemos la categoría DDL O Data Definition Language Que esta diferencia de DML
Como tal se centra en la definición y modificación A nivel de la estructura de los datos
Dentro de la base de datos Es decir, aquí agrupamos las cláusulas A nivel de creación, modificación y eliminación
Pero a nivel de tablas, índices y otros objetos De la base de datos
Porque ten en cuenta, el DML nos permite interactuar con los datos Y el DDL con la estructura general de la base de datos
No es lo mismo, papá Por otro lado, tenemos el DCL DCL, no DLC
Aquí no te cobramos nada adicional, papá DCL son las siglas de Data Control Language
Y como tal, esta categoría abarca las cláusulas Que controlan los derechos de acceso y de seguridad
A la base de datos Y ten en cuenta Que el DCL es más que todo un complemento a los anteriores
Ya que este más que interactuar con los datos Se asegura de que el acceso a estos Sea el correcto y el autorizado
Por otro lado Tenemos el lenguaje TCL Que son las siglas de Transaction Control Language
Y este incluye instrucciones principalmente Para manejar las transacciones Entre las bases de datos
Y finalmente tendríamos DQL, que como ya te dije, pues, Select quería tener protagonismo
Y le dejaron crearse esto para que se callara. Porque realmente DQL, a nivel realista, lo incluimos dentro de DML
Pero bueno, como te dije, en este curso únicamente veremos DML y DDL
Y no es que las instrucciones que estén en los otros no sean relevantes, lo son, si quieres ser un administrador de bases de datos
Pero si tu interés es aprender bases de datos para entender cómo operan y así poder detectar de mejor forma inyecciones SQL
Pues para este último caso es mucho mejor que nos centremos en los que ya te dije
Así que para resumirte DML nos permite manipular los datos de la base de datos
DDL nos permite definir la estructura de los datos en la base de datos
DQL no debería existir y es parte de DML DSL nos permite manejar las transacciones de los datos en la base de datos
Y DSL nos permite mantener un control a nivel de permisos y seguridad De qué o quién puede acceder a estos datos
¿Adivinas dónde? En efecto papá, en la base de datos Así que con esto explicado, ahora sí continuemos
¿Qué es el sistema gestor de bases de datos
Y con metadatos, en este contexto, nos referimos a datos sobre los datos
Sí, una definición maravillosa, pero es así. Pero concretamente en este caso hablaríamos de, por ejemplo, la estructura de las tablas
los tipos de datos de las columnas, las restricciones aplicadas a los campos, y de más información de la configuración que esté aplicada en ese momento, sobre la base de datos
Que como entenderás, si conseguimos una inyección SQL, pues consultar Information Schema nos servirá de mucho
para poder entender mejor el entorno, y por ejemplo ver hasta dónde podemos llegar, dentro de la auditoría de seguridad, evidentemente
Si lo queremos poner en una parábola, pues Information Schema es como un índice de un libro que es muy enorme
Y ese libro enorme puede ser el sistema gestor de bases de datos, que contiene todas las bases de datos, las tablas, las columnas y todos los elementos que ya comentamos antes
Ahora ten en cuenta, cuando nos referimos a Information Schema, no nos referimos a un elemento ancestral
sino simplemente a una base de datos, que ya viene incluida de forma predeterminada en la mayoría de sistemas gestores de bases de datos, relacionales
Y esencialmente esta base de datos contiene un conjunto de vistas, que solamente son de lectura y que ofrecen así una forma estandarizada
para que cualquier usuario pueda consultar los metadatos de las bases de datos halladas en dicho sistema gestor de bases de datos
donde se encuentra esta base de datos. Ahora, esta base de datos, como te dije, no tiene tablas por así decirlo, en el modo tradicional que ya explicamos
sino que está compuesta por un conjunto de vistas, de solo lectura, como ya lo explicamos antes también
Y concretamente estas vistas son las siguientes. Tenemos la vista tables, que abarca toda la información de todas las tablas
de todas las bases de datos encontradas en el sistema gestor de bases de datos. También tenemos la vista columns, donde se almacena toda la información
pero en este caso solamente de las columnas. Y finalmente tendríamos kcolumnusage y tableconstrains
donde de igual forma estas vistas abarcan información de todas las bases de datos, pero limitando su alcance solamente a las restricciones de claves en la base de datos
incluyendo claves primarias y claves foráneas. Por lo que entenderás que si por ejemplo un atacante logra inyectar código SQL
en una consulta que no esté sanitizada y llega a acceder al information schema
a través de consultar estas vistas puede obtener mucha más información, o tú meramente, como pentester en una auditoría que esté autorizada
Pero bien, ¿cómo podría pasar esto? Y sí, sé que me estoy adelantando un poco, pero te quiero poner al menos un ejemplo
Digamos la siguiente consulta SQL, donde rompemos la consulta con una comilla, que indagaremos en cada una de estas instrucciones, tranquilo
Pero en general, un atacante podría por ejemplo listar todas las tablas en la base de datos
para de esta forma poder enumerar las columnas, que tenga una tabla en específico que sea de su interés
y ya conociendo tanto la tabla como la columna de interés, solicitar la información en cuestión
Y todo esto pudo hacerlo, ya que toda esta información se almacenaba en las vistas del Information Schema
Evidentemente, lo más recomendable en estos casos Es que se limite el acceso a la Information Schema
Y se aplique digamos el principio de menor privilegio Para que de esta forma si un atacante
Llegue a acceder a nuestra base de datos Pues por lo menos que la Information Schema lo tenga limitado
Aunque lo más evidente Lo primordial sería que no hubiese en primer lugar Una entrada de datos vulnerable en Jackson SQL
Y esto tienes que tenerlo en cuenta Ya que si por ejemplo en el futuro trabajas como pentester
Debes saber que no se trata solamente de romper Sino también de sugerir formas de cómo corregir la vulnerabilidad
Que tú conseguiste y explotaste Porque al final de cuentas viejo Tu trabajo se puede basar en romper cosas, pero la intención detrás de eso es poder mejorar la seguridad de esos activos, no romper por romper
Ahora, te recomendaría que te volvieses a ver esta clase, porque a nivel de bases de datos relacionales, las vistas de Information Schema las vas a usar muchísimo
Así que con esto explicado, continuemos. Muy bien, empecemos la parte práctica de este curso
Así que para ello, desde DB Browser, vamos a empezar a ejecutar nuestras declaraciones y cláusulas
Empezaremos con la instrucción SELECT, la cual ya la viste antes. en los ejemplos que comentamos, pero vamos a indagar mucho más en ella
Esta es la más fundamental en el lenguaje SQL, ya que lo que nos permite es seleccionar los datos
¿Qué queremos obtener? Básicamente, SELECT nos permite recuperar información, hallada en la base de datos
Ahora, ten en cuenta, otra instrucción que vas a usar mucho con SELECT es AS
AS es el acrónimo de alias, y este lo utilizamos para renombrar una columna o tabla
en el resultado de la consulta. Ojo, esto solamente de forma temporal en el resultado de la consulta
No es que como tal estemos modificando el nombre de la columna o tabla en cuestión. Es solamente eso, un alias temporal
Y una cosa más, ten en cuenta que select lo podemos usar de dos formas O bien podemos solicitar datos enviándole más cláusulas
O meramente enviándole valores Para que éste los imprima por pantalla Empecemos pues con este que es lo más básico
Si yo por ejemplo hago un select de un string Que por ejemplo sea Hicksec Y recuerda que en este caso los strings en SQL
Y en la mayoría de casos hay que ponerlos entre comillas En este caso comillas simples
Y digamos que yo a este resultado, que en este caso va a imprimir Hicksec Quiero que me lo devuelva en una columna que lleve por título, digamos
el mejor c de YouTube del mundo probado por el bicho Siu. Sí. Por lo que en este caso haría un select
jicksec, as, y lo que dije antes, que está bien largo. Por lo que al ejecutar esta sentencia
veremos que nos devuelve una columna con este título, o sea, con el alias, cuyo valor va a ser el valor del string
Y de igual forma, podemos hacer operaciones aritméticas usando select. Digamos select 11 por 33
Y de igual forma podemos poner un alias. Digamos en este caso multiplicación
Por lo que al ejecutar esta sentencia, veremos que nos devuelve el resultado de esta multiplicación en una columna llamada multiplicación
Ten en cuenta que para estos usos, Select se comportaría digamos como la función print en Python
Ya que nos permitiría imprimir valores y hacer operaciones aritméticas Ojo no estoy diciendo que sea como print en Python
Eso son paradigmas diferentes Y select le da mil vueltas a print Pero para que se entienda el contexto
Ahora, ¿Cómo puedo obtener yo como tal los datos que están en esta base de datos
A través de select Pues bien, empecemos por el más básico Que sería el siguiente
Select, un asterisco Y aquí le metemos una cláusula Que es from
Que con esta le podemos indicar a select en qué tabla va a buscar los datos Que le estemos solicitando
Por ejemplo imaginemos que me quiero subir el ego y quiero ver cu empleados tengo El total de todos Pues para este ejemplo solamente har un select de todos Ten en cuenta que en SQL al igual que en la mayor de los aspectos de la inform
el asterisco es un comodín, que lo que indica en este caso es seleccionar todo. Por lo que prácticamente cuando hacemos un select asterisco
estamos indicando seleccioname todos los datos hallados en todas las columnas. Y ahora, ¿en dónde los tienes que buscar
Pues en la tabla de empleados. Así que pondríamos from empleados. Y finalizamos la cláusula con un punto y coma
Y esto no es obligatorio, puedes hacerlo sin un punto y coma. Pero por buenas prácticas es mejor ponerlo
Adicionalmente, en este caso las instrucciones no son case sensitive Es decir, da igual por ejemplo que ponga select en mayúsculas o en minúsculas
Pero por buenas prácticas, y también para que no se vea horrible Es mejor poner siempre las instrucciones en mayúsculas
Entonces repasemos Si yo hago un select all from empleados Y lo ejecuto
Veremos que me devuelve todos los registros Y todas las columnas Halladas en la tabla de empleados
Pero ahora, digamos que esto es mucha información Y yo quiero filtrarlo un poco Digamos que yo solamente quiero el nombre y el apellido
Pues en este caso en lugar del asterisco pondría select y las columnas que quiero
En este caso nombre y apellido ¿Y esto desde dónde? Pues igualmente de la tabla de empleados
Por lo que al ejecutar esta nueva consulta Solamente nos va a devolver todos los registros que estén en las columnas nombre y apellido
De la tabla de empleados Ahora, ten en cuenta que select también podemos combinarlo
Con otras cláusulas de lenguaje SQL Que ya vimos antes Digamos con la cláusula where
Where si no sabías en inglés significa dónde Aquí aprendes hasta inglés papá Y básicamente actúa como un filtro
Con el que podemos poner una especie de condicional en la consulta para filtrarla aún más
Pero bueno, vamos a la parte práctica. Tenemos la consulta anterior, es decir, traernos el nombre
y el apellido desde la tabla de empleados, que esto nos devolvía todos los nombres de todos los empleados
Pero ¿qué pasa si yo, por ejemplo, no quiero todos los nombres? Sino que únicamente quiero los que sean istas de seguridad
que como recordarás, es un valor que está en la columna de posición y que evidentemente
es un valor que va a tener el empleado si es ista, porque si no, pues no lo tiene. Entonces
¿qué podemos hacer aquí? Pues a esta consulta le podemos añadir un where, Donde le indiquemos que en este caso la columna de posición debe tener un valor igual a ista de seguridad
Y como esto es un string, lo ponemos entre comillas simples. Con lo que conseguimos esta consulta
Que si la traducimos al lenguaje de Latam sería básicamente decirle. Oye compa, mira, tráeme todos los nombres y apellidos de los empleados cuya posición sea ista de seguridad
Si no consigues ninguno, pues no me das nada. Y si consigues alguno, pues ponlos a chambear. Y al ejecutarlo veremos que se aplicó este filtro
Por lo que en este caso únicamente veremos el nombre y el apellido de nuestro empleado
Cuya posición es ista de seguridad. Y si hubiesen más con esta posición, pues saldrán por aquí
Pero en este caso nada más hay uno. Estamos contratando por si te quieres unir. Y obviamente, no hay un límite para usar la cláusula WHERE
Por consecuencia, podemos hacer todos los filtros que queramos. Y para ello podemos apoyarnos, por ejemplo, de operadores lógicos, como AND u OR
Que en este punto entiendo que ya sabes que son, porque te los expliqué en cursos pasados. Te pongo un ejemplo de esto
Digamos que yo quiero ver ahora el nombre y el apellido de mis empleados, cuya posición sea ista de seguridad o cuya especialidad sea criptografía
Por lo que al ejecutar esto obtendremos en este caso los registros de los empleados correspondientes
cuya especialidad sea criptografía o cuya posición sea ista de seguridad. Y como estamos usando un OR, entenderás que los que tengan de especialidad criptografía
no tienen por qué tener a la vez de posición ista de seguridad, ya que estamos pidiéndole uno u otro
Cosa diferente fuera si pusiéramos un AND, que en este caso le estamos diciendo que debe cumplir con una condición y con la otra
Por lo que para que nos devolviese un registro válido en este caso, nuestro empleado deberá tener como valor en la columna especialidad, criptografía
y como valor en la columna posición, ista de seguridad. Si esto estrictamente no se cumple, pues evidentemente no nos dará registro
¿Qué es lo que pasa en este caso? Porque si izamos todos nuestros registros en esta tabla, veremos que ningún empleado cumple con ambas condiciones
Y básicamente de esto se trata el select, con from y con where. Donde con select pedimos qué datos seleccionar
con from decimos desde dónde los vamos a seleccionar y con where le decimos en base a qué los vamos a seleccionar
Y como te digo, estos ejemplos son muy simples. Y evidentemente, como ya te dije, no hay límite
Podemos mezclar muchas más cláusulas Para hacer operaciones más complejas Y tú dirás, ¿qué cláusulas
A lo que yo te respondo, mi amor Las que veremos a continuación Así que continuemos Muy bien, hablemos ahora de las funciones de agregación
Estas básicamente son funciones predefinidas En el lenguaje SQL Las cuales generalmente van a recibir como argumento
Una columna Con la cual van a operar Y nos retornará el valor de dicha operación
Y estas bellezas te van a permitir hacer operaciones Como calcula promedios, encontrar valores mínimos y máximos
Contar elementos y demás Te digo, hay varias funciones de este estilo Pero las que veremos aquí son las principales
Y son las siguientes Count, Zoom, AVG O VG, ¿cómo le quieres decir
Max y Min Max y Min, suena como a nombre de comiquita Empecemos por count
Esta se usa para contar el número de registros Que coinciden con un criterio en específico
O para meramente contar el número de registros totales Pongamos un ejemplo
Digamos que no me bastó con la clase anterior Y quiero seguir aumentando mi ego Por lo que en este caso quiero saber cuántos empleados tengo
Para esto puedo hacer un SELECT De la función COUNT Recuerda que las funciones las llamamos entre paréntesis
Y dentro de este paréntesis le enviamos las columnas con las que va a trabajar Que en este caso le ponemos un asterisco para indicarle que trabaje con todas
Podemos por ejemplo ponerle un alias Digamos total empleados Para que nos devuelva el resultado en una columna llamada s�
¿Y desde dónde va a sacar esta información? Pues de la tabla empleados Al hacer esto verás que nos devuelve una columna
Llamada total empleados Como el alias que pusimos Cuyo valor es 7 Porque en este caso tenemos 7 empleados
Bueno, tenemos, tengo, sumios Ahora, la siguiente función La función sum Que esta se utiliza para calcular la suma total de una columna numérica
Ojo con esto, numérica De un conjunto de registros Y como te digo, viejo, tiene que ser numérico
No podemos sumar strings O sea, ¿cuánto es A más A? A, perdón Pero pongamos un ejemplo
Imaginemos que queremos calcular todo el costo de recuperación De todos los incidentes que hemos recuperado
Pues para esto simplemente haríamos un select Llamaríamos a la función Y entre los paréntesis pondríamos el argumento que le vamos a enviar
Que como ya te dije, es la columna con la que va a trabajar Que en este caso es la columna costo-recuperación, a la cual le podemos meter también un alias, que se
llame costo-total-recuperación. ¿Y de dónde vamos a sacar todo esto? Pues de la tabla
que contiene esta columna, es decir, la tabla incidentes. Por lo que al hacer esto vemos
el total de todos los costos de recuperación de todos los incidentes, y en efecto vemos
como yo soy rico. Siguiente función, AVG. Esta nos permite calcular el valor promedio
de una columna igualmente numérica entre un conjunto de registros, en pocas palabras
es calcular la media, por así decirlo, de todo el conjunto de valores con los que va trabajar. Por ejemplo, digamos que yo
quiero evaluar cuánto tardan mis empleados en realizar un proyecto. Porque si yo noto que uno de mis
empleados no está siendo eficiente, lo mando a conocer a Batista. Y tú dirás, ¿cuál Batista? Pues recoge
tus cosas. Y fuera de mi vista. Y para esto podríamos hacer un select y llamar a la función
abg, donde le enviamos como argumento la columna duración. Y le ponemos un
alias, digamos duración promedio. ¿Y de dónde sacamos esta información? Pues de la tabla
proyectos. Por lo que al hacer esta consulta vemos el promedio. Y en esta ocasión mis empleados
se salvaron de conocer a Batista. Pero sigo atento. Siguiente. Tenemos la función max
y no es still. Esta función se utiliza para encontrar el valor máximo dentro de una columna en específico
Y ya, hace eso simplemente. Por ejemplo, si quisiéramos descubrir cuál ha sido el incidente de seguridad más reciente
que tenemos en nuestra base de datos, podríamos hacer un select enviándole como argumento la columna fecha
donde le pondremos un alias, digamos, incidente más reciente y en qué tabla esta función va a buscar esta columna
Pues de la tabla incidentes porque en la tabla incidentes está la columna fecha. Y al ejecutar esta consulta veremos la fecha más reciente
de un incidente registrada en nuestra base de datos. Y ya por último, tenemos la función min
que es igual a la función max, pero al revés, eso no tuvo sentido. Básicamente, la función min encontrará el valor, pero mínimo, de una columna en específico
O sea, max consigue el máximo, y min consigue el mínimo. Por ejemplo, digamos que yo quiero identificar el proyecto, que sea más antiguo en nuestra base de datos
O sea, lo que hicimos antes, pero en este caso, el más antiguo. Porque evidentemente a nivel numérico será menor
Y digamos en este caso, para tocar otras cláusulas que hemos visto, yo quiero ver el proyecto más antiguo, cuyo estado siga en progreso
Entonces, partiendo de estos requisitos, podría ser un select, donde llame la función min, y como argumento le puedo enviar la columna fecha inicio
Le puedo poner un alias también, digamos proyecto más antiguo. ¿Y de dónde va a sacar esto este compa? Pues de la tabla proyectos
Pero como te dije, yo únicamente quiero ver la fecha del más antiguo, cuyo estado esté en progreso, por lo que puedo ponerle un where
indicándole que en este caso, la columna de estado debe estar en progreso
Y como en progreso es un string, lo pongo entre comillas simples. Y al ejecutar esta consulta, veremos en este caso la fecha de inicio
del proyecto más antiguo, cuyo estado sigue en progreso. Y como puedes apreciar, parece que los empleados no hacen nada
Porque esto lleva tiempo Habrá que decirles algo O les llamamos a Batista Y te digo, hay muchas más funciones
Pero las principales y las que quiero que conozcas son estas Así que con esto explicado, continuemos