Conocer nuestra IP externa desde línea de comandos en Windows, usando PowerShell

En el pasado vimos cómo podíamos descubrir nuestra IP externa desde línea de comandos en Linux, sirviéndonos tanto de cURL como del comando wget. Como ahora ya todos sabéis que soy un apaniaguado del Tito Bill vamos a ver cómo hacerlo con el PowerShell de Microsoft.

Como siempre, cuando se trata de la IP externa, tenemos que recurrir a un servicio web externo. Hay un buen montón de opciones para esto, pero por comodidad (comodidad para mí, porque ya tengo las pruebas hechas con ese) recurriremos a https://api.ipify.org

En PowerShell podemos usar el cmdlt Invoke-WebRequest para lanzar peticiones http y https a una web y recoger su respuesta. Si llamamos al api que os ponía arriba obtendremos nuestra IP.

Invoke-WebRequest -uri "https://api.ipify.org/"

¿Y ya está? Pues no, porque eso nos devolverá como texto plano además de la IP el status de la respuesta y las cabeceras, por lo que aunque podemos leer la IP sería incómodo trabajar con ella. Pero por suerte el cmdlt nos permite filtrar y obtener solo el valor que nos interesa. Tal que así:

(Invoke-WebRequest -uri "https://api.ipify.org").content

De esa forma sí que obtendríamos solo la línea con el valor de la IP, ya que accedemos únicamente al contenido de la respuesta, al valor de content. Si quisiéramos meter el valor de la IP en una variable para trabajar con un script podríamos hacerlo tal que así:

$miDirIP = (Invoke-WebRequest -uri "https://api.ipify.org/").Content

Spyware ¿qué es? ¿cómo nos protegemos?

Está la prensa española hablando mucho de spyware estos días, primero por el espionaje a políticos catalanes de ideología independentista a través del software Pegasus o de otros programas de la empresa Candiru denunciado por la asociación canadiense Citizen Labs, después porque el propio gobierno central haya denunciado que los teléfonos de la ministra de Defensa y del propio presidente han sido también espiados a través de la conocida aplicación de NSO. Aquí no vamos a analizar el caso, que ya hay mucha gente hablando del tema y mejor informada que yo, sino que nos vamos a hablar de lo básico sobre software espía: definición y cómo minimizar el riesgo.

¿Qué es un spyware?

Cuando hablamos de spyware hablamos de una tecnología, un código malicioso que se usa para extraer datos de un sistema de información (ordenador, red de ordenadores, teléfono, tablet…) sin el consentimiento ni conocimiento de sus usuarios. Puede usarse para robar contraseñas de distintas cuentas, credenciales de acceso a servicios en la nube, datos bancarios, correos electrónicos, ficheros almacenados, cookies de navegación… en fin, en general cualquier tipo de información que pase por el equipo infectado. El spyware recopilará información que se descargue o se genere en el dispositivo y la enviará después a un dominio que pertenezca al atacante para que este pueda analizarla. Dado que si analizamos el tráfico de nuestra red podríamos detectar la infección si vemos un tráfico inusual hacia una web extraña, estos dominios suelen estar «camuflados» con nombres similares a los de empresas legítimas o con nombres que sugieran que son páginas inocuas, además es habitual que se reparta el envío de tráfico entre varios dominios para que el volumen de información enviado no sea llamativo.

¿Quién se sirve de este tipo de software? Pues cualquiera que tenga la intención de espiar a alguien, esto abarca desde ciberdelincuentes hasta fuerzas de seguridad, pasando por gobiernos, servicios de inteligencia e incluso medios de comunicación o empresas. Desde el saqueo de cuentas a través de banca móvil a la estrategia geopolítica, pasando por el espionaje industrial, se han detectado este tipo de ataques en muchos y diversos casos. Los objetivos del espionaje pueden ser tanto empresas como gobiernos, instituciones o personas particulares.

¿Es ilegal su uso? Creo que legalmente en España estaría en el mismo supuesto legal que las escuchas telefónicas, podría ser autorizado por un juez en determinados supuestos para una investigación criminal, al menos es lo que interpreto leyendo esta circular de la Fiscalía General del Estado, de 2019 que hace referencia a las modificaciones en la Ley de Enjuiciamiento Criminal de 2015. Es evidente que cuanto menos control público exista sobre un gobierno, cuanta menos separación de poderes exista en un estado, más podrá este abusar de estas aplicaciones.

¿Cómo nos protegemos?

