Configurar servidor FTP

Para crear un acceso por FTP a una máquina lo primero es abrir el puerto 21 en el router/firewall (el 21 es el puerto por defecto aunque se puede usar otro cambiando la configuración del servicio de FTP). Eso como depende del router/firewall que se este usando, no se explica en este caso.
Lo siguiente es crear el usuario que se va a usar para acceder por FTP. Lo ideal es que sea un usuario sin acceso a la consola y por defecto colocamos como su directorio home el directorio donde se va a acceder por FTP:

useradd -d /DIRECTORIO/FTP -s /bin/false USUARIOFTP

Y le asignamos una contraseña:

passwd USUARIOFTP

Lógicamente, el usuario debe tener permisos de escritura en el directorio si queremos que pueda subir archivos:

chown -R USUARIOFTP /DIRECTORIO/FTP/

Y ahora toca instalar el servidor de FTP, hay muchos pero yo el que he visto más sencillo de instalar es el ProFTPd. Se instala asi:

apt-get install proftpd

Y una vez instalado editamos el fichero de configuración:

nano /etc/proftpd/proftpd.conf

Donde debemos descomentar la línea siguiente para limitar que el usuario solo pueda acceder al su directorio home:

DefaultRoot ~

Al final del fichero añadimos el siguiente bloque para limitar el acceso por FTP solo permitiendo el usuario que hemos creado:

<Limit LOGIN>
AllowUser USUARIOFTP
DenyAll
</Limit>
RequireValidShell off

Y ya para terminar reiniciamos el servicio de ProFTPd para aplicar los cambios:

/etc/init.d/proftpd restart

Ejecutar scripts grandes

Normalmente cuando ejecutamos un script SQL lo podemos hacer directamente abriéndolo con el Manager Studio pero cuando el fichero es grande (en mi caso eran más de 7 gigas), va a ser que no puede con ello así que toca buscar alternativas.
Hay herramientas de terceros que en teoría permiten su ejecución pero lo más sencillo es hacerlo desde una consola de MS-DOS:

sqlcmd -S SERVIDOR -i C:\script.sql

Y por supuesto, si hay que editar un fichero de ese tamaño, lo mejor es usar el Ultraedit

Consulta sobre palabras de una frase

Montando un buscador ha surgido la típica funcionalidad de que si introduces una frase, el cliente quiere que se busque por las palabras sueltas no por la frase. Normalmente lo hago desde PHP/Coldfusion (o lo que sea) creando dinámicamente que query pero buscando soluciones alternativas que pueda ejecutar desde un procedimiento almacenado (sin hacer un exec que queda feo) he encontrado esta posible solución:

declare @terminos varchar(max);
set @terminos = 'zapatos bolsos vestidos bufandas';


declare @cadena table (cadena varchar(500)) 
insert into @cadena values (@terminos)
;WITH Vals AS (
	SELECT  cadena,
		CAST('<d>' + REPLACE(cadena, ' ', '</d><d>') + '</d>' AS XML) XmlColumn
	FROM    @cadena
)

SELECT C.value('.','varchar(max)') palabra
FROM    Vals
CROSS APPLY Vals.XmlColumn.nodes('/d') AS T(C)
where len(C.value('.','varchar(max)')) > 1
-- Este último where es para que solo coja las palabras con longitud superior a un carácter

Y esto lo implementaríamos por ejemplo insertando las palabras sueltas en una tabla que usemos luego para hacer un inner join de la siguiente forma:

declare @palabras table (palabra varchar(500)) 

insert into @palabras
SELECT C.value('.','varchar(max)') palabra
FROM    Vals
CROSS APPLY Vals.XmlColumn.nodes('/d') AS T(C)
where len(C.value('.','varchar(max)')) > 1

-- y la consulta resultante sería asi:
select * from productos p 
inner join @palabras tmp on p.descripcion like '%'+tmp.palabra+'%'