<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>rolandovera.com &#187; Bases De Datos</title>
	<atom:link href="http://www.rolandovera.com/category/bases-de-datos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rolandovera.com</link>
	<description>Un blog de un sysadmin.</description>
	<lastBuildDate>Mon, 09 Jan 2012 21:52:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Forma correcta de sacar un respaldo (backup) en PostgreSQL</title>
		<link>http://www.rolandovera.com/2008/07/09/forma-correcta-de-sacar-un-respaldo-backup-en-postgresql/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=forma-correcta-de-sacar-un-respaldo-backup-en-postgresql</link>
		<comments>http://www.rolandovera.com/2008/07/09/forma-correcta-de-sacar-un-respaldo-backup-en-postgresql/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 19:42:45 +0000</pubDate>
		<dc:creator>Rolando</dc:creator>
				<category><![CDATA[Bases De Datos]]></category>
		<category><![CDATA[backup postgresql]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[respaldo postgresql]]></category>

		<guid isPermaLink="false">http://www.rolandovera.com/?p=248</guid>
		<description><![CDATA[Esta base de datos es una de las mejores, y a mi en particular me gusta mas que MySQL, pero sigue siendo un dolor de cabeza a la hora de hacer respaldos. A continuación les enseñare como hacer respaldos de una manera rápida y sencilla. Con este tipo de respaldo no vamos a perder SP, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rolandovera.com/wp-content/uploads/2008/07/postgresql.jpg"><img class="alignnone size-medium wp-image-249 alignleft" style="float: left;" title="postgresql" src="http://www.rolandovera.com/wp-content/uploads/2008/07/postgresql.jpg" alt="" width="113" height="88" /></a>Esta base de datos es una de las mejores, y a mi en particular me gusta mas que MySQL, pero sigue siendo un dolor de cabeza a la hora de hacer respaldos.</p>
<p>A continuación les enseñare como hacer respaldos de una manera rápida y sencilla. Con este tipo de respaldo no vamos a perder SP, Vistas, tablas, ni nada de data etc.</p>
<p>Vamos hacer de cuenta que la base de datos que queremos hacer respaldo se llama prueba. Yo voy a utilizar el usuario de postgres para trabajar con esto. Pero podrían usar cualquier otro usuario. Yo para &#8220;pasarme&#8221; al usuario postgres ejecuto el siguiente comando como root:</p>
<p>www:/etc# <strong>su postgres</strong><br />
postgres@www:/etc$</p>
<p>Ya siendo usuario postgres no tengo ningún tipo de restricción y puedo ejecutar cualquiera de los comandos mencionados a continuación.</p>
<p>Con el siguiente comando sacaremos respaldo del esquema (schema) de la base de datos:</p>
<p><strong>pg_dump -sv prueba -O &gt; /backup/prueba.schema.sql</strong></p>
<p>Con el siguiente comando sacaremos el repaldo de la DATA de la base de datos:</p>
<p><strong>pg_dump -Fc -f /backup/prueba.data.dump -a &#8211;disable-triggers prueba</strong></p>
<p>Estamos usando las opciones -Fc que significa la F de formato y la c de custom, estamos utilizando el formato custom, para así al momento de restaurar la base de datos en otro server o en otra base de datos se nos hará mas fácil porque vamos a utilizar el comando pg_restore.</p>
<p>Les adjunto un poco mas de información en ingles con respecto al dump de postgreSQL en formato &#8220;custom&#8221;.</p>
<blockquote><p>c      Output  a  custom  archive  suitable for input into pg_restore. This is the<br />
most flexible format in that it allows reordering of loading data  as  well<br />
as object definitions. This format is also compressed by default.</p></blockquote>
<p>La opción -f lo uso para especificar el archivo.</p>
<p>La opción -a especificar que quiero solo exportar la data.</p>
<p>La opción  &#8211;disable-triggers la uso para que no de problemas a la hora de hacer la restauración.</p>
<p>Estos comandos nos crearan dos archivos, uno con el esquema (schema) y otro con la data de la base de datos.</p>
<p>Para restaurar la información haremos lo siguiente.</p>
<p>Vamos escribir el comando <strong>psql y luego enter.</strong></p>
<p><strong>Welcome to psql 8.1.11, the PostgreSQL interactive terminal.</strong></p>
<p><strong>Type:  \copyright for distribution terms<br />
\h for help with SQL commands<br />
\? for help with psql commands<br />
\g or terminate with semicolon to execute query<br />
\q to quit</strong></p>
<p><strong>postgres=# </strong></p>
<p>Ahora ya estando dentro de postgres, voy a crear la base de datos con el siguiente comando:</p>
<p><strong>CREATE DATABASE prueba ENCODING &#8216;UTF8&#8242;;</strong></p>
<blockquote><p>Antes de crear la base de datos verifiquen que tipo de ENCODING usa la base de datos de donde sacaron el respaldo ya que si crean la base de datos con diferente encoding al importar la data el respaldo NO va a funcionar, para saber el encoding de la base de datos lo hacen de la siguiente manera:</p>
<p>psql -l</p>
<p>Y les va a mostrar lo siguiente:</p>
<p>sh-3.1$ psql -l<br />
List of databases<br />
Name    |   Owner   | Encoding<br />
&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8211;<br />
data1 | data1 | SQL_ASCII<br />
data2   | data2    | SQL_ASCII<br />
postgres  | postgres  | SQL_ASCII<br />
template0 | postgres  | SQL_ASCII<br />
template1 | postgres  | SQL_ASCII</p>
<p>El ENCODING de todas las bases de datos en este ejemplo es SQL_ASCII.<strong><br />
</strong></p></blockquote>
<p>luego nos salimos de la consola de postgres con el siguiente comando:</p>
<p><strong>\q y presionamos enter.<br />
</strong></p>
<p>Ya estando de vuela en la consola de sistema, ejecutaremos el siguiente comando:</p>
<p><strong>psql prueba &lt; prueba.schema.sql</strong></p>
<p>Con este comando importaremos el schema en la nueva base de datos.</p>
<p>Ahora con el siguiente comando importaremos toda la data:</p>
<p><strong>pg_restore -a -v -e -Fc -O &#8211;disable-triggers -d prueba prueba.data.dump</strong></p>
<p>Con este comando insertaremos toda la data en la nueva base de datos.</p>
<blockquote><p><strong>Recomendaciones:</strong></p>
<p>En este ejemplo sacamos el respaldo con el usuario postgres, recomiendo sacar el respaldo e importar la base de datos con el usuario propietario de la base de datos. Ya que si insertamos la base de datos en otro server cone l usuario postres, al momento de poner a funcionar el respaldo van a haber problemas con los permisos del usuario, ya que el usuario de la base de datos en el anterior server es juan, el usuario en el respaldo va a ser postgres.</p></blockquote>
<p>Felicitaciones, ha echo un respaldo y ha restaurado una base de datos de postgreSQL, sin perder nada de información me imagino que hay muchas maneras de realizar esto, pero compartí con ustedes la manera como yo hago los respaldos, cualquier comentario o sugerencia es bienvenida.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rolandovera.com/2008/07/09/forma-correcta-de-sacar-un-respaldo-backup-en-postgresql/feed/</wfw:commentRss>
		<slash:comments>65</slash:comments>
		</item>
		<item>
		<title>SQL Injection en Microsoft SQL Server 2000</title>
		<link>http://www.rolandovera.com/2008/05/27/sql-injection-en-microsoft-sql-server-2000/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sql-injection-en-microsoft-sql-server-2000</link>
		<comments>http://www.rolandovera.com/2008/05/27/sql-injection-en-microsoft-sql-server-2000/#comments</comments>
		<pubDate>Tue, 27 May 2008 22:40:31 +0000</pubDate>
		<dc:creator>Rolando</dc:creator>
				<category><![CDATA[Bases De Datos]]></category>
		<category><![CDATA[sql injection]]></category>

		<guid isPermaLink="false">http://www.rolandovera.com/?p=195</guid>
		<description><![CDATA[El día de hoy para mi sorpresa en uno de los sitios en el cual yo administro el servidor, la base de datos específicamente en el contenido de los artículos, les habían sobre escrito con links hacia esta pagina: http://9i5t.cn/a.js Al parecer al entrar a esa pagina alguien usando Internet Explorer se puede contagiar de [...]]]></description>
			<content:encoded><![CDATA[<p>El día de hoy para mi sorpresa en uno de los sitios en el cual yo administro el servidor, la base de datos específicamente en el contenido de los artículos, les habían sobre escrito con links hacia esta pagina:</p>
<p>http://9i5t.cn/a.js</p>
<p>Al parecer al entrar a esa pagina alguien usando Internet Explorer se puede contagiar de un virus, yo la verdad preferí no probar <img src='http://www.rolandovera.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> , pero un amigo entro, y el Mcafee Viruscan le detecto que unos virus habían sido bajados a los archivos temporales del Internet explorer y que los virus los habia elminado. Si entran a la pagina (cosa que no recomiendo si están utilizando Internet Explorer) con mozilla, les saldrá un código de la siguiente manera:</p>
<p>OlOlll=&#8221;(x)&#8221;;OllOlO=&#8221; String&#8221;;OlllOO=&#8221;tion&#8221;;OlOllO=<br />
&#8220;Code(x)}&#8221;;OllOOO=&#8221;Char&#8221;;OlllOl=&#8221;func&#8221;;OllllO=&#8221; l =<br />
&#8220;;OllOOl=&#8221;.from&#8221;;OllOll=&#8221;{return&#8221;;Olllll=&#8221;var&#8221;;</p>
<p>Al buscar en google la palabra http://9i5t.cn/a.js encontré que 220,000 paginas infectadas (aproximadamente), estaban indexadas.</p>
<p>Despues de investigar note que estos hackers chinos estaban utilizando una vulnerabilidad llamada <a href="http://en.wikipedia.org/wiki/SQL_injection" target="_blank">SQL Injection</a> (que no es vieja), con la cual lograban ejecutar comandos en el servidor de sql (ya que por lo general el servicio de sql correo como administrador) y de esta manera lograban actualizar las tablas con la dirección a su pagina. Y lo único que necesitaban era que el puerto 80 (http) estuviera abierto al publico, cosa que todos los sitios lo tienen abierto. Incluso el servidor, que es un Windows 2003 server, tenia todas las actualizaciones al día, y aun así se vio afectado.</p>
<p>Después de hacer unas pruebas, encontré que el sitio era vulnerable a este tipo de comandos.</p>
<p>Por ejemplo en la pagina siguiente:</p>
<p><strong>http://www.sitio.com/categorias/hola.asp?id=277763</strong></p>
<p>Mostraba un articulo completo.</p>
<p>Pero al ponerle el siguiente comando:</p>
<p><strong>http://www.sitio.com/categorias/hola.asp?id=2762</strong><em><span style="text-decoration: underline;"><strong>&#8216; or 1=1&#8211;</strong></span></em></p>
<p>Al ejecutar esto, Microsoft Sql, desplegaba el contenido del articulo con id 2762 y TODA la tabla, esto lo hacia internamente, no lo desplegaba en el navegador. Al hacer esto el servidor se saturaba, y ya no mostraba la pagina. Así que claramente el sitio era vulnerable. Si yo pude ejecutar esto imagínense el sin numero de comandos que alguien familiar con Microsoft SQL podia ejecutar.</p>
<p>Una solución rápida que se le dio a este error, fue modificando el asp, para que solo aceptara números en el string del id, esto se hizo de la siguiente manera:</p>
<p><strong> id_cont = trim(request(&#8220;hola&#8221;))<br />
if not isnumeric(id_cont) then<br />
response.Redirect(&#8220;http://www.sitio.com&#8221;)<br />
response.End()<br />
end if</strong></p>
<p>Esto se agrego dentro de la programacion del .asp.</p>
<p>Con esto, al momento que alguien trate de ejecutar algo, lo va a redireccionar a la pagina.</p>
<p><strong>http://www.sitio.com/categorias/hola.asp?id=2762</strong><em><span style="text-decoration: underline;"><strong>&#8216; or 1=1&#8211;</strong></span></em></p>
<p>Al poner esto en el navegador, con este cambio en el asp, automaticamente redireccionaba a la pagina principal, que era www.sitio.com.</p>
<p>Me imagino que hay otro tipo de soluciones para esto, pero esta fue la que nos ayudo en nuestro caso.</p>
<p>Les recomiendo esta herramienta para revisar sitios muy grandes. O que contienen muchos archivos asp.</p>
<p><a href="http://sqid.rubyforge.org/" target="_blank">http://sqid.rubyforge.org/</a></p>
<p>Este programa corre en linux, y sirve de mucho para probar sitios grandes. Necesitan instalar ruby para que corra este programa.</p>
<p>Tiene un sin numero de opciones, las cuales pueden leer mas aca:</p>
<p><a href="http://carnal0wnage.blogspot.com/2007/07/using-sqid-sql-injection-digger-to-look.html" target="_blank">Sqid Examples</a></p>
<p>Les deseo mucha suerte a los sysadmin, ya que todo el tiempo nuestros servidores estan expuestos a este tipo de vulnerabilidades.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rolandovera.com/2008/05/27/sql-injection-en-microsoft-sql-server-2000/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft SQL 2000 como resolver rapidamente el problema de Orphaned Users</title>
		<link>http://www.rolandovera.com/2008/04/22/microsoft-sql-2000-como-resolver-el-problema-de-orphaned-users/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=microsoft-sql-2000-como-resolver-el-problema-de-orphaned-users</link>
		<comments>http://www.rolandovera.com/2008/04/22/microsoft-sql-2000-como-resolver-el-problema-de-orphaned-users/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 22:37:45 +0000</pubDate>
		<dc:creator>Rolando</dc:creator>
				<category><![CDATA[Bases De Datos]]></category>

		<guid isPermaLink="false">http://www.rolandovera.com/2008/04/22/microsoft-sql-2000-como-resolver-el-problema-de-orphaned-users/</guid>
		<description><![CDATA[Este problema es causado cuando se restaura una base de datos en un server diferente, la restauracion crea el usuario de la base de datos que tenia en el otro server, pero el usuario no tiene permisos para conectarse ni editar la base de datos en el nuevo server. A continuacion les pongo un ejemplo [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rolandovera.com/wp-content/uploads/2008/04/database-administrator1.jpg" alt="database-administrator1.jpg" /></p>
<p>Este problema es causado cuando se restaura una base de datos en un server diferente, la restauracion crea el usuario de la base de datos que tenia en el otro server, pero el usuario no tiene permisos para conectarse ni editar la base de datos en el nuevo server.</p>
<p>A continuacion les pongo un ejemplo de como solucione este problema.</p>
<p>Hice una base de datos llamada prueba, y restaure el archivo prueba.bak hacia esta base de datos.</p>
<p>Esta base de datos tenia un usuario llamado desafio24. Obviamente este usuario no existia en el Microsoft SQL server donde estamos restaurando el backup.</p>
<p>Abri  el Query Analyzer y ejecute este comando:</p>
<p><strong>sp_change_users_login &#8216;update_one&#8217;, &#8216;desafio24&#8242;, &#8216;desafio24&#8242;</strong></p>
<p>Este comando re-linkea el usuario desafio24 de la base de datos restaurada como un usuario que puede hacer login.</p>
<p>Abajo les va a desplegar esto:</p>
<p><strong>The command(s) completed successfully.</strong></p>
<p>Ahora le pueden cambiar la clave a este usuario si es necesario, esto lo hacen con el siguiente comando:</p>
<p><strong>Use master<br />
go<br />
sp_password NULL, &#8216;hola&#8217;, &#8216;desafio24&#8242;</strong></p>
<p>Despues de ejecutar este comando les va a desplegar esto abajo:</p>
<p><strong>Password changed. </strong></p>
<p>Con este comando cambian la clave del login desafio24 a hola.</p>
<p>Despues de esto se podran conectar sin ningun problema a la base de datos, incluso también se podrán conectar con el Microsoft Sql Manangement Studio 2005.</p>
<p>Esto es una solucion rapida al encontrarse en una emergencia que necesitan restaurar rápidamente una base de datos y acceso a la misma.</p>
<p>Hay otras maneras de  solucionar esto, pero esta es una de las mas rápidas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rolandovera.com/2008/04/22/microsoft-sql-2000-como-resolver-el-problema-de-orphaned-users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aumentando el numero de conexiones maximas a Mysql</title>
		<link>http://www.rolandovera.com/2008/04/22/aumentando-el-numero-de-conexiones-maximas-a-mysql/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=aumentando-el-numero-de-conexiones-maximas-a-mysql</link>
		<comments>http://www.rolandovera.com/2008/04/22/aumentando-el-numero-de-conexiones-maximas-a-mysql/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 17:48:03 +0000</pubDate>
		<dc:creator>Rolando</dc:creator>
				<category><![CDATA[Bases De Datos]]></category>

		<guid isPermaLink="false">http://www.rolandovera.com/2008/04/22/aumentando-el-numero-de-conexiones-maximas-a-mysql/</guid>
		<description><![CDATA[  Cualquier sysadmin que maneja algún servidor web con mysql, se ha encontrado con el siguiente mensaje de error de Mysql: Too Many Connections Una solución es aumentar el numero de conexiones de Mysql por un numero mas alto. Esto se puede hacer en el siguiente archivo: /etc/mysql/my.cnf Al abrirlo van a encontrar lo siguiente: [...]]]></description>
			<content:encoded><![CDATA[<p> <img src="http://www.rolandovera.com/wp-content/uploads/2008/04/database-administrator1.jpg" alt="database-administrator1.jpg" /></p>
<p>Cualquier sysadmin que maneja algún servidor web con mysql, se ha encontrado con el siguiente mensaje de error de Mysql:</p>
<p>Too Many Connections</p>
<p>Una solución es aumentar el numero de conexiones de Mysql por un numero mas alto.</p>
<p>Esto se puede hacer en el siguiente archivo:</p>
<p>/etc/mysql/my.cnf</p>
<p>Al abrirlo van a encontrar lo siguiente:</p>
<p>max_connections         = 100</p>
<p>Puede estar comentado, si es necesario descomentenlo y auméntenle el numero, siempre teniendo en cuenta la capacidad del servidor.</p>
<p>Luego de cambiar este parámetro, pueden reiniciar el servicio de mysql</p>
<p>/etc/init.d/mysql restart</p>
<p>Pueden comprobar si realmente hicieron bien los cambios entrando a la linea de comando de mysql, esto por lo general lo hacen escribiendo mysql y luego enter, claro esto estando como root. O si no les va a pedir usuario y contraseña.</p>
<p>Ya en la linea de comando de mysql escriben lo siguiente:</p>
<p>mysql&gt; show variables;</p>
<p>Ahí les va a desplegar como están configuradas todas las variables de mysql.</p>
<p>Para este ejemplo subí el numero de conexiones máximas de mysql a 1000, y en el resultado del comando show variables me salio lo siguiente:</p>
<p>| max_connect_errors              | 10                          |<br />
| max_connections                 | 1000                        |<br />
| max_delayed_threads             | 20                          |<br />
| max_error_count                 | 64                          |</p>
<p>Bueno, con esto confirmamos que tenemos 1000 conexiones como nuevo limite de mysql.</p>
<p>Otro punto que he notado, es que al subirle las conexiones maximas a mysql, sigue dando el error, de Too Many Connections.</p>
<p>Este error sucede con servidores con alto trafico, encontré una manera de evitar esto, sin afectar tanto el performance del sitio, incluso puede tener hasta mejor rendimiento. Siempre antes de hacer este cambio hablen con el programador de la pagina para estar seguro que no le afecte en algo.</p>
<p>En el archivo /etc/php5/apache/php.ini, van a encontrar los siguientes parametros:</p>
<p>[MySQL]<br />
; Allow or prevent persistent links.<br />
mysql.allow_persistent = On</p>
<p>Yo lo pongo en off,</p>
<p>[MySQL]<br />
; Allow or prevent persistent links.<br />
mysql.allow_persistent = Off</p>
<p>Tambien edito el archivo /etc/mysql/my.cnf</p>
<p>Y habilito la siguiente variable:</p>
<p><span class="bluesaint_postbit"> thread_cache = 16</span></p>
<p>Con esto ya no me siguio dando el error ya que no deja conexiones persistentes abiertas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rolandovera.com/2008/04/22/aumentando-el-numero-de-conexiones-maximas-a-mysql/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