Bueno, si recordáis las entradas sobre apps maliciosas, sobre rogueware o sobre distintos tipos de troyanos (que son tres de las formas en las que nuestro dispositivo puede acabar infectado) hay varios puntos a seguir:

  • Tener nuestro software actualizado. Si vemos artículos técnicos hablando sobre Pegasus una de las cosas que comprobaremos es que se servía de vulnerabilidades de iOS, Android o Whatsapp que fueron parcheadas posteriormente, por lo que es fundamental mantener las actualizaciones al día.
  • Revisar los permisos de las aplicaciones. A veces el spyware puede estar escondido en una aplicación que nos hemos descargado pensando que sirve para otra cosa, es importante comprobar que los permisos que pide la aplicación al instalarse sean coherentes con el uso que se le va a dar. Por ejemplo, si descargamos un app que nos de la predicción del tiempo atmosférico es normal que pida permisos sobre nuestra ubicación (para darnos la predicción del sitio en el que nos econtremos), pero debería alarmanos que nos los pida, por ejemplo, sobre nuestra lista de contactos.
  • Instalar un app que nos ayude a gestionar la seguridad. Yo siempre recomiendo usar la aplicación de seguridad Conan, del CCN.
  • Ojo con las cosas que descargamos, hay que comprobar siempre que vengan de una fuente legítima. Como también se ha visto en el caso Pegasus, se utilizaban ficheros PDF infectados para ejecutar remotamente código en el dispositivo que instalaba el software espía.
  • Analizar nuestro tráfico de red. Esto ya es para usuarios avanzados o profesionales, revisar el tráfico de la red y comprobar con qué dominios se comunican puede ayudarnos a descubrir un software espía oculto en algún equipo.
  • Reiniciar el teléfono regularmente. Aunque parezca una chorrada tiene su sentido. Según investigadores de la empresa de antivirus Kaspersky el reinicio regular del dispositivo dificulta el espionaje ¿Por qué? Pues porque según parece los más sofisticados spywares (ahora sí que hablamos de Pegasus o de otras herramientas millonarias) que son capaces de infectar dispositivos con técnicas «0-click» (es decir, que no requieren de una acción concreta del usuario) no instalan nada en el dispositivo para reducir su rastro, sino que se cargan en la memoria en tiempo de ejecución. Esto implica que si el teléfono se apaga ese código malicioso desaparece y el atacante tendría que volver a infectar el dispositivo para volver a espiarlo.
  • Repensar las políticas BYOD. Hace unos años desde distintas webs dedicadas a economía y negocios se nos decía que los teléfonos corporativos estaban «muertos«, que ahora lo que se llevaba era el bring your own device, es decir, que cada uno se traiga al trabajo su propio dispositivo. Lo que se vendía como una forma de mejorar la comodidad del usuario y su «libertad» (palabra multiuosos para múltiples estafas), y que realmente no era más que una forma de buscar que las empresas ahorrasen en la compra de dispositivos, ha acabado por convertirse en uno de los eslabones más débiles de la ciberseguridad empresarial. Es otra de las cosas que hemos visto en el asunto Pegasus: los teléfonos de cargos públicos se utilizaban como si fuesen personales, instalaban y descargaban más o menos lo que querían y no había unas reglas de seguridad rígidas al respecto de su uso. También hay que decir que en el caso de las últimas versiones del polémico y ahora popular software de NSO no era necesario que el atacado descargase nada, el atacante podía infectar el dispositivo sin que el usuario participase, pero en la mayoría de spywares sí suele infectarse el dispositivo a través de algún malware introducido mediante phishing.

Todos estos consejos nunca nos garantizarán una protección total (puede que nos encontremos con un spyware que explote una vulnerabilidad todavía no solucionada y que incluso permita ataques del tipo «0-click» antes mencionados, o que no sea detectable por el software antivirus por ser todavía muy nuevo), pero sí que nos pueden ayudar a minimizar el riesgo de ser atacados. Siendo realistas, es poco probable que algún servicio secreto o gobierno tenga interés en espiar a un ciudadano medio que no tenga un cargo político, pero sí es cierto que cualquiera puede ser víctima de un ataque que intente robar sus datos bancarios o incluso, en según qué profesiones, datos relativos a su trabajo, como por ejemplo en casos de espionaje industrial, o en el espionaje a periodistas de investigación del que se han reportado múltiples ejemplos. Ante los más modernos spywares, los que se venden como un servicio por el que se cobran millones, es complicado y a veces hasta imposible defenderse (por eso se pagan millones), pero hay muchos otros más baratos y usados por delincuentes de todo tipo contra los que podemos estar más seguros teniendo un poco de cuidado.

Cómo descargar nuestros datos de Whatsapp

En su momento habíamos visto cómo descargar nuestros datos de Facebook, Twitter y Linkedin o como ver todas nuestras búsquedas por voz en Google. Hoy vamos a ver cómo descargar los datos que Whatsapp tiene sobre nosotros.

El primer paso será abrir Whatsapp en nuestro teléfono, ir a Ajustes pulsando el icono de menú (tres puntos que están situados en la parte superior derecha de la pantalla principal de Whatsapp) y allí a Cuenta. Una vez estemos en esa pantalla pulsamos Solicitar info. de mi cuenta.

Una vez estemos en esta pantalla pusamos en Solicitar Informe. Esa pantalla ya nos informará de que el envío tardará un tiempo que oscila entre varias horas y un par de días, además no incluirá las conversaciones o imágenes (eso está en la copia de seguridad) sino los datos que ha acumulado sobre nosotros.

Cuando nuestro informe esté listo recibiremos una notificación de Whatsapp diciendo «El informe ya está disponible» y volviendo a Ajustes->Cuenta->Solicitar Info. De Mi Cuenta podremos ver ahora una opción que es Descargar Informe. Pulsando ahí podremos bajarnos un fichero comprimido en formato zip que incuirá archivos html y json con nuestros datos. Estos ficheros tendremos que abrirlos con otra aplicación, por ejemplo descargándolos en nuestro pc, ya que no podremos verlos dentro de la propia aplicación de Whatsapp.

Operadores de búsqueda en DuckDuckGo

Que Google sigue siendo el buscador más utilizado hoy por hoy es algo que no vamos a discutir, como tampoco discutiré que habitualmente es el que nos ofrece los resultados más relevantes para nuestra búsqueda, en gran parte por la cantidad de datos que ha recopilado durante años sobre nuestros hábitos de navegación, ubicación geográfica, etc. Esto no quiere decir que el resto de buscadores no sean útiles o válidos: ya sea por privacidad en algunos casos, porque estemos investigando a una persona u organización, porque Google no nos haya dado un resultado satisfactorio en nuestra búsqueda… muchos veces echamos mano de otros buscadores como Bing, DuckDuckGo, Yandex, Startpage o Baidu.

Si eres una persona habituada a hacer un uso de Google avanzado sabrás que hay ciertos operadores que te permitirán afinar más tu búsqueda. La mayoría de estos operadores funcionan igual en Bing, Yandex, Baidu y, lógicamente, Startpage (ya que este buscador lo que hace es buscar en Google enmascarando al usuario). En DuckDuckGo en cambio la cosa es un poco distinta. Veamos unos ejemplos:

  • Coches motos: si buscamos estos dos términos así, tal cual, nos dará resultados sobre coches y sobre motos.
  • «coches y motos»: en cambio si buscamos así entre comillas, al igual que pasaría en Google nos devuelve resultados que contengan la frase exacta «coches y motos».
  • Coches +motos: con el operador + junto a uno de los términos lo que haremos será dar más peso a ese término en la búsqueda. Eeste ejemplo devolvería más resultados sobre motos que sobre coches.
  • Coches -motos: con el operador junto a uno de los términos lo que haremos será excluir o dar menos peso a ese término en la búsqueda. Este ejemplo principalmente devolverá resultados sobre coches obviando las motos.
  • Alumnos filetype:pdf : en este caso nos devuelve todos los ficheros PDF que encuentre relativos al término de búsqueda (para el ejemplo, Alumnos). Podemos buscar ficheros con extensión PDF, doc, docx, xls, xlsx, ppt, pptx, html
  • Alumnos site:webdelinstituto.com : busca el término Alumnos, pero solo dentro del dominio que le hemos definido.
  • Alumnos -site:webdelinstituto.com : busca el término Alumnos, pero en este caso excluye los que pertenezcan al dominio que le definamos.
  • intitle:Alumnos : busca páginas que tengan el término Alumnos en el título.
  • inurl:Alumnos : busca páginas que tengan el término Alumnos en su URL.
  • !a camiseta: el operador ! nos permite invocar lo que DuckDuckGo llama «bang«, básicamente lo que hace es devolvernos los resultados de un motor de búsqueda externo directamente. En el ejemplo hemos usado !a, en ese caso devolverá los resultados del motor de búsqueda de Amazon para ese término (es decir, camisetas que estén a la venta en amazon). Si por ejemplo buscamos !w Tesla nos devolverá los resultados del motor de búsqueda de Wikipedia para el término Tesla. También podríamos usar !yelp, !ebay o !wa (este último para Wolfram Alpha). Hay como 13.000 términos de búsqueda, que podéis consultar aquí (he solicitado que hubiera un !donnierock… pero no les ha convencido de momento).
  • !safeon o !safeoff: añadiendo esto al final de tu búsqueda puedes habilitar o deshabilitar el modo de búsqueda segura.

Crear una tabla HTML con cabecera fija, usando CSS3

Si bien los elementos table suenan a cosa del pasado, a aquellos tiempos en los que todo se hacía con tablas y de vez en cuando algo de flash o similar, todavía siguen utilizándose tablas en el mundo de la programación y diseño web, ya no como elemento central y básico de la maquetación, pero sí para por ejemplo presentar datos en ese formato de filas/columnas.

Si tenemos una tabla muy larga la solución tradicional ha sido siempre la paginación, que con el tiempo fue sustituída por elementos que van insertando nuevas filas de forma asíncrona mientras hacemos scroll. En estos casos puede pasar que hayamos bajado mucho, la cabecera ya no esté visible y no tengamos muy claro a qué corresponde cada columna. Una solución podría ser repetir la cabecera cada x filas, pero se puede hacer visualmente incómodo. Otra posibilidad es hacer fijas estas cabeceras de forma que siempre estén visibles en pantalla y bajen mientras hacemos scroll.

Parece que lo lo lógico sería que pudiésemos hacer fijos los elementos thead o tr, ya que queremos que toda la línea quede fijada, pero aunque nos parezca lo elemental no será posible. Para fijar un elemento de esta forma tenemos que ponerle position:relative y esta característica no se aplica a esos elementos, esto implica que tendremos que usarlo obligatoriamente sobre las celdas, sobre los elementos th o td.

Supongamos que tenemos una tabla como esta (bueno, con cientos de registros para que tenga sentido la cabecera fija):

<table>
  <thead>
    <tr>
       <th>Nombre</th>
       <th>Edad</th>
       <th>Salario</th>
       <th>Rango</th>
       <th>Area</th>
     </tr>
    </thead>
   <tbody>
    <tr>
       <td>Manuela Z.</td>
       <td>43</td>
       <td>24000</td>
       <td>Analista</td>
       <td>Big Data</td>
     </tr>
  </tbody>
</table>

Si queremos fijar la cabecera el CSS, lo más básico posible, sería tal que así:

table {
  position: relative;
  border-collapse: collapse; 
}
th, td {
  padding: 6%;
}

th {  
  position: sticky;
  top: 0; 
}

Hay tres puntos clave en ese CSS: el position:relative de la tabla, el position:sticky del elemento th y la posición top:0 también del elemento th. De esta forma le decimos que todas las celdas de la cabecera se queden fijas en la parte superior de la tabla, así al bajar el scroll estas bajarán con él.

Linux: matar procesos usando Kill, Pkill y Killall

Linux nos da tres opciones para matar procesos desde el terminal: kill, pkill y killall.

Antes de ver los tres comandos es importante recordad un punto: un usuario normal solo puede matar sus procesos, no los procesos del sistema o los de otro usuario. Un usuario root en cambio sí puede matar cualquier proceso, tanto del sistema como de otro. Realmente, a pesar de sus nombres, estos tres comandos no están pensados exclusivamente para matar procesos, sino que les pueden enviar todo tipo de señales, aunque sí es cierto que matar procesos es el comportamiento por defecto.

El comando kill nos permite matar un proceso identificándolo por su número identificador (PID), la sintaxis básica es kill -señal PID. El valor de la señal varía entre 64 posibilidades, siendo las que permiten matar procesos estas tres: SIGHUP (que se abrevia también con el valor numerico 1), SIGKILL(que se abrevia con el valor numérico 9) o SIGTERM(que se abrevia con el valor numérico 15). Si no ponemos ningún valor el tomado por defecto será 15, que es el más seguro pues no permite que se mate un proceso que esté en ejecución sino que espera a que termine y lo mata en ese momento, mientras que el valor 9 sería el más inseguro y contundente, mata al proceso incluso aunque esté ocupado. En el ejemplo siguiente veremos como matar un proceso que, por ejemplo, tenga el id 2015, primero con el valor por defecto y luego con la opción -9 o SIGKILL (las dos últimas sería la misma instrucción pero con distinta sintaxis):

kill 2015
kill -SIGKILL 2015
kill -9 2015

También podemos matar varios procesos en la misma instrucción. Imaginemos que queremos matar los procesos 2015, 2022 y 3049, solo tenemos que listarlos tras la instrucción kill separados por un espacio:

kill 2015 2022 3049

Si no queremos estar listando los procesos para poder ver sus PID podemos también matar un proceso por su nombre. Eso lo puedes hacer con el comando killall, que lo que hará será matar todos los procesos que coincidan con el nombre del comando. Imagina que quieres matar el proceso de mysql en tu servidor Linux, de esta forma lo harías, pero ojo porque si tienes varias instancias las mataría todas. Las señales para killall son distintas de las de kill, puedes listarlas ejecutando killall -l aunque coincide que el valor -9 también es el que podemos usar para matar el proceso de forma forzosa.

killall -9 mysql

Finalmente nos queda pkill, un comando que fue creado originalmente para el sistema operativo Solaris y cuyo funcionamiento es similar al de killall, la diferencia es que en este caso no necesitamos saber todo el nombre del proceso pues podemos usar exprexiones regulares para definir qué proceso queremos parar. Igual que en el ejemplo anterior veamos cómo terminaríamos el proceso de mysql, con el parámetro -e para que la consola nos informe de que lo ha eliminado.

pkill -e mysql

Exportar datos de PostgreSQL a un fichero CSV

En algún momento ya habíamos hablado por aquí del formato CSV (comma separated values), un estándar para compartir información mecánicamente legible que, a pesar de algunas limitaciones con la codificación de caracteres, es bastante popular pues, por ejemplo, nos permite pasar datos de un sistema gestor de bases de datos a una hoja de cálculo o viceversa.

El sistema gestor de bases de datos PostgreSQL nos permite exportar datos a CSV de forma muy sencilla, y además tenemos dos posibilidades: Exportar una tabla entera o exportar el resultado de una consulta.

El comando básicamente sería COPY loquesea TO ficherodesalida DELIMITER ‘caracterdelimitador’ CSV HEADER; siendo el caracter delimitador generalmente una coma, pero puedes cambiarlo por otro si lo necesitas para tu exportación (puede darse el caso de que los datos que exportes tengan textos con coma, por lo que igual te interesa un caracter más exótico). El loquesea del ejemplo sería o el nombre de una tabla o una consulta, mientras que ficherodesalida sería la ruta donde queremos que se cree nuestro CSV.

Veamos dos ejemplos. Imaginemos que queremos expotar todos los datos de una tabla que se llama Pacientes:

COPY Pacientes TO 'Users/Donato/Documents/Pacientes.csv' DELIMITER ',' CSV HEADER;

Esa instrucción generaría un fichero con el nombre que le hemos definido en la ruta que le hemos ordenado, conteniendo todos los valores de la tabla pacientes separados por comas. Ahora imaginemos que solo queremos los nombres y apellidos de los pacientes del año 2021 (tenemos un campo con el año en el que se dieron de alta), podríamos exportarlos usando una consulta:

COPY (Select Nombre, Apellidos from Pacientes where Alta = 2021) TO 'Users/Donato/Documents/Pacientes.csv' DELIMITER ',' CSV HEADER;

De esta forma exportaríamos solo esos datos que nos interesan, filtrados a través de esa consulta. Ahora podríamos abrir esos datos en Excel, Googl Sheet o LibreOffice Math, por ejemplo.

Generar un fichero de EXCEL con ASP

Una entrada rápida: queremos que una página ASP en lugar de mostrarnos la información en el navegador lo que haga sea generar un fichero de EXCEL y que se descargue en nuestro equipo ¿Es posible? Sí.

Solo necesitamos añadir dos cabeceras al inicio del documento:

Response.ContentType="application/vnd.ms-excel"
Response.AddHeader "Content-Disposition", "attachment; filename=NombreFichero.xls"

Añadir un selector desplegable de valores en una celda de la hoja de cálculo de Google Drive.

Si no hace mucho veíamos cómo obtener una lista de valores únicos en la hoja de cálculo de Google Drive hoy vamos a ver cómo crear un selector de valores desplegable en una celda.

Lo primero es ir al menú de la cabecera, pulsar sobre Datos y en el menú que desplegará elegir Validación de Datos. Eso nos abrirá una ventana como esta:

En criterios tenemos varias opciones: fecha, números… pero en este caso nos interesan dos: Lista a partir de un intervalo y Lista de Elementos, ya que ambas nos darán como resultado el selector desplegable de valores que queremos.

La primera opción nos permitirá elegir los valores contenidos en un intervalo de celdas, por ejemplo A1:A5, y nos mostrará como opciones en el desplegable los valores únicos (eliminará las duplicaciones) contenidos en ese intervalo. La segunda opcion nos permite definir manualmente una lista de valores, que irán separados por comas. Es importante que marquéis la opción Mostrar la lista desplegable de la Celda para que de esa forma muestre el desplegable, si no lo que hará será dejaros escribir y mostrará un aviso o no permitirá insertar el valor, según lo que elijamos en la opción Si los datos no son válidos. Si queréis que solo puedan elegir valores del desplegable y no poder meterlos manualmente en esa opción debéis marcar el valor Rechazar Entrada.

PostgreSQL: Instrucciones básicas de gestión de tablas

Una entrada básica de SQL ¿Cuáles son las instrucciones básicas de gestión de tablas en el SGBD PostgreSQL? Veámoslas:

Crear tabla (para el ejemplo crearemos una tabla de de tres columnas, con un id autonumérico, una columna de texto que no admite nulos y una columna para números decimales con un valor por defecto de 0):

CREATE TABLE t (
  id SERIAL PRIMARY KEY,
  columna1 VARCHAR NOT NULL,
  columna2 NUMERIC(10,2) DEFAULT 0
);

Para borrar una tabla tenemos dos opciones, la primera de ella será hacerlo con el parámetro RESTRICT o sin ningún parámetro, pues esta es la opción por defecto. Si hay objetos que dependan de esa tabla, como vistas o claves externas, no borrará la tabla y nos devolverá un mensaje de error informándonos:

DROP TABLE laTablaQueSea RESTRICT;

La otra opción es borrar en casacada, con el parámetro CASCADE. En este caso borra la tabla y todos los objetos que dependan de la misma.

DROP TABLE laTablaQueSea CASCADE

Si lo que queremos es añadir una columna entonces tenemos que usar ALTER TABLE seguida de la instrucción ADD COLUMN especificando el nombre de columna, el tipo de datos y las restricciones que se aplicarán sobre la misma.

ALTER TABLE laTablaQueSea
ADD COLUMN nombreDeColumna tipoDeDatos constraint;

Si queremos añadir varias columnas solo tenemos que repetir la instrucción ADD COLUMN separada por comas:

ALTER TABLE laTablaQueSea
ADD COLUMN nombreDeColumna tipoDeDatos constraint,
ADD COLUMN nombreDeColumna2 tipoDeDatos constraint,
ADD COLUMN nombreDeColumna3 tipoDeDatos constraint;

En cambio si queremos borrar una columna tenemos que usar DROP COLUMN seguido del nombre de la columna:

ALTER TABLE laTablaQueSea DROP COLUMN nombreDeColumna;

Para deshabilitar los triggers vinculados a una tabla tenemos que usar también ALTER TABLE:

ALTER TABLE laTablaQueSea DISABLE TRIGGER ALL;

Para volver a habilitar estos triggers sería lo mismo pero con el parámetro ENABLE:

ALTER TABLE laTablaQueSea ENABLE TRIGGER ALL;

Para añadir alguna restricción a la tabla también usamos ALTER TABLE, en ese caso seguido de ADD y de la restricción que sea.

ALTER TABLE laTablaQueSea ADD laRestriccionQueQuieras;

Para borrar una restricción sobre una tabla utilizamos ALTER TABLE, pero ahora con DROP:

ALTER TABLE laTablaQueSea DROP laRestriccionQueQuieras;

Para renombrar una tabla tenemos que usar RENAME después del ALTER TABLE:

ALTER TABLE laTablaQueSea RENAME TO otroNombreDeTabla;

Y para renombrar una columna es similar:

ALTER TABLE laTablaQueSea RENAME columna1 TO columna2 ;

Finalmente si queremos borrar todos los datos de una tabla sin borrar la tabla, nuestra opción es la instrucción TRUNCATE TABLE:

TRUNCATE TABLE laTablaQueSea CASCADE;