<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.ecured.cu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yosbanyequipoprovincialgrm</id>
	<title>EcuRed - Contribuciones del colaborador [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.ecured.cu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yosbanyequipoprovincialgrm"/>
	<link rel="alternate" type="text/html" href="https://www.ecured.cu/Especial:Contribuciones/Yosbanyequipoprovincialgrm"/>
	<updated>2026-04-16T07:14:03Z</updated>
	<subtitle>Contribuciones del colaborador</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://www.ecured.cu/index.php?title=PRADO_(Aplicaci%C3%B3n_web)&amp;diff=1242323</id>
		<title>PRADO (Aplicación web)</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=PRADO_(Aplicaci%C3%B3n_web)&amp;diff=1242323"/>
		<updated>2011-12-06T18:26:32Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Normalizar}}&lt;br /&gt;
{{Ficha Software&lt;br /&gt;
|nombre=Prado&lt;br /&gt;
|familia= Frameworks PHP&lt;br /&gt;
|imagen=Prado_framework_php.jpg&lt;br /&gt;
|modelo de desarrollo= MVC&lt;br /&gt;
|género= Programación&lt;br /&gt;
|sistemas operativos=Multiplataforma&lt;br /&gt;
}} &lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
'''PRADO''' es un [[framework]] [[PHP]] o [[capa de programación]] basada en [[componentes]] y [[programación por eventos]], para la implementación de aplicaciones Web en [[PHP 5]]. [[PRADO]] (PHP Rapid Application Development Object-oriented) significa en español Desarrollo Rápido de Aplicaciones con [[Programación Orientada a Objetos]] en PHP.&lt;br /&gt;
==Historia==&lt;br /&gt;
La creación original de PRADO vino de [[Apache]] Tapestry. Para el diseño y la ejecución, se tomaron ideas de [[Borland Delphi]] y [[Microsoft ASP.NET]]. La primera versión de PRADO salió en junio de 2004, escrita en [[PHP 4]]. Impulsado por el concurso de codificación de [[Zend PHP 5]], PRADO fue reescrito en PHP 5. PRADO ganó el gran premio en el concurso Zend, ganando el más alto de votos del público y los jueces del panel.&lt;br /&gt;
PRADO comenzó a ser alojado en SourceForge en agosto de 2004 como un proyecto de código abierto. Con el fantástico apoyo del equipo de desarrolladores PRADO y usuarios PRADO, evolucionó a la versión 2,0 a mediados de 2005. En esta versión, Wei Zhuo contribuyó en PRADO con el excelente I18N y L10N apoyo. &lt;br /&gt;
En mayo de 2005, se decidió recodificar por completo el [[framework]] PRADO para resolver algunos elementos que se encuentraban en la versión 2.0 y para actualizarse con respecto a algunas geniales características de [[Microsoft ASP.NET]] 2.0. Después de casi un año de arduo trabajo con más de 50.000 líneas de nuevo código, la versión 3.0 fue finalmente puesta a disposición en abril de 2006. &lt;br /&gt;
A partir de la versión 3.0, se llevan a cabo importantes esfuerzos para asegurar la calidad y la estabilidad de PRADO. Si se dice PRADO v2.x y v1.x son prueba de concepto de trabajo, se puede decir que PRADO 3.x ha crecido a un proyecto que es adecuado para un negocio serio en el [[desarrollo de aplicaciones]].&lt;br /&gt;
==Objetivo==&lt;br /&gt;
Su objetivo principal es aprovechar al máximo la [[reutilización de código]] Web. No solamente es reusable el propio código, sino el de otros programadores de un modo fácil, evitando el esfuerzo de reimplementar lo que ya está hecho; disminuye notablemente el tiempo de desarrollo.&lt;br /&gt;
PRADO cuenta con un [[protocolo]] para crear y usar componentes para la construcción de aplicaciones Web. Un componente es una pieza de un programa que es autocontenido y puede ser reutilizado con una mínima personalización del mismo.&lt;br /&gt;
 &lt;br /&gt;
Para facilitar el uso de componentes, PRADO incluye el paradigma de la [[programación dirigida por eventos]] ([[event-driven]]) que permite la delegación de comportamientos extensibles a los componentes. Las acciones de los usuarios finales, tales como hacer clic en un botón de un formulario, son capturados como eventos en el lado del servidor (server events). A los eventos se deben enlazar métodos o funciones, de modo que al ejecutarse los eventos, estos sean invocados automáticamente. Comparado con la programación Web tradicional en la cual los desarrolladores tienen que tratar directamente con los métodos POST y GET, la programación dirigida por eventos ayuda a los desarrolladores a enfocarse mejor en las necesidades lógicas y reducir significativamente el código de bajo nivel repetitivo (low-level repetitive coding).&lt;br /&gt;
 &lt;br /&gt;
Resuniendo, desarrollar aplicaciones Web con PRADO principalmente involucra  componentes predesarrollados, configurarlos mediante sus propiedades, responder a sus eventos escribiendo funciones manipuladoras de los mismos, y agrupándolos dentro de páginas para la aplicación.&lt;br /&gt;
==Características==&lt;br /&gt;
'''Reutilización''' - Los códigos que se rigen por el protocolo basado en componentes de PRADO son altamente reutilizables, lo que significa una gran ventaja para los equipos de desarrollo a largo plazo, ya que pueden reutilizar sus trabajos anteriores e integrar otras partes del trabajo con facilidad.&lt;br /&gt;
 &lt;br /&gt;
'''Programación dirigida por eventos''' - Las actividades del usuario final, tales como como hacer clic en un botón de enviar, son capturadas como eventos del servidor permitiendo que los desarrolladores tengan un mejor enfoque en interacciones del usuario.&lt;br /&gt;
 &lt;br /&gt;
'''Integración de equipo''' - La [[capa de presentación]] y la [[capa lógica]] son almacenados por separado. Las aplicaciones en PRADO pueden ser armadas por temas (themable).&lt;br /&gt;
 &lt;br /&gt;
'''Controles webs Potentes''' - PRADO viene con un conjunto de poderosos componentes que se ocupan de interfaces de usuario Web. Las páginas web se pueden crear con unas pocas líneas de código. Por ejemplo, utilizando el componente DataGrid, se puede crear rápidamente una página que presenta una tabla de datos que permite la paginación, la clasificación, editar y eliminar filas de los datos.&lt;br /&gt;
 &lt;br /&gt;
'''Fuerte soporte de bases de datos''' - Desde la versión 3.1, PRADO ha sido equipada con total soporte de [[bases de datos]], escrita en forma nativa y, por tanto, encaja con el resto del framework [[PRADO]]. De acuerdo a la complejidad de los objetos de negocio, se puede optar por utilizar la PDO simple, basada en el acceso a los datos, o el ampliamente conocido [[Active Record]], o el mapa completo de los objetos del negocio SqlMap. &lt;br /&gt;
 &lt;br /&gt;
'''Soporte de [[AJAX]] sin fisuras''' – El uso de AJAX en PRADO nunca ha sido más fácil con su innovador [[Controles Activos]] ([[Active Controls]]) introducidos desde la versión 3.1. Se puede implementar una aplicación AJAX sin escribir una sola línea de código [[javascript]]. De hecho, que la utilización de los Controles Activos, no es muy diferente a la utilización de componentes no-AJAX.&lt;br /&gt;
 &lt;br /&gt;
'''Soporte de L18N y L10N''' - PRADO incluye soporte completo para crear aplicaciones con múltiples idiomas y la localización. &lt;br /&gt;
 &lt;br /&gt;
'''Compatibilidad [[XHTML]]''' - Las páginas Web generadas por PRADO son compatibles con XHTML. &lt;br /&gt;
 &lt;br /&gt;
'''Albergar trabajos ya existentes''' - PRADO es un framework genérico, con especial atención a la capa de presentación. No excluye a desarrolladores que hacen uso de la mayoría de las actuales bibliotecas de clase o juegos (kits) de herramientas. Por ejemplo, uno puede usar [[ADOdb]] o [[Creole]] para tratar con base de datos en su aplicación PRADO.&lt;br /&gt;
 &lt;br /&gt;
'''Otras características''' - Potente [[manipulación de errores]] /[[excepciones]] y registro de mensjes (message logging); cahe genérico y [[memoria caché]] de salida selectiva; manejo de errores personalizable y localizable; extensible autentificación y autorización; prevención de medidas de seguridad tales como cross-site script (XSS), protección de cookies, etc.&lt;br /&gt;
==Adecuada Utilización==&lt;br /&gt;
PRADO es adecuado para la creación de aplicaciones Web de alta interactividdad con usuarios (user-interactive). Puede utilizarse para desarrollar sistemas tan simples como un blog o para aquellos sistemas tan complejos como un [[sistema de gestión de contenidos]] ([[CMS]]) o una completa solución de [[comercio electrónico]]. PRADO promueve la programación orientada a objetos a través de su metodología basada en componente, se ajusta muy bien para el trabajo en equipo y el desarrollo empresarial. &lt;br /&gt;
PRADO viene con un conjunto completo de técnicas de caching que ayudan a acelerar las aplicaciones Web PRADO y acomodar el tráfico de alta exigencia. Su arquitectura modular permite a los desarrolladores el uso de diferentes módulos de caché de memoria para diferentes necesidades. La salida de caché permite elegir selectivamente el caché de las páginas webs generadas. &lt;br /&gt;
==Comparación con otros Frameworks==&lt;br /&gt;
PRADO es a menudo citado como un [[framework]] único. Su singularidad radica principalmente en el paradigma de la programación basada en componentes (component-based) y dirigida a eventos (event-driven). Aunque este paradigma de programación no es nuevo en programación de aplicaciones de escritorio y no en una nueva web de algunos lenguajes de programación, PRADO es quizás el primer [[framework PHP]] que lo lleva a cabo. &lt;br /&gt;
La mayoría de los frameworks de PHP principalmente se centran en separar la presentación y la lógica y promueven el patrón de diseño [[MVC]] ([[modelo-vista-controlador]]). PRADO logra el mismo objetivo, naturalmente, al exigir que la lógica se almacene en las clases y la presentación en las plantillas. PRADO hace mucho más en otros aspectos distintos de [[MVC]]. Se llena de mucho espacio en blanco en la programación web en PHP, con su paradigma de programación basada en componentes, la riqueza de su conjunto de controles Web, sus potente soporte de [[bases de datos]], su flexible manejo de errores y registro de mensajes, y muchos otros. &lt;br /&gt;
==Estabilidad==&lt;br /&gt;
PRADO en sus inicios fue lanzado en agosto de 2004. Muchas series de ensayos se han escrito y realizado con frecuencia para asegurar su calidad. Se ha utilizado por miles de desarrolladores y muchas aplicaciones Web se han desarrollado sobre la base de la misma. Bugs y peticiones se gestionan a través del sistema TRAC y tiene una gran comunidad de usuarios y el equipo de desarrollo para asegurar que todas las preguntas se respondan en forma oportuna.&lt;br /&gt;
 &lt;br /&gt;
== Fuentes ==&lt;br /&gt;
*[ http://www.pradosoft.com/ PradoSoft] &lt;br /&gt;
[[Category:Desarrollo_web]] [[Category:Herramientas_de_programación]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=PRADO_(Aplicaci%C3%B3n_web)&amp;diff=1222543</id>
		<title>PRADO (Aplicación web)</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=PRADO_(Aplicaci%C3%B3n_web)&amp;diff=1222543"/>
		<updated>2011-11-30T23:01:47Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: Página creada con '{{Ficha Software |nombre=Prado |familia= Frameworks PHP |imagen=Prado_framework_php.jpg |modelo de desarrollo= MVC |género= Programación |sistemas operativos=Multiplataforma }...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=Prado&lt;br /&gt;
|familia= Frameworks PHP&lt;br /&gt;
|imagen=Prado_framework_php.jpg&lt;br /&gt;
|modelo de desarrollo= MVC&lt;br /&gt;
|género= Programación&lt;br /&gt;
|sistemas operativos=Multiplataforma&lt;br /&gt;
}} &lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
'''PRADO''' es un [[framework]] [[PHP]] o [[capa de programación]] basada en [[componentes]] y [[programación por eventos]], para la implementación de aplicaciones Web en [[PHP 5]]. [[PRADO]] (PHP Rapid Application Development Object-oriented) significa en español Desarrollo Rápido de Aplicaciones con [[Programación Orientada a Objetos]] en PHP.&lt;br /&gt;
 &lt;br /&gt;
==Historia==&lt;br /&gt;
La creación original de PRADO vino de [[Apache]] Tapestry. Para el diseño y la ejecución, se tomaron ideas de [[Borland Delphi]] y [[Microsoft ASP.NET]]. La primera versión de PRADO salió en junio de 2004, escrita en [[PHP 4]]. Impulsado por el concurso de codificación de [[Zend PHP 5]], PRADO fue reescrito en PHP 5. PRADO ganó el gran premio en el concurso Zend, ganando el más alto de votos del público y los jueces del panel.&lt;br /&gt;
PRADO comenzó a ser alojado en SourceForge en agosto de 2004 como un proyecto de código abierto. Con el fantástico apoyo del equipo de desarrolladores PRADO y usuarios PRADO, evolucionó a la versión 2,0 a mediados de 2005. En esta versión, Wei Zhuo contribuyó en PRADO con el excelente I18N y L10N apoyo. &lt;br /&gt;
En mayo de 2005, se decidió recodificar por completo el [[framework]] PRADO para resolver algunos elementos que se encuentraban en la versión 2.0 y para actualizarse con respecto a algunas geniales características de [[Microsoft ASP.NET]] 2.0. Después de casi un año de arduo trabajo con más de 50.000 líneas de nuevo código, la versión 3.0 fue finalmente puesta a disposición en abril de 2006. &lt;br /&gt;
A partir de la versión 3.0, se llevan a cabo importantes esfuerzos para asegurar la calidad y la estabilidad de PRADO. Si se dice PRADO v2.x y v1.x son prueba de concepto de trabajo, se puede decir que PRADO 3.x ha crecido a un proyecto que es adecuado para un negocio serio en el [[desarrollo de aplicaciones]].&lt;br /&gt;
==Objetivo==&lt;br /&gt;
Su objetivo principal es aprovechar al máximo la [[reutilización de código]] Web. No solamente es reusable el propio código, sino el de otros programadores de un modo fácil, evitando el esfuerzo de reimplementar lo que ya está hecho; disminuye notablemente el tiempo de desarrollo.&lt;br /&gt;
PRADO cuenta con un [[protocolo]] para crear y usar componentes para la construcción de aplicaciones Web. Un componente es una pieza de un programa que es autocontenido y puede ser reutilizado con una mínima personalización del mismo.&lt;br /&gt;
 &lt;br /&gt;
Para facilitar el uso de componentes, PRADO incluye el paradigma de la [[programación dirigida por eventos]] ([[event-driven]]) que permite la delegación de comportamientos extensibles a los componentes. Las acciones de los usuarios finales, tales como hacer clic en un botón de un formulario, son capturados como eventos en el lado del servidor (server events). A los eventos se deben enlazar métodos o funciones, de modo que al ejecutarse los eventos, estos sean invocados automáticamente. Comparado con la programación Web tradicional en la cual los desarrolladores tienen que tratar directamente con los métodos POST y GET, la programación dirigida por eventos ayuda a los desarrolladores a enfocarse mejor en las necesidades lógicas y reducir significativamente el código de bajo nivel repetitivo (low-level repetitive coding).&lt;br /&gt;
 &lt;br /&gt;
Resuniendo, desarrollar aplicaciones Web con PRADO principalmente involucra  componentes predesarrollados, configurarlos mediante sus propiedades, responder a sus eventos escribiendo funciones manipuladoras de los mismos, y agrupándolos dentro de páginas para la aplicación.&lt;br /&gt;
 &lt;br /&gt;
==Características==&lt;br /&gt;
'''Reutilización''' - Los códigos que se rigen por el protocolo basado en componentes de PRADO son altamente reutilizables, lo que significa una gran ventaja para los equipos de desarrollo a largo plazo, ya que pueden reutilizar sus trabajos anteriores e integrar otras partes del trabajo con facilidad.&lt;br /&gt;
 &lt;br /&gt;
'''Programación dirigida por eventos''' - Las actividades del usuario final, tales como como hacer clic en un botón de enviar, son capturadas como eventos del servidor permitiendo que los desarrolladores tengan un mejor enfoque en interacciones del usuario.&lt;br /&gt;
 &lt;br /&gt;
'''Integración de equipo''' - La [[capa de presentación]] y la [[capa lógica]] son almacenados por separado. Las aplicaciones en PRADO pueden ser armadas por temas (themable).&lt;br /&gt;
 &lt;br /&gt;
'''Controles webs Potentes''' - PRADO viene con un conjunto de poderosos componentes que se ocupan de interfaces de usuario Web. Las páginas web se pueden crear con unas pocas líneas de código. Por ejemplo, utilizando el componente DataGrid, se puede crear rápidamente una página que presenta una tabla de datos que permite la paginación, la clasificación, editar y eliminar filas de los datos.&lt;br /&gt;
 &lt;br /&gt;
'''Fuerte soporte de bases de datos''' - Desde la versión 3.1, PRADO ha sido equipada con total soporte de [[bases de datos]], escrita en forma nativa y, por tanto, encaja con el resto del framework [[PRADO]]. De acuerdo a la complejidad de los objetos de negocio, se puede optar por utilizar la PDO simple, basada en el acceso a los datos, o el ampliamente conocido [[Active Record]], o el mapa completo de los objetos del negocio SqlMap. &lt;br /&gt;
 &lt;br /&gt;
'''Soporte de [[AJAX]] sin fisuras''' – El uso de AJAX en PRADO nunca ha sido más fácil con su innovador [[Controles Activos]] ([[Active Controls]]) introducidos desde la versión 3.1. Se puede implementar una aplicación AJAX sin escribir una sola línea de código [[javascript]]. De hecho, que la utilización de los Controles Activos, no es muy diferente a la utilización de componentes no-AJAX.&lt;br /&gt;
 &lt;br /&gt;
'''Soporte de L18N y L10N''' - PRADO incluye soporte completo para crear aplicaciones con múltiples idiomas y la localización. &lt;br /&gt;
 &lt;br /&gt;
'''Compatibilidad [[XHTML]]''' - Las páginas Web generadas por PRADO son compatibles con XHTML. &lt;br /&gt;
 &lt;br /&gt;
'''Albergar trabajos ya existentes''' - PRADO es un framework genérico, con especial atención a la capa de presentación. No excluye a desarrolladores que hacen uso de la mayoría de las actuales bibliotecas de clase o juegos (kits) de herramientas. Por ejemplo, uno puede usar [[ADOdb]] o [[Creole]] para tratar con base de datos en su aplicación PRADO.&lt;br /&gt;
 &lt;br /&gt;
'''Otras características''' - Potente [[manipulación de errores]] /[[excepciones]] y registro de mensjes (message logging); cahe genérico y [[memoria caché]] de salida selectiva; manejo de errores personalizable y localizable; extensible autentificación y autorización; prevención de medidas de seguridad tales como cross-site script (XSS), protección de cookies, etc.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==Adecuada Utilización==&lt;br /&gt;
PRADO es adecuado para la creación de aplicaciones Web de alta interactividdad con usuarios (user-interactive). Puede utilizarse para desarrollar sistemas tan simples como un blog o para aquellos sistemas tan complejos como un [[sistema de gestión de contenidos]] ([[CMS]]) o una completa solución de [[comercio electrónico]]. PRADO promueve la programación orientada a objetos a través de su metodología basada en componente, se ajusta muy bien para el trabajo en equipo y el desarrollo empresarial. &lt;br /&gt;
PRADO viene con un conjunto completo de técnicas de caching que ayudan a acelerar las aplicaciones Web PRADO y acomodar el tráfico de alta exigencia. Su arquitectura modular permite a los desarrolladores el uso de diferentes módulos de caché de memoria para diferentes necesidades. La salida de caché permite elegir selectivamente el caché de las páginas webs generadas. &lt;br /&gt;
==Comparación con otros Frameworks==&lt;br /&gt;
PRADO es a menudo citado como un [[framework]] único. Su singularidad radica principalmente en el paradigma de la programación basada en componentes (component-based) y dirigida a eventos (event-driven). Aunque este paradigma de programación no es nuevo en programación de aplicaciones de escritorio y no en una nueva web de algunos lenguajes de programación, PRADO es quizás el primer [[framework PHP]] que lo lleva a cabo. &lt;br /&gt;
La mayoría de los frameworks de PHP principalmente se centran en separar la presentación y la lógica y promueven el patrón de diseño [[MVC]] ([[modelo-vista-controlador]]). PRADO logra el mismo objetivo, naturalmente, al exigir que la lógica se almacene en las clases y la presentación en las plantillas. PRADO hace mucho más en otros aspectos distintos de [[MVC]]. Se llena de mucho espacio en blanco en la programación web en PHP, con su paradigma de programación basada en componentes, la riqueza de su conjunto de controles Web, sus potente soporte de [[bases de datos]], su flexible manejo de errores y registro de mensajes, y muchos otros. &lt;br /&gt;
==Estabilidad==&lt;br /&gt;
 &lt;br /&gt;
PRADO en sus inicios fue lanzado en agosto de 2004. Muchas series de ensayos se han escrito y realizado con frecuencia para asegurar su calidad. Se ha utilizado por miles de desarrolladores y muchas aplicaciones Web se han desarrollado sobre la base de la misma. Bugs y peticiones se gestionan a través del sistema TRAC y tiene una gran comunidad de usuarios y el equipo de desarrollo para asegurar que todas las preguntas se respondan en forma oportuna.&lt;br /&gt;
 &lt;br /&gt;
== Fuentes ==&lt;br /&gt;
*[ http://www.pradosoft.com/ PradoSoft] &lt;br /&gt;
[[Category:Desarrollo_web]] [[Category:Herramientas_de_programación]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Archivo:Prado_framework_php.jpg&amp;diff=1222491</id>
		<title>Archivo:Prado framework php.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Archivo:Prado_framework_php.jpg&amp;diff=1222491"/>
		<updated>2011-11-30T21:29:25Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sumario ==&lt;br /&gt;
&lt;br /&gt;
== Estado de copyright: ==&lt;br /&gt;
&lt;br /&gt;
== Fuente: ==&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Inyecci%C3%B3n_SQL&amp;diff=1137016</id>
		<title>Inyección SQL</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Inyecci%C3%B3n_SQL&amp;diff=1137016"/>
		<updated>2011-11-09T17:10:58Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=Inyección SQL&lt;br /&gt;
|familia= Base de Datos&lt;br /&gt;
|imagen=Inyeccion_SQL.png&lt;br /&gt;
}}&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
'''Inyección SQL''' es un mecanismo de infiltración de código malicioso que se vale de una vulnerabilidad [[informática]] que contiene una aplicación en el nivel de validación de las entradas para ejecutar determinadas consultas en una [[base de datos]].&lt;br /&gt;
El origen de la vulnerabilidad radica en el incorrecto chequeo y/o filtrado de las variables utilizadas en un programa que contiene, o bien genera, código [[SQL]].&lt;br /&gt;
 &lt;br /&gt;
==Descripción==&lt;br /&gt;
Se dice que existe o se produjo una inyección [[SQL]] cuando, de alguna manera, se inserta o &amp;quot;inyecta&amp;quot; código SQL invasor dentro del código [[SQL]] programado, con el fin de alterar las funcionalidades normales de la aplicación y lograr así que se ejecute el código &amp;quot;invasor&amp;quot; incrustado, en la [[base de datos]].&lt;br /&gt;
 &lt;br /&gt;
Este tipo de intrusión normalmente es de carácter malicioso, dañino o espía, por tanto es un problema de seguridad informática, y debe ser tomado en cuenta por el [[programador]] de la aplicación para poder prevenirlo. Un programa elaborado con descuido o con ignorancia del problema, podrá resultar ser vulnerable, y la seguridad del sistema ([[base de datos]]) podrá quedar eventualmente comprometida. La intrusión ocurre durante la ejecución del programa vulnerable.&lt;br /&gt;
 &lt;br /&gt;
La vulnerabilidad se puede producir automáticamente cuando un programa &amp;quot;arma descuidadamente&amp;quot; una sentencia [[SQL]] en tiempo de ejecución, o bien durante la fase de desarrollo, cuando el programador explicita la sentencia [[SQL]] a ejecutar en forma desprotegida. En cualquier caso, siempre que el [[programador]] necesite y haga uso de parámetros a ingresar por parte del usuario, a efectos de consultar una [[base de datos]]; ya que, justamente, dentro de los parámetros es donde se puede incorporar el código SQL intruso.&lt;br /&gt;
Al ejecutarse la consulta en la [[base de datos]], el código SQL inyectado también se ejecutará y podría efectuar múltiples operaciones sobre la aplicación, como insertar registros, modificar o eliminar datos, autorizar accesos violando formularios de autenticación, e incluso, ejecutar otro tipo de código malicioso en la [[computadora]].&lt;br /&gt;
&lt;br /&gt;
==Ejemplos==&lt;br /&gt;
 &lt;br /&gt;
'''Ej:1'''&lt;br /&gt;
&lt;br /&gt;
Este ejemplo demuestra una posible violación de la entrada a un sistema sin conocer la contraseña.&lt;br /&gt;
//se reciben los datos&lt;br /&gt;
&amp;lt;source lang =&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$us=$_POST['usuario'];&lt;br /&gt;
$pass=$_POST['pass'];&lt;br /&gt;
//se construye la consulta (sin antes filtrar o limpiar los datos) esto es lo vulnerable&lt;br /&gt;
$sql=&amp;quot;SELECT * FROM usuarios WHERE user = '$us' AND password='$pass'&amp;quot;;&lt;br /&gt;
//…&lt;br /&gt;
if(mysql_fetch_array($exc)){&lt;br /&gt;
echo &amp;quot;Inicio de sesión correcto&amp;quot;; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Este es el típico sistema de verificación de contraseñas.&lt;br /&gt;
Utiliza la instrucción '''mysql_fetch_array'''(funcion de mysql, que devuelve '''falso''' si no hay ningún resultado, en la 'querry', o petición), así que si no hay ningún resultado donde el usuario y el password coincidan, el resultado es '''false''' &lt;br /&gt;
 &lt;br /&gt;
'''¿Cómo hacer que devuelva ‘’’true’’’ y permita entrar?'''&lt;br /&gt;
*  Con el password correcto.&lt;br /&gt;
*  Inyectando código malicioso.&lt;br /&gt;
Inyectando código… se haría algo así:&lt;br /&gt;
&lt;br /&gt;
Esta es la petición que solo deja pasar si se conoce el password&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE user = '$us' AND password='$pass'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Ahora, ¿cómo se puede hacer que nos devuelva ‘’’true’’’ aunque no se conozca el password, sabiendo que solo se puede modificar $pass y $us?&lt;br /&gt;
Con un poco de creatividad:&lt;br /&gt;
En el formulario se introduce:&lt;br /&gt;
*  de usuario:    yosba&lt;br /&gt;
*  de password: ' OR ''='&lt;br /&gt;
La sentencia SQL recibirá:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE user = 'yosba' AND password='' OR ''=''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Devolverá '''true''', si hay algún resultado, y como NADA siempre es igual a NADA, devolverá ‘’’true’’’, y así se vurla la ignorancia del programador de este sistema y se entra sin credenciales.&lt;br /&gt;
 &lt;br /&gt;
'''Otros posibles valores que devuelven true son:'''&lt;br /&gt;
*  usuario: yosba AND /*       password: */ ''='&lt;br /&gt;
*  usuario: ' OR 1=1 //&lt;br /&gt;
 &lt;br /&gt;
'''Ej:2'''&lt;br /&gt;
 &lt;br /&gt;
Existe un parámetro &amp;quot;nombreUsuario&amp;quot; que contiene el nombre de usuario a consultar, una inyección SQL se podría provocar de la siguiente forma:&lt;br /&gt;
El código SQL original y vulnerable es:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
consulta := &amp;quot;SELECT * FROM usuarios WHERE nombre = '&amp;quot; + nombreUsuario + &amp;quot;';&amp;quot; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Si se escribe un nombre, por ejemplo &amp;quot;Jorge&amp;quot;, nada anormal sucederá, la aplicación generaría una sentencia SQL similar a la siguiente, que es perfectamente correcta, donde se seleccionarían todos los registros con el nombre &amp;quot;Jorge&amp;quot; en la base de datos:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE nombre = 'Jorge'; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Pero si un intruso escribe como nombre de usuario a consultar:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
Jorge'; DROP TABLE usuarios; SELECT * FROM datos WHERE nombre LIKE '%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Se generaría la siguiente consulta SQL:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE nombre = 'Alicia';&lt;br /&gt;
DROP TABLE usuarios;&lt;br /&gt;
SELECT * FROM datos WHERE nombre LIKE '%';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En la base de datos se ejecutaría la consulta en el orden dado, se seleccionarían todos los registros con el nombre 'Jorge', se borraría la tabla 'usuarios' y finalmente se seleccionaría toda la tabla &amp;quot;datos&amp;quot;, que no debería estar disponible para los usuarios web comunes.&lt;br /&gt;
En resumen, cualquier dato de la base de datos puede quedar disponible para ser leído o modificado por un usuario malintencionado.&lt;br /&gt;
 &lt;br /&gt;
'''Ej:3'''&lt;br /&gt;
Cuando se reciben parámetros por el método ‘’’GET_[]’’’ y no se filtran correctamente las variables:&lt;br /&gt;
En este caso se le pasa al archivo uno.php el parámetro id con valor 4 para ser seleccionado ese registro:&lt;br /&gt;
&amp;lt;a href=&amp;quot;uno.php?id=4&amp;quot;&amp;gt;Noticia 4&amp;lt;/a&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
$result = mysql_query(&amp;quot;SELECT * FROM UNATABLA WHERE id=&amp;quot;.$_GET['id']); &lt;br /&gt;
$row = mysql_fetch_row($result); &amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
...&lt;br /&gt;
Esto sería vulnerable, de manera que si alguien conociendo el nombre de una tabla hace algo así:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
http://tusitio.cu/uno.php?id=1%20UNION%20DROP%20TABLE%20UNATABLA&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
¿Qué pasaría en realidad?:&lt;br /&gt;
Se ejecutaría la siguiente consulta:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
“SELECT * FROM UNATABLA WHERE id=1 UNION DROP TABLE UNATABLA” &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
donde primero selecciona un registro y luego elimina la tabla completa.&lt;br /&gt;
 &lt;br /&gt;
==Formas de evitar los ataques por inyección SQL.==&lt;br /&gt;
'''Importante:''' Qué hacer para evitar estos errores?&lt;br /&gt;
La inyección SQL es fácil de evitar, por parte del programador, en la mayoría de los lenguajes de programación que permiten desarrollar aplicaciones web. Es muy recomendable siempre validar correctamente los datos evitando que los usuarios puedan entrar caracteres como \ / “ ‘ o cualquier otros que no se correspondan con los datos que se piden.&lt;br /&gt;
'''Ej:1'''&lt;br /&gt;
En el lenguaje PHP, hay diferentes funciones que pueden contrarestar ataques mediante inyección SQL. Para MySQL, la función a usar es '''mysql_real_escape_string''':&lt;br /&gt;
&amp;lt;source lang =&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 $query_result = mysql_query(&amp;quot;SELECT * FROM usuarios WHERE nombre = \&amp;quot;&amp;quot; . mysql_real_escape_string($nombre_usuario) . &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Tanbién con '''str_replace(&amp;quot;x&amp;quot;,&amp;quot;'&amp;quot;,$var)'''&lt;br /&gt;
También con $var=htmlentities(addslashes($var));// Por cada var, aunque por defecto el addslashes está implícito en la config de PHP.&lt;br /&gt;
 &lt;br /&gt;
'''Ej:2'''&lt;br /&gt;
Encriptando las passwords:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$user=$_POST[&amp;quot;user&amp;quot;];&lt;br /&gt;
$pass=$_POST[&amp;quot;pass&amp;quot;];&lt;br /&gt;
 &lt;br /&gt;
//…&lt;br /&gt;
 &lt;br /&gt;
$pass=md5($pass); // La encriptamos.&lt;br /&gt;
$sql = &amp;quot;SELECT * FROM usuarios WHERE usuario='$user' AND contra='$pass'&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Suponiendo que en la  Base de Datos esté almacenada la password encriptada; antes de colocar el parámetro pass en la consulta la encriptamos, de manera que si un malintencionado entrara un  ‘ OR ‘’=’  el parámetro pass sería ‘ OR ‘’=’ pero al encriptarla sería como  d20da3888278ec814f6a837f260b60df, entonces la consulta generada sería como:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE usuario='yosba' AND contra='d20da3888278ec814f6a837f260b60df'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Y no lo que pretendía el intruso:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT usuario, contra, tipo FROM usuarios WHERE usuario='yosba' AND contra='’ OR ‘’=’' &amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Fuentes ==&lt;br /&gt;
*[http://www.unixwiz.net/techtips/sql-injection.html Inyección SQL]&lt;br /&gt;
*[http://www.forosdelweb.com/f18/ejemplos-inyeccion-sql-314674/ Ejemplos de Inyección SQL]&lt;br /&gt;
*[http://www.maestrosdelweb.com/editorial/inyecsql/ Inyección SQL]&lt;br /&gt;
*[http://www.solingest.com/blog/sql-injection-en-sql-server Inyección SQL en SQL Server] &lt;br /&gt;
[[Category:Bases_de_datos]]&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Inyecci%C3%B3n_SQL&amp;diff=1117188</id>
		<title>Inyección SQL</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Inyecci%C3%B3n_SQL&amp;diff=1117188"/>
		<updated>2011-11-04T11:54:05Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=Inyección SQL&lt;br /&gt;
|familia= Base de Datos&lt;br /&gt;
|imagen=Inyeccion_SQL.png&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
'''Inyección SQL''' es un mecanismo de infiltración de [[código]] malicioso que se vale de una vulnerabilidad [[informática]] que contiene una aplicación en el nivel de validación de las entradas para ejecutar determinadas consultas en una base de datos.&lt;br /&gt;
El origen de la vulnerabilidad radica en el incorrecto chequeo y/o filtrado de las variables utilizadas en un programa que contiene, o bien genera, [[código SQL]].&lt;br /&gt;
 &lt;br /&gt;
==Descripción==&lt;br /&gt;
Se dice que existe o se produjo una inyección [[SQL]] cuando, de alguna manera, se inserta o &amp;quot;inyecta&amp;quot; código SQL invasor dentro del código [[SQL]] programado, con el fin de alterar las funcionalidades normales de la [[aplicación]] y lograr así que se ejecute el código &amp;quot;invasor&amp;quot; incrustado, en la [[base de datos]].&lt;br /&gt;
 &lt;br /&gt;
Este tipo de intrusión normalmente es de carácter malicioso, dañino o espía, por tanto es un problema de [[seguridad informática]], y debe ser tomado en cuenta por el [[programador]] de la [[aplicación]] para poder prevenirlo. Un [[programa]] elaborado con descuido o con ignorancia del problema, podrá resultar ser vulnerable, y la [[seguridad del sistema]] ([[base de datos]]) podrá quedar eventualmente comprometida. La intrusión ocurre durante la ejecución del [[programa]] vulnerable.&lt;br /&gt;
 &lt;br /&gt;
La vulnerabilidad se puede producir automáticamente cuando un programa &amp;quot;arma descuidadamente&amp;quot; una [[sentencia SQL]] en tiempo de ejecución, o bien durante la fase de desarrollo, cuando el programador explicita la sentencia [[SQL]] a ejecutar en forma desprotegida. En cualquier caso, siempre que el [[programador]] necesite y haga uso de parámetros a ingresar por parte del usuario, a efectos de consultar una [[base de datos]]; ya que, justamente, dentro de los parámetros es donde se puede incorporar el [[código SQL]] intruso.&lt;br /&gt;
Al ejecutarse la [[consulta]] en la [[base de datos]], el [[código SQL]] inyectado también se ejecutará y podría efectuar múltiples operaciones sobre la [[aplicación]], como insertar [[registros]], modificar o eliminar datos, autorizar accesos violando [[formularios]] de autenticación, e incluso, ejecutar otro tipo de [[código malicioso]] en la [[computadora]].&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==Ejemplos==&lt;br /&gt;
 &lt;br /&gt;
'''Ej:1'''&lt;br /&gt;
&lt;br /&gt;
Este ejemplo demuestra una posible violación de la entrada a un sistema sin conocer la contraseña.&lt;br /&gt;
//se reciben los datos&lt;br /&gt;
&amp;lt;source lang =&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$us=$_POST['usuario'];&lt;br /&gt;
$pass=$_POST['pass'];&lt;br /&gt;
//se construye la consulta (sin antes filtrar o limpiar los datos) esto es lo vulnerable&lt;br /&gt;
$sql=&amp;quot;SELECT * FROM usuarios WHERE user = '$us' AND password='$pass'&amp;quot;;&lt;br /&gt;
//…&lt;br /&gt;
if(mysql_fetch_array($exc)){&lt;br /&gt;
echo &amp;quot;Inicio de sesión correcto&amp;quot;; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Este es el típico sistema de verificación de contraseñas.&lt;br /&gt;
Utiliza la instrucción '''mysql_fetch_array'''(funcion de mysql, que devuelve '''falso''' si no hay ningún resultado, en la 'querry', o petición), así que si no hay ningún resultado donde el usuario y el password coincidan, el resultado es '''false''' &lt;br /&gt;
 &lt;br /&gt;
'''¿Cómo hacer que devuelva ‘’’true’’’ y permita entrar?'''&lt;br /&gt;
*  Con el password correcto.&lt;br /&gt;
*  Inyectando código malicioso.&lt;br /&gt;
Inyectando código… se haría algo así:&lt;br /&gt;
&lt;br /&gt;
Esta es la petición que solo deja pasar si se conoce el password&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE user = '$us' AND password='$pass'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Ahora, ¿cómo se puede hacer que nos devuelva ‘’’true’’’ aunque no se conozca el password, sabiendo que solo se puede modificar $pass y $us?&lt;br /&gt;
Con un poco de creatividad:&lt;br /&gt;
En el formulario se introduce:&lt;br /&gt;
*  de usuario:    yosba&lt;br /&gt;
*  de password: ' OR ''='&lt;br /&gt;
La sentencia SQL recibirá:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE user = 'yosba' AND password='' OR ''=''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Devolverá '''true''', si hay algún resultado, y como NADA siempre es igual a NADA, devolverá ‘’’true’’’, y así se vurla la ignorancia del programador de este sistema y se entra sin credenciales.&lt;br /&gt;
 &lt;br /&gt;
'''Otros posibles valores que devuelven true son:'''&lt;br /&gt;
*  usuario: yosba AND /*       password: */ ''='&lt;br /&gt;
*  usuario: ' OR 1=1 //&lt;br /&gt;
 &lt;br /&gt;
'''Ej:2'''&lt;br /&gt;
 &lt;br /&gt;
Existe un parámetro &amp;quot;nombreUsuario&amp;quot; que contiene el nombre de usuario a consultar, una inyección SQL se podría provocar de la siguiente forma:&lt;br /&gt;
El código SQL original y vulnerable es:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
consulta := &amp;quot;SELECT * FROM usuarios WHERE nombre = '&amp;quot; + nombreUsuario + &amp;quot;';&amp;quot; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Si se escribe un nombre, por ejemplo &amp;quot;Jorge&amp;quot;, nada anormal sucederá, la aplicación generaría una sentencia SQL similar a la siguiente, que es perfectamente correcta, donde se seleccionarían todos los registros con el nombre &amp;quot;Jorge&amp;quot; en la base de datos:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE nombre = 'Jorge'; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Pero si un intruso escribe como nombre de usuario a consultar:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
Jorge'; DROP TABLE usuarios; SELECT * FROM datos WHERE nombre LIKE '%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Se generaría la siguiente consulta SQL:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE nombre = 'Alicia';&lt;br /&gt;
DROP TABLE usuarios;&lt;br /&gt;
SELECT * FROM datos WHERE nombre LIKE '%';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En la base de datos se ejecutaría la consulta en el orden dado, se seleccionarían todos los registros con el nombre 'Jorge', se borraría la tabla 'usuarios' y finalmente se seleccionaría toda la tabla &amp;quot;datos&amp;quot;, que no debería estar disponible para los usuarios web comunes.&lt;br /&gt;
En resumen, cualquier dato de la base de datos puede quedar disponible para ser leído o modificado por un usuario malintencionado.&lt;br /&gt;
 &lt;br /&gt;
'''Ej:3'''&lt;br /&gt;
Cuando se reciben parámetros por el método ‘’’GET_[]’’’ y no se filtran correctamente las variables:&lt;br /&gt;
En este caso se le pasa al archivo uno.php el parámetro id con valor 4 para ser seleccionado ese registro:&lt;br /&gt;
&amp;lt;a href=&amp;quot;uno.php?id=4&amp;quot;&amp;gt;Noticia 4&amp;lt;/a&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
$result = mysql_query(&amp;quot;SELECT * FROM UNATABLA WHERE id=&amp;quot;.$_GET['id']); &lt;br /&gt;
$row = mysql_fetch_row($result); &amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
...&lt;br /&gt;
Esto sería vulnerable, de manera que si alguien conociendo el nombre de una tabla hace algo así:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
http://tusitio.cu/uno.php?id=1%20UNION%20DROP%20TABLE%20UNATABLA&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
¿Qué pasaría en realidad?:&lt;br /&gt;
Se ejecutaría la siguiente consulta:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
“SELECT * FROM UNATABLA WHERE id=1 UNION DROP TABLE UNATABLA” &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
donde primero selecciona un registro y luego elimina la tabla completa.&lt;br /&gt;
 &lt;br /&gt;
==Formas de evitar los ataques por inyección SQL.==&lt;br /&gt;
'''Importante:''' Qué se hacer para evitar estos errores?&lt;br /&gt;
La inyección SQL es fácil de evitar, por parte del programador, en la mayoría de los lenguajes de programación que permiten desarrollar aplicaciones web. Es muy recomendable siempre validar correctamente los datos evitando que los usuarios puedan entrar caracteres como \ / “ ‘ o cualquier otros que no se correspondan con los datos que se piden.&lt;br /&gt;
'''Ej:1'''&lt;br /&gt;
En el lenguaje PHP, hay diferentes funciones que pueden contrarestar ataques mediante inyección SQL. Para MySQL, la función a usar es '''mysql_real_escape_string''':&lt;br /&gt;
&amp;lt;source lang =&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 $query_result = mysql_query(&amp;quot;SELECT * FROM usuarios WHERE nombre = \&amp;quot;&amp;quot; . mysql_real_escape_string($nombre_usuario) . &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Tanbién con '''str_replace(&amp;quot;x&amp;quot;,&amp;quot;'&amp;quot;,$var)'''&lt;br /&gt;
También con $var=htmlentities(addslashes($var));// Por cada var, aunque por defecto el addslashes está implícito en la config de PHP.&lt;br /&gt;
 &lt;br /&gt;
'''Ej:2'''&lt;br /&gt;
Encriptando las passwords:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$user=$_POST[&amp;quot;user&amp;quot;];&lt;br /&gt;
$pass=$_POST[&amp;quot;pass&amp;quot;];&lt;br /&gt;
 &lt;br /&gt;
//…&lt;br /&gt;
 &lt;br /&gt;
$pass=md5($pass); // La encriptamos.&lt;br /&gt;
$sql = &amp;quot;SELECT * FROM usuarios WHERE usuario='$user' AND contra='$pass'&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Suponiendo que en la  Base de Datos esté almacenada la password encriptada; antes de colocar el parámetro pass en la consulta la encriptamos, de manera que si un malintencionado entrara un  ‘ OR ‘’=’  el parámetro pass sería ‘ OR ‘’=’ pero al encriptarla sería como  d20da3888278ec814f6a837f260b60df, entonces la consulta generada sería como:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE usuario='yosba' AND contra='d20da3888278ec814f6a837f260b60df'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Y no lo que pretendía el intruso:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT usuario, contra, tipo FROM usuarios WHERE usuario='yosba' AND contra='’ OR ‘’=’' &amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Fuentes ==&lt;br /&gt;
*[http://www.unixwiz.net/techtips/sql-injection.html Inyección SQL]&lt;br /&gt;
*[http://www.forosdelweb.com/f18/ejemplos-inyeccion-sql-314674/ Ejemplos de Inyección SQL]&lt;br /&gt;
*[http://www.maestrosdelweb.com/editorial/inyecsql/ Inyección SQL]&lt;br /&gt;
*[http://www.solingest.com/blog/sql-injection-en-sql-server Inyección SQL en SQL Server] &lt;br /&gt;
[[Category:Bases_de_datos]]&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Inyecci%C3%B3n_SQL&amp;diff=1116226</id>
		<title>Inyección SQL</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Inyecci%C3%B3n_SQL&amp;diff=1116226"/>
		<updated>2011-11-03T21:12:13Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: Página creada con '{{Ficha Software |nombre=Inyección SQL |familia= Base de Datos |imagen=Inyeccion_SQL.png }} &amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt; '''Inyección SQL''' es un mecanismo de infiltración de [[có...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=Inyección SQL&lt;br /&gt;
|familia= Base de Datos&lt;br /&gt;
|imagen=Inyeccion_SQL.png&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
'''Inyección SQL''' es un mecanismo de infiltración de [[código]] malicioso que se vale de una vulnerabilidad [[informática]] que contiene una aplicación en el nivel de validación de las entradas para ejecutar determinadas consultas en una base de datos.&lt;br /&gt;
El origen de la vulnerabilidad radica en el incorrecto chequeo y/o filtrado de las variables utilizadas en un programa que contiene, o bien genera, [[código SQL]].&lt;br /&gt;
 &lt;br /&gt;
==Descripción==&lt;br /&gt;
Se dice que existe o se produjo una inyección [[SQL]] cuando, de alguna manera, se inserta o &amp;quot;inyecta&amp;quot; código SQL invasor dentro del código [[SQL]] programado, con el fin de alterar las funcionalidades normales de la [[aplicación]] y lograr así que se ejecute el código &amp;quot;invasor&amp;quot; incrustado, en la [[base de datos]].&lt;br /&gt;
 &lt;br /&gt;
Este tipo de intrusión normalmente es de carácter malicioso, dañino o espía, por tanto es un problema de [[seguridad informática]], y debe ser tomado en cuenta por el [[programador]] de la [[aplicación]] para poder prevenirlo. Un [[programa]] elaborado con descuido o con ignorancia del problema, podrá resultar ser vulnerable, y la [[seguridad del sistema]] ([[base de datos]]) podrá quedar eventualmente comprometida. La intrusión ocurre durante la ejecución del [[programa]] vulnerable.&lt;br /&gt;
 &lt;br /&gt;
La vulnerabilidad se puede producir automáticamente cuando un programa &amp;quot;arma descuidadamente&amp;quot; una [[sentencia SQL]] en tiempo de ejecución, o bien durante la fase de desarrollo, cuando el programador explicita la sentencia [[SQL]] a ejecutar en forma desprotegida. En cualquier caso, siempre que el [[programador]] necesite y haga uso de parámetros a ingresar por parte del usuario, a efectos de consultar una [[base de datos]]; ya que, justamente, dentro de los parámetros es donde se puede incorporar el [[código SQL]] intruso.&lt;br /&gt;
Al ejecutarse la [[consulta]] en la [[base de datos]], el [[código SQL]] inyectado también se ejecutará y podría efectuar múltiples operaciones sobre la [[aplicación]], como insertar [[registros]], modificar o eliminar datos, autorizar accesos violando [[formularios]] de autenticación, e incluso, ejecutar otro tipo de [[código malicioso]] en la [[computadora]].&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==Ejemplos==&lt;br /&gt;
 &lt;br /&gt;
'''Ej:1'''&lt;br /&gt;
&lt;br /&gt;
Este ejemplo demuestra una posible violación de la entrada a un sistema sin conocer la contraseña.&lt;br /&gt;
//se reciben los datos&lt;br /&gt;
&amp;lt;source lang =&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$us=$_POST['usuario'];&lt;br /&gt;
$pass=$_POST['pass'];&lt;br /&gt;
//se construye la consulta (sin antes filtrar o limpiar los datos) esto es lo vulnerable&lt;br /&gt;
$sql=&amp;quot;SELECT * FROM usuarios WHERE user = '$us' AND password='$pass'&amp;quot;;&lt;br /&gt;
//…&lt;br /&gt;
if(mysql_fetch_array($exc)){&lt;br /&gt;
echo &amp;quot;Inicio de sesión correcto&amp;quot;; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Este es el típico sistema de verificación de contraseñas.&lt;br /&gt;
Utiliza la instrucción '''mysql_fetch_array'''(funcion de mysql, que devuelve '''falso''' si no hay ningún resultado, en la 'querry', o petición), así que si no hay ningún resultado donde el usuario y el password coincidan, el resultado es '''false''' &lt;br /&gt;
 &lt;br /&gt;
'''¿Cómo hacer que devuelva ‘’’true’’’ y permita entrar entrar?'''&lt;br /&gt;
*  Con el password correcto.&lt;br /&gt;
*  Inyectando código malicioso.&lt;br /&gt;
Inyectando código… se haría algo así:&lt;br /&gt;
&lt;br /&gt;
Esta es la petición que solo deja pasar si se conoce el password&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE user = '$us' AND password='$pass'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Ahora, ¿cómo se puede hacer que nos devuelva ‘’’true’’’ aunque no se conozca el password, sabiendo que solo se puede modificar $pass y $us?&lt;br /&gt;
Con un poco de creatividad:&lt;br /&gt;
En el formulario se introduce:&lt;br /&gt;
*  de usuario:    yosba&lt;br /&gt;
*  de password: ' OR ''='&lt;br /&gt;
La sentencia SQL recibirá:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE user = 'yosba' AND password='' OR ''=''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Devolverá '''true''', si hay algún resultado, y como NADA siempre es igual a NADA, devolverá ‘’’true’’’, y así se vurla la ignorancia del programador de este sistema y se entra sin credenciales.&lt;br /&gt;
 &lt;br /&gt;
'''Otros posibles valores que devuelven true son:'''&lt;br /&gt;
*  usuario: yosba AND /*       password: */ ''='&lt;br /&gt;
*  usuario: ' OR 1=1 //&lt;br /&gt;
 &lt;br /&gt;
'''Ej:2'''&lt;br /&gt;
 &lt;br /&gt;
Existe un parámetro &amp;quot;nombreUsuario&amp;quot; que contiene el nombre de usuario a consultar, una inyección SQL se podría provocar de la siguiente forma:&lt;br /&gt;
El código SQL original y vulnerable es:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
consulta := &amp;quot;SELECT * FROM usuarios WHERE nombre = '&amp;quot; + nombreUsuario + &amp;quot;';&amp;quot; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Si se escribe un nombre, por ejemplo &amp;quot;Jorge&amp;quot;, nada anormal sucederá, la aplicación generaría una sentencia SQL similar a la siguiente, que es perfectamente correcta, donde se seleccionarían todos los registros con el nombre &amp;quot;Jorge&amp;quot; en la base de datos:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE nombre = 'Jorge'; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Pero si un intruso escribe como nombre de usuario a consultar:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
Jorge'; DROP TABLE usuarios; SELECT * FROM datos WHERE nombre LIKE '%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Se generaría la siguiente consulta SQL:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE nombre = 'Alicia';&lt;br /&gt;
DROP TABLE usuarios;&lt;br /&gt;
SELECT * FROM datos WHERE nombre LIKE '%';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En la base de datos se ejecutaría la consulta en el orden dado, se seleccionarían todos los registros con el nombre 'Jorge', se borraría la tabla 'usuarios' y finalmente se seleccionaría toda la tabla &amp;quot;datos&amp;quot;, que no debería estar disponible para los usuarios web comunes.&lt;br /&gt;
En resumen, cualquier dato de la base de datos puede quedar disponible para ser leído o modificado por un usuario malintencionado.&lt;br /&gt;
 &lt;br /&gt;
'''Ej:3'''&lt;br /&gt;
Cuando se reciben parámetros por el método ‘’’GET_[]’’’ y no se filtran correctamente las variables:&lt;br /&gt;
En este caso se le pasa al archivo uno.php el parámetro id con valor 4 para ser seleccionado ese registro:&lt;br /&gt;
&amp;lt;a href=&amp;quot;uno.php?id=4&amp;quot;&amp;gt;Noticia 4&amp;lt;/a&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
$result = mysql_query(&amp;quot;SELECT * FROM UNATABLA WHERE id=&amp;quot;.$_GET['id']); &lt;br /&gt;
$row = mysql_fetch_row($result); &amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
...&lt;br /&gt;
Esto sería vulnerable, de manera que si alguien conociendo el nombre de una tabla hace algo así:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
http://tusitio.cu/uno.php?id=1%20UNION%20DROP%20TABLE%20UNATABLA&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
¿Qué pasaría en realidad?:&lt;br /&gt;
Se ejecutaría la siguiente consulta:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
“SELECT * FROM UNATABLA WHERE id=1 UNION DROP TABLE UNATABLA” &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
donde primero selecciona un registro y luego elimina la tabla completa.&lt;br /&gt;
 &lt;br /&gt;
==Formas de evitar los ataques por inyección SQL.==&lt;br /&gt;
'''Importante:''' Qué se hacer para evitar estos errores?&lt;br /&gt;
La inyección SQL es fácil de evitar, por parte del programador, en la mayoría de los lenguajes de programación que permiten desarrollar aplicaciones web. Es muy recomendable siempre validar correctamente los datos evitando que los usuarios puedan entrar caracteres como \ / “ ‘ o cualquier otros que no se correspondan con los datos que se piden.&lt;br /&gt;
'''Ej:1'''&lt;br /&gt;
En el lenguaje PHP, hay diferentes funciones que pueden contrarestar ataques mediante inyección SQL. Para MySQL, la función a usar es '''mysql_real_escape_string''':&lt;br /&gt;
&amp;lt;source lang =&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 $query_result = mysql_query(&amp;quot;SELECT * FROM usuarios WHERE nombre = \&amp;quot;&amp;quot; . mysql_real_escape_string($nombre_usuario) . &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Tanbién con '''str_replace(&amp;quot;x&amp;quot;,&amp;quot;'&amp;quot;,$var)'''&lt;br /&gt;
También con $var=htmlentities(addslashes($var));// Por cada var, aunque por defecto el addslashes está implícito en la config de PHP.&lt;br /&gt;
 &lt;br /&gt;
'''Ej:2'''&lt;br /&gt;
Encriptando las passwords:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$user=$_POST[&amp;quot;user&amp;quot;];&lt;br /&gt;
$pass=$_POST[&amp;quot;pass&amp;quot;];&lt;br /&gt;
 &lt;br /&gt;
//…&lt;br /&gt;
 &lt;br /&gt;
$pass=md5($pass); // La encriptamos.&lt;br /&gt;
$sql = &amp;quot;SELECT * FROM usuarios WHERE usuario='$user' AND contra='$pass'&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Suponiendo que en la  Base de Datos esté almacenada la password encriptada; antes de colocar el parámetro pass en la consulta la encriptamos, de manera que si un malintencionado entrara un  ‘ OR ‘’=’  el parámetro pass sería ‘ OR ‘’=’ pero al encriptarla sería como  d20da3888278ec814f6a837f260b60df, entonces la consulta generada sería como:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE usuario='yosba' AND contra='d20da3888278ec814f6a837f260b60df'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Y no lo que pretendía el intruso:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT usuario, contra, tipo FROM usuarios WHERE usuario='yosba' AND contra='’ OR ‘’=’' &amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Fuentes ==&lt;br /&gt;
*[http://www.unixwiz.net/techtips/sql-injection.html Inyección SQL]&lt;br /&gt;
*[http://www.forosdelweb.com/f18/ejemplos-inyeccion-sql-314674/ Ejemplos de Inyección SQL]&lt;br /&gt;
*[http://www.maestrosdelweb.com/editorial/inyecsql/ ]&lt;br /&gt;
*[http://www.solingest.com/blog/sql-injection-en-sql-server Inyección SQL en SQL Server] &lt;br /&gt;
[[Category:Bases_de_datos]]&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Inyecci%C3%B3n_SQL&amp;diff=1116237</id>
		<title>Inyección SQL</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Inyecci%C3%B3n_SQL&amp;diff=1116237"/>
		<updated>2011-11-03T21:03:37Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=Inyección SQL&lt;br /&gt;
|familia= Base de Datos&lt;br /&gt;
|imagen=Inyeccion_SQL.png&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
'''Inyección SQL''' es un mecanismo de infiltración de [[código]] malicioso que se vale de una vulnerabilidad [[informática]] que contiene una aplicación en el nivel de validación de las entradas para ejecutar determinadas consultas en una base de datos.&lt;br /&gt;
El origen de la vulnerabilidad radica en el incorrecto chequeo y/o filtrado de las variables utilizadas en un programa que contiene, o bien genera, [[código SQL]].&lt;br /&gt;
 &lt;br /&gt;
==Descripción==&lt;br /&gt;
Se dice que existe o se produjo una inyección [[SQL]] cuando, de alguna manera, se inserta o &amp;quot;inyecta&amp;quot; código SQL invasor dentro del código [[SQL]] programado, con el fin de alterar las funcionalidades normales de la [[aplicación]] y lograr así que se ejecute el código &amp;quot;invasor&amp;quot; incrustado, en la [[base de datos]].&lt;br /&gt;
 &lt;br /&gt;
Este tipo de intrusión normalmente es de carácter malicioso, dañino o espía, por tanto es un problema de [[seguridad informática]], y debe ser tomado en cuenta por el [[programador]] de la [[aplicación]] para poder prevenirlo. Un [[programa]] elaborado con descuido o con ignorancia del problema, podrá resultar ser vulnerable, y la [[seguridad del sistema]] ([[base de datos]]) podrá quedar eventualmente comprometida. La intrusión ocurre durante la ejecución del [[programa]] vulnerable.&lt;br /&gt;
 &lt;br /&gt;
La vulnerabilidad se puede producir automáticamente cuando un programa &amp;quot;arma descuidadamente&amp;quot; una [[sentencia SQL]] en tiempo de ejecución, o bien durante la fase de desarrollo, cuando el programador explicita la sentencia [[SQL]] a ejecutar en forma desprotegida. En cualquier caso, siempre que el [[programador]] necesite y haga uso de parámetros a ingresar por parte del usuario, a efectos de consultar una [[base de datos]]; ya que, justamente, dentro de los parámetros es donde se puede incorporar el [[código SQL]] intruso.&lt;br /&gt;
Al ejecutarse la [[consulta]] en la [[base de datos]], el [[código SQL]] inyectado también se ejecutará y podría efectuar múltiples operaciones sobre la [[aplicación]], como insertar [[registros]], modificar o eliminar datos, autorizar accesos violando [[formularios]] de autenticación, e incluso, ejecutar otro tipo de [[código malicioso]] en la [[computadora]].&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==Ejemplos==&lt;br /&gt;
 &lt;br /&gt;
'''Ej:1'''&lt;br /&gt;
&lt;br /&gt;
Este ejemplo demuestra una posible violación de la entrada a un sistema sin conocer la contraseña.&lt;br /&gt;
//se reciben los datos&lt;br /&gt;
&amp;lt;source lang =&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$us=$_POST['usuario'];&lt;br /&gt;
$pass=$_POST['pass'];&lt;br /&gt;
//se construye la consulta (sin antes filtrar o limpiar los datos) esto es lo vulnerable&lt;br /&gt;
$sql=&amp;quot;SELECT * FROM usuarios WHERE user = '$us' AND password='$pass'&amp;quot;;&lt;br /&gt;
//…&lt;br /&gt;
if(mysql_fetch_array($exc)){&lt;br /&gt;
echo &amp;quot;Inicio de sesión correcto&amp;quot;; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Este es el típico sistema de verificación de contraseñas.&lt;br /&gt;
Utiliza la instrucción '''mysql_fetch_array'''(funcion de mysql, que devuelve '''falso''' si no hay ningún resultado, en la 'querry', o petición), así que si no hay ningún resultado donde el usuario y el password coincidan, el resultado es '''false''' &lt;br /&gt;
 &lt;br /&gt;
'''¿Cómo hacer que devuelva ‘’’true’’’ y permita entrar entrar?'''&lt;br /&gt;
*  Con el password correcto.&lt;br /&gt;
*  Inyectando código malicioso.&lt;br /&gt;
Inyectando código… se haría algo así:&lt;br /&gt;
&lt;br /&gt;
Esta es la petición que solo deja pasar si se conoce el password&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE user = '$us' AND password='$pass'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Ahora, ¿cómo se puede hacer que nos devuelva ‘’’true’’’ aunque no se conozca el password, sabiendo que solo se puede modificar $pass y $us?&lt;br /&gt;
Con un poco de creatividad:&lt;br /&gt;
En el formulario se introduce:&lt;br /&gt;
*  de usuario:    yosba&lt;br /&gt;
*  de password: ' OR ''='&lt;br /&gt;
La sentencia SQL recibirá:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE user = 'yosba' AND password='' OR ''=''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Devolverá '''true''', si hay algún resultado, y como NADA siempre es igual a NADA, devolverá ‘’’true’’’, y así se vurla la ignorancia del programador de este sistema y se entra sin credenciales.&lt;br /&gt;
 &lt;br /&gt;
'''Otros posibles valores que devuelven true son:'''&lt;br /&gt;
*  usuario: yosba AND /*       password: */ ''='&lt;br /&gt;
*  usuario: ' OR 1=1 //&lt;br /&gt;
 &lt;br /&gt;
'''Ej:2'''&lt;br /&gt;
 &lt;br /&gt;
Existe un parámetro &amp;quot;nombreUsuario&amp;quot; que contiene el nombre de usuario a consultar, una inyección SQL se podría provocar de la siguiente forma:&lt;br /&gt;
El código SQL original y vulnerable es:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
consulta := &amp;quot;SELECT * FROM usuarios WHERE nombre = '&amp;quot; + nombreUsuario + &amp;quot;';&amp;quot; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Si se escribe un nombre, por ejemplo &amp;quot;Jorge&amp;quot;, nada anormal sucederá, la aplicación generaría una sentencia SQL similar a la siguiente, que es perfectamente correcta, donde se seleccionarían todos los registros con el nombre &amp;quot;Jorge&amp;quot; en la base de datos:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE nombre = 'Jorge'; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Pero si un intruso escribe como nombre de usuario a consultar:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
Jorge'; DROP TABLE usuarios; SELECT * FROM datos WHERE nombre LIKE '%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Se generaría la siguiente consulta SQL:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE nombre = 'Alicia';&lt;br /&gt;
DROP TABLE usuarios;&lt;br /&gt;
SELECT * FROM datos WHERE nombre LIKE '%';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En la base de datos se ejecutaría la consulta en el orden dado, se seleccionarían todos los registros con el nombre 'Jorge', se borraría la tabla 'usuarios' y finalmente se seleccionaría toda la tabla &amp;quot;datos&amp;quot;, que no debería estar disponible para los usuarios web comunes.&lt;br /&gt;
En resumen, cualquier dato de la base de datos puede quedar disponible para ser leído o modificado por un usuario malintencionado.&lt;br /&gt;
 &lt;br /&gt;
'''Ej:3'''&lt;br /&gt;
Cuando se reciben parámetros por el método ‘’’GET_[]’’’ y no se filtran correctamente las variables:&lt;br /&gt;
En este caso se le pasa al archivo uno.php el parámetro id con valor 4 para ser seleccionado ese registro:&lt;br /&gt;
&amp;lt;a href=&amp;quot;uno.php?id=4&amp;quot;&amp;gt;Noticia 4&amp;lt;/a&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
$result = mysql_query(&amp;quot;SELECT * FROM UNATABLA WHERE id=&amp;quot;.$_GET['id']); &lt;br /&gt;
$row = mysql_fetch_row($result); &amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
...&lt;br /&gt;
Esto sería vulnerable, de manera que si alguien conociendo el nombre de una tabla hace algo así:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
http://tusitio.cu/uno.php?id=1%20UNION%20DROP%20TABLE%20UNATABLA&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
¿Qué pasaría en realidad?:&lt;br /&gt;
Se ejecutaría la siguiente consulta:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
“SELECT * FROM UNATABLA WHERE id=1 UNION DROP TABLE UNATABLA” &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
donde primero selecciona un registro y luego elimina la tabla completa.&lt;br /&gt;
 &lt;br /&gt;
==Formas de evitar los ataques por inyección SQL.==&lt;br /&gt;
'''Importante:''' Qué se hacer para evitar estos errores?&lt;br /&gt;
La inyección SQL es fácil de evitar, por parte del programador, en la mayoría de los lenguajes de programación que permiten desarrollar aplicaciones web. Es muy recomendable siempre validar correctamente los datos evitando que los usuarios puedan entrar caracteres como \ / “ ‘ o cualquier otros que no se correspondan con los datos que se piden.&lt;br /&gt;
'''Ej:1'''&lt;br /&gt;
En el lenguaje PHP, hay diferentes funciones que pueden contrarestar ataques mediante inyección SQL. Para MySQL, la función a usar es '''mysql_real_escape_string''':&lt;br /&gt;
&amp;lt;source lang =&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 $query_result = mysql_query(&amp;quot;SELECT * FROM usuarios WHERE nombre = \&amp;quot;&amp;quot; . mysql_real_escape_string($nombre_usuario) . &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Tanbién con '''str_replace(&amp;quot;x&amp;quot;,&amp;quot;'&amp;quot;,$var)'''&lt;br /&gt;
También con $var=htmlentities(addslashes($var));// Por cada var, aunque por defecto el addslashes está implícito en la config de PHP.&lt;br /&gt;
 &lt;br /&gt;
'''Ej:2'''&lt;br /&gt;
Encriptando las passwords:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$user=$_POST[&amp;quot;user&amp;quot;];&lt;br /&gt;
$pass=$_POST[&amp;quot;pass&amp;quot;];&lt;br /&gt;
 &lt;br /&gt;
//…&lt;br /&gt;
 &lt;br /&gt;
$pass=md5($pass); // La encriptamos.&lt;br /&gt;
$sql = &amp;quot;SELECT * FROM usuarios WHERE usuario='$user' AND contra='$pass'&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Suponiendo que en la  Base de Datos esté almacenada la password encriptada; antes de colocar el parámetro pass en la consulta la encriptamos, de manera que si un malintencionado entrara un  ‘ OR ‘’=’  el parámetro pass sería ‘ OR ‘’=’ pero al encriptarla sería como  d20da3888278ec814f6a837f260b60df, entonces la consulta generada sería como:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM usuarios WHERE usuario='yosba' AND contra='d20da3888278ec814f6a837f260b60df'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Y no lo que pretendía el intruso:&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT usuario, contra, tipo FROM usuarios WHERE usuario='yosba' AND contra='’ OR ‘’=’' &amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Fuentes ==&lt;br /&gt;
*[http://www.unixwiz.net/techtips/sql-injection.html Inyección SQL]&lt;br /&gt;
*[http://www.forosdelweb.com/f18/ejemplos-inyeccion-sql-314674/ Ejemplos de Inyección SQL]&lt;br /&gt;
*[http://www.maestrosdelweb.com/editorial/inyecsql/ Inyección SQL]&lt;br /&gt;
*[http://www.solingest.com/blog/sql-injection-en-sql-server Inyección SQL en SQL Server] &lt;br /&gt;
[[Category:Bases_de_datos]]&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Usuaria_discusi%C3%B3n:Cinformssp_jc&amp;diff=1109487</id>
		<title>Usuaria discusión:Cinformssp jc</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Usuaria_discusi%C3%B3n:Cinformssp_jc&amp;diff=1109487"/>
		<updated>2011-11-02T19:11:55Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: Nueva sección: /* Sobre artículo &amp;quot;Inyección SQL&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Colaborador==&lt;br /&gt;
Disculpa la   molestia, pero quisiera platiarte una  sugerencia, la siguiente es, no   te gustaría pertenecer al  [[Ecugrupo:Lingüística|ecugrupo de   lingüística]], si es que vos esta  interesada en la literatura y   lenguas, si deside entrar a este ecugrupo  solo tienes que contactar a   administrador o co-administrador de este  ecugrupo por la via de   discuciones.&lt;br /&gt;
&lt;br /&gt;
*Administrador [[Usuario:Yoandrys.ssp|Yoandrys Meneses Martín]]&lt;br /&gt;
*Co-administrador [[Usuario:Germainy sld.ssp| Germainy liras Pérez]]&lt;br /&gt;
&lt;br /&gt;
.::Te recomendamos que visites este ecugrupo::.&lt;br /&gt;
&lt;br /&gt;
'''Saludos cordiales.'''&lt;br /&gt;
&lt;br /&gt;
[[Usuario:Yoandrys.ssp]]&lt;br /&gt;
==De Yoandrys==&lt;br /&gt;
Hola misleny tengo un amigo mio del club de colón que quiere tener una cuenta de Ecured necesito que vos le haga una cuanta con el siguiente nombre de usuario Gilberto_ling.ssp el quiere pertenecer al ecugrupo de Lingüística. Cuando le allas creado la cuentas me envias la contraseña a mi página de discución.&lt;br /&gt;
&lt;br /&gt;
'''Saludos cordiales.'''&lt;br /&gt;
&lt;br /&gt;
[[Usuario:Yoandrys.ssp]]&lt;br /&gt;
==sobre artículo agua destilada==&lt;br /&gt;
Colega mislenis nos encontramos enfrancados en una dura y ardua misión la ecured, en el poco tiempo que podemos dedicarle tratamos de hacer lo mejor posible pero en varias ocaciones ya me he encontrado problemas de este tipo, un artículo redirigido o borrado sin una previa discusión con el autor sobre el porque o si es necesario hacer algún cambio, en el artículo que nos concierne agua destilada ¿pudistes encontrar algo dentro de la información con problemas?, porque si no es así creo debias haberte comunicado e informado de las deficiencias que encontraste para así hacer las modificaciones pertinentes y que este continuara en la enciclopedia para ser utilizados por otros, es casi imposible trabajar así, si tenemos que estar vigilando los artículos y no se nos notifican los problemas para hacer las correcciones. tengo toda la información guardada comunícate por favor y hablaremos al respecto, además quiero que sepas que este artículo ya había sido revisado por nuestro moderador, que pasa, no se aceptan las fuentes, se cambian por otras que si se acepten en un final no hay nada copiado textualmente de ninguna fuente todo el texto se reescribió y reelaboró, según conocimientos en la materia y se puso solo lo que creímos pertinente debía ir.&amp;lt;br&amp;gt;&lt;br /&gt;
Si deseas puedes escribirme a mi correo (damaris02024@cav.jovenclub.cu)&amp;lt;br&amp;gt;&lt;br /&gt;
Sin otro asunto que tratar y en espera de su pronta respuesta&lt;br /&gt;
[[Dama_jcmor2.cav]]&lt;br /&gt;
&lt;br /&gt;
==Sobre articulo de erosión marina==&lt;br /&gt;
Hola buenas tardes mire com mucho respeto quisiera saber  porque antes de ser borrar  este artículo no se me fue informado en la discusión, para ver si los problemas que tenía, se podía solucionar, en el joven club que yo trabajo la conexión es malísima y muchas veces tengo que venir a trabajar por la madrugada pues a esa hora es que la conexión sirve, es por ello que le pido encarecidamente que se avise antes de ser borrado un artículo pues nadie sabe el trabajo que se pasa. Saludos&lt;br /&gt;
Sin otro asunto que tratar y en espera de su pronta respuesta&lt;br /&gt;
[[Usuario:Cumanayagua4_jc]]&lt;br /&gt;
&lt;br /&gt;
== Sobre artículo &amp;quot;Inyección SQL&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Necesito que se me informe por qué el artículo no es enciclopédico, o sea, que me de detalles de qué lo hace no enciplopédico; y creo que se debe informar a cada colaborador en su lista de discusión cuando de modifica o borra un artículo.&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Usuaria_discusi%C3%B3n:Cinformssp_jc&amp;diff=1109515</id>
		<title>Usuaria discusión:Cinformssp jc</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Usuaria_discusi%C3%B3n:Cinformssp_jc&amp;diff=1109515"/>
		<updated>2011-11-02T19:03:06Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: /* Sobre artículo &amp;quot;Inyección SQL&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Colaborador==&lt;br /&gt;
Disculpa la   molestia, pero quisiera platiarte una  sugerencia, la siguiente es, no   te gustaría pertenecer al  [[Ecugrupo:Lingüística|ecugrupo de   lingüística]], si es que vos esta  interesada en la literatura y   lenguas, si deside entrar a este ecugrupo  solo tienes que contactar a   administrador o co-administrador de este  ecugrupo por la via de   discuciones.&lt;br /&gt;
&lt;br /&gt;
*Administrador [[Usuario:Yoandrys.ssp|Yoandrys Meneses Martín]]&lt;br /&gt;
*Co-administrador [[Usuario:Germainy sld.ssp| Germainy liras Pérez]]&lt;br /&gt;
&lt;br /&gt;
.::Te recomendamos que visites este ecugrupo::.&lt;br /&gt;
&lt;br /&gt;
'''Saludos cordiales.'''&lt;br /&gt;
&lt;br /&gt;
[[Usuario:Yoandrys.ssp]]&lt;br /&gt;
==De Yoandrys==&lt;br /&gt;
Hola misleny tengo un amigo mio del club de colón que quiere tener una cuenta de Ecured necesito que vos le haga una cuanta con el siguiente nombre de usuario Gilberto_ling.ssp el quiere pertenecer al ecugrupo de Lingüística. Cuando le allas creado la cuentas me envias la contraseña a mi página de discución.&lt;br /&gt;
&lt;br /&gt;
'''Saludos cordiales.'''&lt;br /&gt;
&lt;br /&gt;
[[Usuario:Yoandrys.ssp]]&lt;br /&gt;
==sobre artículo agua destilada==&lt;br /&gt;
Colega mislenis nos encontramos enfrancados en una dura y ardua misión la ecured, en el poco tiempo que podemos dedicarle tratamos de hacer lo mejor posible pero en varias ocaciones ya me he encontrado problemas de este tipo, un artículo redirigido o borrado sin una previa discusión con el autor sobre el porque o si es necesario hacer algún cambio, en el artículo que nos concierne agua destilada ¿pudistes encontrar algo dentro de la información con problemas?, porque si no es así creo debias haberte comunicado e informado de las deficiencias que encontraste para así hacer las modificaciones pertinentes y que este continuara en la enciclopedia para ser utilizados por otros, es casi imposible trabajar así, si tenemos que estar vigilando los artículos y no se nos notifican los problemas para hacer las correcciones. tengo toda la información guardada comunícate por favor y hablaremos al respecto, además quiero que sepas que este artículo ya había sido revisado por nuestro moderador, que pasa, no se aceptan las fuentes, se cambian por otras que si se acepten en un final no hay nada copiado textualmente de ninguna fuente todo el texto se reescribió y reelaboró, según conocimientos en la materia y se puso solo lo que creímos pertinente debía ir.&amp;lt;br&amp;gt;&lt;br /&gt;
Si deseas puedes escribirme a mi correo (damaris02024@cav.jovenclub.cu)&amp;lt;br&amp;gt;&lt;br /&gt;
Sin otro asunto que tratar y en espera de su pronta respuesta&lt;br /&gt;
[[Dama_jcmor2.cav]]&lt;br /&gt;
&lt;br /&gt;
==Sobre articulo de erosión marina==&lt;br /&gt;
Hola buenas tardes mire com mucho respeto quisiera saber  porque antes de ser borrar  este artículo no se me fue informado en la discusión, para ver si los problemas que tenía, se podía solucionar, en el joven club que yo trabajo la conexión es malísima y muchas veces tengo que venir a trabajar por la madrugada pues a esa hora es que la conexión sirve, es por ello que le pido encarecidamente que se avise antes de ser borrado un artículo pues nadie sabe el trabajo que se pasa. Saludos&lt;br /&gt;
Sin otro asunto que tratar y en espera de su pronta respuesta&lt;br /&gt;
[[Usuario:Cumanayagua4_jc]]&lt;br /&gt;
&lt;br /&gt;
== Sobre artículo &amp;quot;Inyección SQL&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Necesito que se me informe por qué el artículo no es enciclopédico, o sea, que me de detalles de qué lo hace no enciclopédico; y creo que se debe informar a cada colaborador en su lista de discusión cuando de modifica o borra un artículo.&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Procedimientos_almacenados&amp;diff=1053706</id>
		<title>Procedimientos almacenados</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Procedimientos_almacenados&amp;diff=1053706"/>
		<updated>2011-10-19T17:31:45Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=Procedimientos almacenados&lt;br /&gt;
|familia= Objetos de Base de Datos&lt;br /&gt;
|imagen=Procedimientos_almacenados.jpg&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
'''Procedimientos almacenados''', son un conjunto de comandos que pueden ser ejecutados directamente en el [[servidor]], es decir, será ejecutado por el servidor de [[Base de  Datos]] y no por el programa cliente que lo accede, permitiendo la  ejecución de una acción o conjunto de acciones especificas.&lt;br /&gt;
==Características==&lt;br /&gt;
Se almacenan  en la propia Base de Datos y constituyen un objeto más dentro de  esta. Tienden a mejorar el rendimiento de los sistemas producto a que reducen  en intercambio entre [[Cliente]] y servidor. Los procedimientos  almacenados son reutilizables, de manera que los usuarios mediante la  aplicación cliente no necesitan relanzar los comandos individuales, sino  que pueden llamar el procedimiento para ejecutarlo en el [[servidor]] tantas veces como sea necesario.&lt;br /&gt;
&lt;br /&gt;
==Utilidades==&lt;br /&gt;
Los '''procedimientos almacenados''' son muy útiles sobre todo en arquitecturas cliente/servidor donde tenemos un servidor muy potente el cual podemos aprovechar para ejecutar procesos, consultas y actualizaciones complejas en la base de datos.&lt;br /&gt;
&lt;br /&gt;
'''Posibles usos que pueden darse a estos objetos de la base de datos:'''&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, si deseamos obtener un reporte complejo que incluya instrucciones condicionales y cálculos complejos con datos obtenidos de varias tablas, un procedimiento almacenado es nuestro mejor aliado. También podemos ejecutar complejos procesos que a veces tardan horas cuando son ejecutados desde el cliente, ya que en tales casos la información debe pasar del servidor al cliente y viceversa. Casi siempre las computadoras servidores son poderosas máquinas con mucha memoria, discos rápidos y uno o más procesadores también muy rápidos. Por lo tanto, al ejecutar los procesos mediante procedimientos almacenados estamos aprovechando toda esa capacidad de cómputo disponible en el [[hardware]] del servidor.&lt;br /&gt;
&lt;br /&gt;
'''Algunos casos en que pueden resultar particularmente útiles:'''&lt;br /&gt;
&lt;br /&gt;
Cuando múltiples aplicaciones cliente se escriben en distintos lenguajes o funcionan en distintas plataformas, pero necesitan realizar la misma operación en la base de datos. &lt;br /&gt;
Cuando la seguridad es muy importante. Los bancos, por ejemplo, usan procedimientos almacenados para todas las operaciones comunes. Esto proporciona un entorno seguro y consistente, y los procedimientos pueden asegurar que cada operación se loguea apropiadamente. En tal entorno, las aplicaciones y los usuarios no obtendrían ningún acceso directo a las tablas de la base de datos, sólo pueden ejectuar algunos procedimientos almacenados. &lt;br /&gt;
&lt;br /&gt;
==Elementos de los procedimientos almacenados==&lt;br /&gt;
'''Los procedimientos almacenados están compuestos por algunos de estos elementos:'''&lt;br /&gt;
* Parámetros de entrada       (pueden esperar parámetros)&lt;br /&gt;
* Parámetros de salida          (pueden devolver resultados)&lt;br /&gt;
* Declaración de variables     (puede usarse variables en su cuerpo)&lt;br /&gt;
* Cuerpo del procedimiento   (en su cuerpo se indican las acciones a realizar)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Tanto los parámetros de entrada como los de salida son opcionales. Podemos tener un procedimiento que no tenga parámetros de entrada, pero sí de salida y viceversa. Como todo buen [[programador]] sabe, los parámetros de entrada sirven para pasarle datos al procedimiento que necesita para llevar a cabo una acción determinada. Los parámetros de salida devuelven al programa cliente que ejecutó el procedimiento el resultado del mismo.&lt;br /&gt;
==Sintaxis==&lt;br /&gt;
Para crear un procedimiento almacenado debemos emplear la sentencia CREATE PROCEDURE.&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 CREATE PROCEDURE &amp;lt;nombre_procedure&amp;gt; [@param1 &amp;lt;tipo&amp;gt;, ...]&lt;br /&gt;
   AS&lt;br /&gt;
  -- Sentencias del procedure&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Para modificar un procedimiento almacenado debemos emplear la sentencia ALTER PROCEDURE.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  ALTER PROCEDURE&amp;lt;nombre_procedure&amp;gt; [@param1 &amp;lt;tipo&amp;gt;, ...]&lt;br /&gt;
   AS &lt;br /&gt;
   -- Sentencias del procedure&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
El siguiente ejemplo muestra un procedimiento almacenado, llamado spu_addCliente que añade clientes, o sea, inserta un registro en la tabla ‘Clientes’: &lt;br /&gt;
&amp;lt;source lang = &amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  CREATE PROCEDURE spu_addCliente @nombre varchar(100),&lt;br /&gt;
                                 @apellidos varchar(100),&lt;br /&gt;
                                 @f_Naciento datetime,&lt;br /&gt;
                                 @email varchar(50)&lt;br /&gt;
    AS&lt;br /&gt;
    INSERT INTO CLIENTES (nombre, apellidos, f_nacimiento, email)&lt;br /&gt;
    VALUES (@nombre, @apellidos, @f_naciento, @email)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Ejemplos==&lt;br /&gt;
 &lt;br /&gt;
El siguiente ejemplo muestra un procedimiento almacenado en SQL Server que inserta un registro en la tabla ‘Inventario’:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  USE [bd_inventario]&lt;br /&gt;
  GO&lt;br /&gt;
  SET ANSI_NULLS ON&lt;br /&gt;
  GO&lt;br /&gt;
  SET QUOTED_IDENTIFIER ON&lt;br /&gt;
  GO&lt;br /&gt;
  -- =============================================&lt;br /&gt;
  -- Autor: Yosbany&lt;br /&gt;
  -- Fecha: &lt;br /&gt;
  -- Descripción:   &lt;br /&gt;
  -- =============================================&lt;br /&gt;
  ALTER PROCEDURE [dbo].[Insertar_Inventario] &lt;br /&gt;
 &lt;br /&gt;
  --Parámetros de entrada&lt;br /&gt;
 &lt;br /&gt;
            @Descripcion char(15) = '',&lt;br /&gt;
            @No_inv char(15),&lt;br /&gt;
            @Marca char(15),&lt;br /&gt;
            @Modelo char(15),&lt;br /&gt;
            @No_serie char(15),&lt;br /&gt;
            @Puesto char(3),&lt;br /&gt;
            @id int = 0&lt;br /&gt;
  AS&lt;br /&gt;
  BEGIN&lt;br /&gt;
            SET NOCOUNT ON;&lt;br /&gt;
 &lt;br /&gt;
    -- Sentencia del procedimiento&lt;br /&gt;
            INSERT INTO Inventario (id, Descripcion, No_inventario, Marca, Modelo, No_serie, Puesto) &lt;br /&gt;
            VALUES(@id, @Descripcion, @No_inv, @Marca, @Modelo, @No_serie, @Puesto);&lt;br /&gt;
  END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Llamando el procedimiento==&lt;br /&gt;
 &lt;br /&gt;
En este caso veremos cómo llamarlo desde el lenguaje de programación C++, usando la tecnología ADO que trae C++Builder6:&lt;br /&gt;
 &lt;br /&gt;
Por ejemplo, si tenemos un procedimiento almacenado que elimina un registro según el id que se le pase, de esta manera, en el gestor [[SQL Server]]:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;sql&amp;quot;&amp;gt; &lt;br /&gt;
  USE [bd_inventario]&lt;br /&gt;
  GO&lt;br /&gt;
  SET ANSI_NULLS ON&lt;br /&gt;
  GO&lt;br /&gt;
  SET QUOTED_IDENTIFIER ON&lt;br /&gt;
  GO&lt;br /&gt;
  -- =============================================&lt;br /&gt;
  -- Author: Yosbany&lt;br /&gt;
  -- Fecha: &lt;br /&gt;
  -- Description:           &lt;br /&gt;
  -- =============================================&lt;br /&gt;
  CREATE PROCEDURE Eliminar_Inventario &lt;br /&gt;
            -- parámetro id por el que va a eliminar. El procedimiento espera este parámetro &lt;br /&gt;
  para eliminar el registro que lo contenga.&lt;br /&gt;
            @id int = 0&lt;br /&gt;
  AS&lt;br /&gt;
  BEGIN&lt;br /&gt;
            SET NOCOUNT ON;&lt;br /&gt;
 &lt;br /&gt;
    -- sentencia del procedimiento&lt;br /&gt;
            DELETE FROM Inventario WHERE id = @id;&lt;br /&gt;
  END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
'''Desde [[C++]] lo llamaríamos así: (Usando el componente ADOStoredProc)'''&lt;br /&gt;
&amp;lt;source lang = &amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
  ADOStoredProc1-&amp;gt;ProcedureName = &amp;quot;Eliminar_inventario&amp;quot;;    //Nombre del procedimiento&lt;br /&gt;
 &lt;br /&gt;
  ADOStoredProc1-&amp;gt;Active=false; // Lo desactivamos&lt;br /&gt;
    TParameters *parameters = ADOStoredProc1-&amp;gt;Parameters;&lt;br /&gt;
    parameters-&amp;gt;Clear();&lt;br /&gt;
 &lt;br /&gt;
    parameters-&amp;gt;AddParameter();   //Añadimos el parámetro que espera el procedimiento&lt;br /&gt;
      (*parameters)[0]-&amp;gt;DataType = ftString;&lt;br /&gt;
      (*parameters)[0]-&amp;gt;Direction = pdInput;&lt;br /&gt;
      (*parameters)[0]-&amp;gt;Size = DBEdit1-&amp;gt;Text.Length();&lt;br /&gt;
      (*parameters)[0]-&amp;gt;Value = DBEdit1-&amp;gt;Text;&lt;br /&gt;
 &lt;br /&gt;
    ADOStoredProc1-&amp;gt;ExecProc();   // Y finalmente lo ejecutamos&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
==Conclusiones==&lt;br /&gt;
Los procedimientos almacenados permiten aprovechar los recursos del [[servidor]], ahorrar tiempo creando consultas complejas desde el servidor y permiten interactuar con otros objetos, generadores, excepciones, tablas y vistas. Por lo tanto, es importante para todo desarrollador utilizarlos correctamente y saber todo lo que se puede hacer con ellos.&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
*[http://dev.mysql.com/doc/refman/5.0/es/stored-procedures.html Procedimientos Almacenados en MySQL] &lt;br /&gt;
*[http://www.devjoker.com/contenidos/catss/238/Procedimientos-almacenados-en-Transact-SQL.aspx Procedimientos almacenados Transact-SQL]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bases_de_datos]]&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Procedimientos_almacenados&amp;diff=1053586</id>
		<title>Procedimientos almacenados</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Procedimientos_almacenados&amp;diff=1053586"/>
		<updated>2011-10-19T17:13:28Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=Procedimientos almacenados&lt;br /&gt;
|familia= Objetos de Base de Datos&lt;br /&gt;
|imagen=Procedimientos_almacenados.jpg&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
'''Procedimientos almacenados''', son un conjunto de comandos que pueden ser ejecutados directamente en el [[servidor]], es decir, será ejecutado por el servidor de [[Base de  Datos]] y no por el programa cliente que lo accede, permitiendo la  ejecución de una acción o conjunto de acciones especificas.&lt;br /&gt;
==Características==&lt;br /&gt;
Se almacenan  en la propia Base de Datos y constituyen un objeto más dentro de  esta. Tienden a mejorar el rendimiento de los sistemas producto a que reducen  en intercambio entre [[Cliente]] y servidor. Los procedimientos  almacenados son reutilizables, de manera que los usuarios mediante la  aplicación cliente no necesitan relanzar los comandos individuales, sino  que pueden llamar el procedimiento para ejecutarlo en el [[servidor]] tantas veces como sea necesario.&lt;br /&gt;
&lt;br /&gt;
==Utilidades==&lt;br /&gt;
Los '''procedimientos almacenados''' son muy útiles sobre todo en arquitecturas cliente/servidor donde tenemos un servidor muy potente el cual podemos aprovechar para ejecutar procesos, consultas y actualizaciones complejas en la base de datos.&lt;br /&gt;
&lt;br /&gt;
'''Posibles usos que pueden darse a estos objetos de la base de datos:'''&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, si deseamos obtener un reporte complejo que incluya instrucciones condicionales y cálculos complejos con datos obtenidos de varias tablas, un procedimiento almacenado es nuestro mejor aliado. También podemos ejecutar complejos procesos que a veces tardan horas cuando son ejecutados desde el cliente, ya que en tales casos la información debe pasar del servidor al cliente y viceversa. Casi siempre las computadoras servidores son poderosas máquinas con mucha memoria, discos rápidos y uno o más procesadores también muy rápidos. Por lo tanto, al ejecutar los procesos mediante procedimientos almacenados estamos aprovechando toda esa capacidad de cómputo disponible en el [[hardware]] del servidor.&lt;br /&gt;
&lt;br /&gt;
'''Algunos casos en que pueden resultar particularmente útiles:'''&lt;br /&gt;
&lt;br /&gt;
Cuando múltiples aplicaciones cliente se escriben en distintos lenguajes o funcionan en distintas plataformas, pero necesitan realizar la misma operación en la base de datos. &lt;br /&gt;
Cuando la seguridad es muy importante. Los bancos, por ejemplo, usan procedimientos almacenados para todas las operaciones comunes. Esto proporciona un entorno seguro y consistente, y los procedimientos pueden asegurar que cada operación se loguea apropiadamente. En tal entorno, las aplicaciones y los usuarios no obtendrían ningún acceso directo a las tablas de la base de datos, sólo pueden ejectuar algunos procedimientos almacenados. &lt;br /&gt;
&lt;br /&gt;
==Elementos de los procedimientos almacenados==&lt;br /&gt;
'''Los procedimientos almacenados están compuestos por algunos de estos elementos:'''&lt;br /&gt;
* Parámetros de entrada       (pueden esperar parámetros)&lt;br /&gt;
* Parámetros de salida          (pueden devolver resultados)&lt;br /&gt;
* Declaración de variables     (puede usarse variables en su cuerpo)&lt;br /&gt;
* Cuerpo del procedimiento   (en su cuerpo se indican las acciones a realizar)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Tanto los parámetros de entrada como los de salida son opcionales. Podemos tener un procedimiento que no tenga parámetros de entrada, pero sí de salida y viceversa. Como todo buen [[programador]] sabe, los parámetros de entrada sirven para pasarle datos al procedimiento que necesita para llevar a cabo una acción determinada. Los parámetros de salida devuelven al programa cliente que ejecutó el procedimiento el resultado del mismo.&lt;br /&gt;
==Sintaxis==&lt;br /&gt;
Para crear un procedimiento almacenado debemos emplear la sentencia CREATE PROCEDURE.&lt;br /&gt;
&amp;lt;source lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  CREATE PROCEDURE &amp;lt;nombre_procedure&amp;gt; [@param1 &amp;lt;tipo&amp;gt;, ...]&lt;br /&gt;
    AS&lt;br /&gt;
    -- Sentencias del procedure&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Para modificar un procedimiento almacenado debemos emplear la sentencia ALTER PROCEDURE.&lt;br /&gt;
  &lt;br /&gt;
    ALTER PROCEDURE&amp;lt;nombre_procedure&amp;gt; [@param1 &amp;lt;tipo&amp;gt;, ...]&lt;br /&gt;
    AS &amp;lt;/source&amp;gt;&lt;br /&gt;
    -- Sentencias del procedure&lt;br /&gt;
El siguiente ejemplo muestra un procedimiento almacenado, llamado spu_addCliente que añade clientes, o sea, inserta un registro en la tabla ‘Clientes’: &lt;br /&gt;
&lt;br /&gt;
  CREATE PROCEDURE spu_addCliente @nombre varchar(100),&lt;br /&gt;
                                 @apellidos varchar(100),&lt;br /&gt;
                                 @f_Naciento datetime,&lt;br /&gt;
                                 @email varchar(50)&lt;br /&gt;
    AS&lt;br /&gt;
    INSERT INTO CLIENTES (nombre, apellidos, f_nacimiento, email)&lt;br /&gt;
    VALUES (@nombre, @apellidos, @f_naciento, @email)&lt;br /&gt;
==Ejemplos==&lt;br /&gt;
 &lt;br /&gt;
El siguiente ejemplo muestra un procedimiento almacenado en SQL Server que inserta un registro en la tabla ‘Inventario’:&lt;br /&gt;
&lt;br /&gt;
  USE [bd_inventario]&lt;br /&gt;
  GO&lt;br /&gt;
  SET ANSI_NULLS ON&lt;br /&gt;
  GO&lt;br /&gt;
  SET QUOTED_IDENTIFIER ON&lt;br /&gt;
  GO&lt;br /&gt;
  -- =============================================&lt;br /&gt;
  -- Autor: Yosbany&lt;br /&gt;
  -- Fecha: &lt;br /&gt;
  -- Descripción:   &lt;br /&gt;
  -- =============================================&lt;br /&gt;
  ALTER PROCEDURE [dbo].[Insertar_Inventario] &lt;br /&gt;
 &lt;br /&gt;
  --Parámetros de entrada&lt;br /&gt;
 &lt;br /&gt;
            @Descripcion char(15) = '',&lt;br /&gt;
            @No_inv char(15),&lt;br /&gt;
            @Marca char(15),&lt;br /&gt;
            @Modelo char(15),&lt;br /&gt;
            @No_serie char(15),&lt;br /&gt;
            @Puesto char(3),&lt;br /&gt;
            @id int = 0&lt;br /&gt;
  AS&lt;br /&gt;
  BEGIN&lt;br /&gt;
            SET NOCOUNT ON;&lt;br /&gt;
 &lt;br /&gt;
    -- Sentencia del procedimiento&lt;br /&gt;
            INSERT INTO Inventario (id, Descripcion, No_inventario, Marca, Modelo, No_serie, Puesto) &lt;br /&gt;
            VALUES(@id, @Descripcion, @No_inv, @Marca, @Modelo, @No_serie, @Puesto);&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Llamando el procedimiento==&lt;br /&gt;
 &lt;br /&gt;
En este caso veremos cómo llamarlo desde el lenguaje de programación C++, usando la tecnología ADO que trae C++Builder6:&lt;br /&gt;
 &lt;br /&gt;
Por ejemplo, si tenemos un procedimiento almacenado que elimina un registro según el id que se le pase, de esta manera, en el gestor [[SQL Server]]:&lt;br /&gt;
  USE [bd_inventario]&lt;br /&gt;
  GO&lt;br /&gt;
  SET ANSI_NULLS ON&lt;br /&gt;
  GO&lt;br /&gt;
  SET QUOTED_IDENTIFIER ON&lt;br /&gt;
  GO&lt;br /&gt;
  -- =============================================&lt;br /&gt;
  -- Author: Yosbany&lt;br /&gt;
  -- Fecha: &lt;br /&gt;
  -- Description:           &lt;br /&gt;
  -- =============================================&lt;br /&gt;
  CREATE PROCEDURE Eliminar_Inventario &lt;br /&gt;
            -- parámetro id por el que va a eliminar. El procedimiento espera este parámetro &lt;br /&gt;
  para eliminar el registro que lo contenga.&lt;br /&gt;
            @id int = 0&lt;br /&gt;
  AS&lt;br /&gt;
  BEGIN&lt;br /&gt;
            SET NOCOUNT ON;&lt;br /&gt;
 &lt;br /&gt;
    -- sentencia del procedimiento&lt;br /&gt;
            DELETE FROM Inventario WHERE id = @id;&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
Desde [[C++]] lo llamaríamos así: (Usando el componente ADOStoredProc)&lt;br /&gt;
 &lt;br /&gt;
  ADOStoredProc1-&amp;gt;ProcedureName = &amp;quot;Eliminar_inventario&amp;quot;;    //Nombre del procedimiento&lt;br /&gt;
 &lt;br /&gt;
  ADOStoredProc1-&amp;gt;Active=false; // Lo desactivamos&lt;br /&gt;
    TParameters *parameters = ADOStoredProc1-&amp;gt;Parameters;&lt;br /&gt;
    parameters-&amp;gt;Clear();&lt;br /&gt;
 &lt;br /&gt;
    parameters-&amp;gt;AddParameter();   //Añadimos el parámetro que espera el procedimiento&lt;br /&gt;
      (*parameters)[0]-&amp;gt;DataType = ftString;&lt;br /&gt;
      (*parameters)[0]-&amp;gt;Direction = pdInput;&lt;br /&gt;
      (*parameters)[0]-&amp;gt;Size = DBEdit1-&amp;gt;Text.Length();&lt;br /&gt;
      (*parameters)[0]-&amp;gt;Value = DBEdit1-&amp;gt;Text;&lt;br /&gt;
 &lt;br /&gt;
    ADOStoredProc1-&amp;gt;ExecProc();   // Y finalmente lo ejecutamos&lt;br /&gt;
 &lt;br /&gt;
==Conclusiones==&lt;br /&gt;
Los procedimientos almacenados permiten aprovechar los recursos del [[servidor]], ahorrar tiempo creando consultas complejas desde el servidor y permiten interactuar con otros objetos, generadores, excepciones, tablas y vistas. Por lo tanto, es importante para todo desarrollador utilizarlos correctamente y saber todo lo que se puede hacer con ellos.&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
*[http://dev.mysql.com/doc/refman/5.0/es/stored-procedures.html Procedimientos Almacenados en MySQL] &lt;br /&gt;
*[http://www.devjoker.com/contenidos/catss/238/Procedimientos-almacenados-en-Transact-SQL.aspx Procedimientos almacenados Transact-SQL]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bases_de_datos]]&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Procedimientos_almacenados&amp;diff=1053575</id>
		<title>Procedimientos almacenados</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Procedimientos_almacenados&amp;diff=1053575"/>
		<updated>2011-10-19T17:11:51Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=Procedimientos almacenados&lt;br /&gt;
|familia= Objetos de Base de Datos&lt;br /&gt;
|imagen=Procedimientos_almacenados.jpg&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
'''Procedimientos almacenados''', son un conjunto de comandos que pueden ser ejecutados directamente en el [[servidor]], es decir, será ejecutado por el servidor de [[Base de  Datos]] y no por el programa cliente que lo accede, permitiendo la  ejecución de una acción o conjunto de acciones especificas.&lt;br /&gt;
==Características==&lt;br /&gt;
Se almacenan  en la propia Base de Datos y constituyen un objeto más dentro de  esta. Tienden a mejorar el rendimiento de los sistemas producto a que reducen  en intercambio entre [[Cliente]] y servidor. Los procedimientos  almacenados son reutilizables, de manera que los usuarios mediante la  aplicación cliente no necesitan relanzar los comandos individuales, sino  que pueden llamar el procedimiento para ejecutarlo en el [[servidor]] tantas veces como sea necesario.&lt;br /&gt;
&lt;br /&gt;
==Utilidades==&lt;br /&gt;
Los '''procedimientos almacenados''' son muy útiles sobre todo en arquitecturas cliente/servidor donde tenemos un servidor muy potente el cual podemos aprovechar para ejecutar procesos, consultas y actualizaciones complejas en la base de datos.&lt;br /&gt;
&lt;br /&gt;
'''Posibles usos que pueden darse a estos objetos de la base de datos:'''&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, si deseamos obtener un reporte complejo que incluya instrucciones condicionales y cálculos complejos con datos obtenidos de varias tablas, un procedimiento almacenado es nuestro mejor aliado. También podemos ejecutar complejos procesos que a veces tardan horas cuando son ejecutados desde el cliente, ya que en tales casos la información debe pasar del servidor al cliente y viceversa. Casi siempre las computadoras servidores son poderosas máquinas con mucha memoria, discos rápidos y uno o más procesadores también muy rápidos. Por lo tanto, al ejecutar los procesos mediante procedimientos almacenados estamos aprovechando toda esa capacidad de cómputo disponible en el [[hardware]] del servidor.&lt;br /&gt;
&lt;br /&gt;
'''Algunos casos en que pueden resultar particularmente útiles:'''&lt;br /&gt;
&lt;br /&gt;
Cuando múltiples aplicaciones cliente se escriben en distintos lenguajes o funcionan en distintas plataformas, pero necesitan realizar la misma operación en la base de datos. &lt;br /&gt;
Cuando la seguridad es muy importante. Los bancos, por ejemplo, usan procedimientos almacenados para todas las operaciones comunes. Esto proporciona un entorno seguro y consistente, y los procedimientos pueden asegurar que cada operación se loguea apropiadamente. En tal entorno, las aplicaciones y los usuarios no obtendrían ningún acceso directo a las tablas de la base de datos, sólo pueden ejectuar algunos procedimientos almacenados. &lt;br /&gt;
&lt;br /&gt;
==Elementos de los procedimientos almacenados==&lt;br /&gt;
'''Los procedimientos almacenados están compuestos por algunos de estos elementos:'''&lt;br /&gt;
* Parámetros de entrada       (pueden esperar parámetros)&lt;br /&gt;
* Parámetros de salida          (pueden devolver resultados)&lt;br /&gt;
* Declaración de variables     (puede usarse variables en su cuerpo)&lt;br /&gt;
* Cuerpo del procedimiento   (en su cuerpo se indican las acciones a realizar)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Tanto los parámetros de entrada como los de salida son opcionales. Podemos tener un procedimiento que no tenga parámetros de entrada, pero sí de salida y viceversa. Como todo buen [[programador]] sabe, los parámetros de entrada sirven para pasarle datos al procedimiento que necesita para llevar a cabo una acción determinada. Los parámetros de salida devuelven al programa cliente que ejecutó el procedimiento el resultado del mismo.&lt;br /&gt;
==Sintaxis==&lt;br /&gt;
Para crear un procedimiento almacenado debemos emplear la sentencia CREATE PROCEDURE.&lt;br /&gt;
&amp;lt;sourse lang =&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  CREATE PROCEDURE &amp;lt;nombre_procedure&amp;gt; [@param1 &amp;lt;tipo&amp;gt;, ...]&lt;br /&gt;
    AS&lt;br /&gt;
    -- Sentencias del procedure&lt;br /&gt;
&amp;lt;/sourse&amp;gt;&lt;br /&gt;
Para modificar un procedimiento almacenado debemos emplear la sentencia ALTER PROCEDURE.&lt;br /&gt;
  &lt;br /&gt;
    ALTER PROCEDURE&amp;lt;nombre_procedure&amp;gt; [@param1 &amp;lt;tipo&amp;gt;, ...]&lt;br /&gt;
    AS &amp;lt;/source&amp;gt;&lt;br /&gt;
    -- Sentencias del procedure&lt;br /&gt;
El siguiente ejemplo muestra un procedimiento almacenado, llamado spu_addCliente que añade clientes, o sea, inserta un registro en la tabla ‘Clientes’: &lt;br /&gt;
&lt;br /&gt;
  CREATE PROCEDURE spu_addCliente @nombre varchar(100),&lt;br /&gt;
                                 @apellidos varchar(100),&lt;br /&gt;
                                 @f_Naciento datetime,&lt;br /&gt;
                                 @email varchar(50)&lt;br /&gt;
    AS&lt;br /&gt;
    INSERT INTO CLIENTES (nombre, apellidos, f_nacimiento, email)&lt;br /&gt;
    VALUES (@nombre, @apellidos, @f_naciento, @email)&lt;br /&gt;
==Ejemplos==&lt;br /&gt;
 &lt;br /&gt;
El siguiente ejemplo muestra un procedimiento almacenado en SQL Server que inserta un registro en la tabla ‘Inventario’:&lt;br /&gt;
&lt;br /&gt;
  USE [bd_inventario]&lt;br /&gt;
  GO&lt;br /&gt;
  SET ANSI_NULLS ON&lt;br /&gt;
  GO&lt;br /&gt;
  SET QUOTED_IDENTIFIER ON&lt;br /&gt;
  GO&lt;br /&gt;
  -- =============================================&lt;br /&gt;
  -- Autor: Yosbany&lt;br /&gt;
  -- Fecha: &lt;br /&gt;
  -- Descripción:   &lt;br /&gt;
  -- =============================================&lt;br /&gt;
  ALTER PROCEDURE [dbo].[Insertar_Inventario] &lt;br /&gt;
 &lt;br /&gt;
  --Parámetros de entrada&lt;br /&gt;
 &lt;br /&gt;
            @Descripcion char(15) = '',&lt;br /&gt;
            @No_inv char(15),&lt;br /&gt;
            @Marca char(15),&lt;br /&gt;
            @Modelo char(15),&lt;br /&gt;
            @No_serie char(15),&lt;br /&gt;
            @Puesto char(3),&lt;br /&gt;
            @id int = 0&lt;br /&gt;
  AS&lt;br /&gt;
  BEGIN&lt;br /&gt;
            SET NOCOUNT ON;&lt;br /&gt;
 &lt;br /&gt;
    -- Sentencia del procedimiento&lt;br /&gt;
            INSERT INTO Inventario (id, Descripcion, No_inventario, Marca, Modelo, No_serie, Puesto) &lt;br /&gt;
            VALUES(@id, @Descripcion, @No_inv, @Marca, @Modelo, @No_serie, @Puesto);&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Llamando el procedimiento==&lt;br /&gt;
 &lt;br /&gt;
En este caso veremos cómo llamarlo desde el lenguaje de programación C++, usando la tecnología ADO que trae C++Builder6:&lt;br /&gt;
 &lt;br /&gt;
Por ejemplo, si tenemos un procedimiento almacenado que elimina un registro según el id que se le pase, de esta manera, en el gestor [[SQL Server]]:&lt;br /&gt;
  USE [bd_inventario]&lt;br /&gt;
  GO&lt;br /&gt;
  SET ANSI_NULLS ON&lt;br /&gt;
  GO&lt;br /&gt;
  SET QUOTED_IDENTIFIER ON&lt;br /&gt;
  GO&lt;br /&gt;
  -- =============================================&lt;br /&gt;
  -- Author: Yosbany&lt;br /&gt;
  -- Fecha: &lt;br /&gt;
  -- Description:           &lt;br /&gt;
  -- =============================================&lt;br /&gt;
  CREATE PROCEDURE Eliminar_Inventario &lt;br /&gt;
            -- parámetro id por el que va a eliminar. El procedimiento espera este parámetro &lt;br /&gt;
  para eliminar el registro que lo contenga.&lt;br /&gt;
            @id int = 0&lt;br /&gt;
  AS&lt;br /&gt;
  BEGIN&lt;br /&gt;
            SET NOCOUNT ON;&lt;br /&gt;
 &lt;br /&gt;
    -- sentencia del procedimiento&lt;br /&gt;
            DELETE FROM Inventario WHERE id = @id;&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
Desde [[C++]] lo llamaríamos así: (Usando el componente ADOStoredProc)&lt;br /&gt;
 &lt;br /&gt;
  ADOStoredProc1-&amp;gt;ProcedureName = &amp;quot;Eliminar_inventario&amp;quot;;    //Nombre del procedimiento&lt;br /&gt;
 &lt;br /&gt;
  ADOStoredProc1-&amp;gt;Active=false; // Lo desactivamos&lt;br /&gt;
    TParameters *parameters = ADOStoredProc1-&amp;gt;Parameters;&lt;br /&gt;
    parameters-&amp;gt;Clear();&lt;br /&gt;
 &lt;br /&gt;
    parameters-&amp;gt;AddParameter();   //Añadimos el parámetro que espera el procedimiento&lt;br /&gt;
      (*parameters)[0]-&amp;gt;DataType = ftString;&lt;br /&gt;
      (*parameters)[0]-&amp;gt;Direction = pdInput;&lt;br /&gt;
      (*parameters)[0]-&amp;gt;Size = DBEdit1-&amp;gt;Text.Length();&lt;br /&gt;
      (*parameters)[0]-&amp;gt;Value = DBEdit1-&amp;gt;Text;&lt;br /&gt;
 &lt;br /&gt;
    ADOStoredProc1-&amp;gt;ExecProc();   // Y finalmente lo ejecutamos&lt;br /&gt;
 &lt;br /&gt;
==Conclusiones==&lt;br /&gt;
Los procedimientos almacenados permiten aprovechar los recursos del [[servidor]], ahorrar tiempo creando consultas complejas desde el servidor y permiten interactuar con otros objetos, generadores, excepciones, tablas y vistas. Por lo tanto, es importante para todo desarrollador utilizarlos correctamente y saber todo lo que se puede hacer con ellos.&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
*[http://dev.mysql.com/doc/refman/5.0/es/stored-procedures.html Procedimientos Almacenados en MySQL] &lt;br /&gt;
*[http://www.devjoker.com/contenidos/catss/238/Procedimientos-almacenados-en-Transact-SQL.aspx Procedimientos almacenados Transact-SQL]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bases_de_datos]]&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Procedimientos_almacenados&amp;diff=1051699</id>
		<title>Procedimientos almacenados</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Procedimientos_almacenados&amp;diff=1051699"/>
		<updated>2011-10-19T13:23:37Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=Procedimientos almacenados&lt;br /&gt;
|familia= Objetos de Base de Datos&lt;br /&gt;
|imagen=Procedimientos_almacenados.jpg&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
'''Procedimientos almacenados''', son un conjunto de comandos que pueden ser ejecutados directamente en el [[servidor]], es decir, será ejecutado por el servidor de [[Base de  Datos]] y no por el programa cliente que lo accede, permitiendo la  ejecución de una acción o conjunto de acciones especificas.&lt;br /&gt;
==Características==&lt;br /&gt;
Se almacenan  en la propia Base de Datos y constituyen un objeto más dentro de  esta. Tienden a mejorar el rendimiento de los sistemas producto a que reducen  en intercambio entre [[Cliente]] y servidor. Los procedimientos  almacenados son reutilizables, de manera que los usuarios mediante la  aplicación cliente no necesitan relanzar los comandos individuales, sino  que pueden llamar el procedimiento para ejecutarlo en el [[servidor]] tantas veces como sea necesario.&lt;br /&gt;
&lt;br /&gt;
==Utilidades==&lt;br /&gt;
Los '''procedimientos almacenados''' son muy útiles sobre todo en arquitecturas cliente/servidor donde tenemos un servidor muy potente el cual podemos aprovechar para ejecutar procesos, consultas y actualizaciones complejas en la base de datos.&lt;br /&gt;
&lt;br /&gt;
'''Posibles usos que pueden darse a estos objetos de la base de datos:'''&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, si deseamos obtener un reporte complejo que incluya instrucciones condicionales y cálculos complejos con datos obtenidos de varias tablas, un procedimiento almacenado es nuestro mejor aliado. También podemos ejecutar complejos procesos que a veces tardan horas cuando son ejecutados desde el cliente, ya que en tales casos la información debe pasar del servidor al cliente y viceversa. Casi siempre las computadoras servidores son poderosas máquinas con mucha memoria, discos rápidos y uno o más procesadores también muy rápidos. Por lo tanto, al ejecutar los procesos mediante procedimientos almacenados estamos aprovechando toda esa capacidad de cómputo disponible en el [[hardware]] del servidor.&lt;br /&gt;
&lt;br /&gt;
'''Algunos casos en que pueden resultar particularmente útiles:'''&lt;br /&gt;
&lt;br /&gt;
Cuando múltiples aplicaciones cliente se escriben en distintos lenguajes o funcionan en distintas plataformas, pero necesitan realizar la misma operación en la base de datos. &lt;br /&gt;
Cuando la seguridad es muy importante. Los bancos, por ejemplo, usan procedimientos almacenados para todas las operaciones comunes. Esto proporciona un entorno seguro y consistente, y los procedimientos pueden asegurar que cada operación se loguea apropiadamente. En tal entorno, las aplicaciones y los usuarios no obtendrían ningún acceso directo a las tablas de la base de datos, sólo pueden ejectuar algunos procedimientos almacenados. &lt;br /&gt;
&lt;br /&gt;
==Elementos de los procedimientos almacenados==&lt;br /&gt;
'''Los procedimientos almacenados están compuestos por algunos de estos elementos:'''&lt;br /&gt;
* Parámetros de entrada       (pueden esperar parámetros)&lt;br /&gt;
* Parámetros de salida          (pueden devolver resultados)&lt;br /&gt;
* Declaración de variables     (puede usarse variables en su cuerpo)&lt;br /&gt;
* Cuerpo del procedimiento   (en su cuerpo se indican las acciones a realizar)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Tanto los parámetros de entrada como los de salida son opcionales. Podemos tener un procedimiento que no tenga parámetros de entrada, pero sí de salida y viceversa. Como todo buen [[programador]] sabe, los parámetros de entrada sirven para pasarle datos al procedimiento que necesita para llevar a cabo una acción determinada. Los parámetros de salida devuelven al programa cliente que ejecutó el procedimiento el resultado del mismo.&lt;br /&gt;
==Sintaxis==&lt;br /&gt;
Para crear un procedimiento almacenado debemos emplear la sentencia CREATE PROCEDURE.&lt;br /&gt;
&lt;br /&gt;
  CREATE PROCEDURE &amp;lt;nombre_procedure&amp;gt; [@param1 &amp;lt;tipo&amp;gt;, ...]&lt;br /&gt;
    AS&lt;br /&gt;
    -- Sentencias del procedure&lt;br /&gt;
Para modificar un procedimiento almacenado debemos emplear la sentencia ALTER PROCEDURE.&lt;br /&gt;
  &lt;br /&gt;
    ALTER PROCEDURE&amp;lt;nombre_procedure&amp;gt; [@param1 &amp;lt;tipo&amp;gt;, ...]&lt;br /&gt;
    AS &amp;lt;/source&amp;gt;&lt;br /&gt;
    -- Sentencias del procedure&lt;br /&gt;
El siguiente ejemplo muestra un procedimiento almacenado, llamado spu_addCliente que añade clientes, o sea, inserta un registro en la tabla ‘Clientes’: &lt;br /&gt;
&lt;br /&gt;
  CREATE PROCEDURE spu_addCliente @nombre varchar(100),&lt;br /&gt;
                                 @apellidos varchar(100),&lt;br /&gt;
                                 @f_Naciento datetime,&lt;br /&gt;
                                 @email varchar(50)&lt;br /&gt;
    AS&lt;br /&gt;
    INSERT INTO CLIENTES (nombre, apellidos, f_nacimiento, email)&lt;br /&gt;
    VALUES (@nombre, @apellidos, @f_naciento, @email)&lt;br /&gt;
==Ejemplos==&lt;br /&gt;
 &lt;br /&gt;
El siguiente ejemplo muestra un procedimiento almacenado en SQL Server que inserta un registro en la tabla ‘Inventario’:&lt;br /&gt;
&lt;br /&gt;
  USE [bd_inventario]&lt;br /&gt;
  GO&lt;br /&gt;
  SET ANSI_NULLS ON&lt;br /&gt;
  GO&lt;br /&gt;
  SET QUOTED_IDENTIFIER ON&lt;br /&gt;
  GO&lt;br /&gt;
  -- =============================================&lt;br /&gt;
  -- Autor: Yosbany&lt;br /&gt;
  -- Fecha: &lt;br /&gt;
  -- Descripción:   &lt;br /&gt;
  -- =============================================&lt;br /&gt;
  ALTER PROCEDURE [dbo].[Insertar_Inventario] &lt;br /&gt;
 &lt;br /&gt;
  --Parámetros de entrada&lt;br /&gt;
 &lt;br /&gt;
            @Descripcion char(15) = '',&lt;br /&gt;
            @No_inv char(15),&lt;br /&gt;
            @Marca char(15),&lt;br /&gt;
            @Modelo char(15),&lt;br /&gt;
            @No_serie char(15),&lt;br /&gt;
            @Puesto char(3),&lt;br /&gt;
            @id int = 0&lt;br /&gt;
  AS&lt;br /&gt;
  BEGIN&lt;br /&gt;
            SET NOCOUNT ON;&lt;br /&gt;
 &lt;br /&gt;
    -- Sentencia del procedimiento&lt;br /&gt;
            INSERT INTO Inventario (id, Descripcion, No_inventario, Marca, Modelo, No_serie, Puesto) &lt;br /&gt;
            VALUES(@id, @Descripcion, @No_inv, @Marca, @Modelo, @No_serie, @Puesto);&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Llamando el procedimiento==&lt;br /&gt;
 &lt;br /&gt;
En este caso veremos cómo llamarlo desde el lenguaje de programación C++, usando la tecnología ADO que trae C++Builder6:&lt;br /&gt;
 &lt;br /&gt;
Por ejemplo, si tenemos un procedimiento almacenado que elimina un registro según el id que se le pase, de esta manera, en el gestor [[SQL Server]]:&lt;br /&gt;
  USE [bd_inventario]&lt;br /&gt;
  GO&lt;br /&gt;
  SET ANSI_NULLS ON&lt;br /&gt;
  GO&lt;br /&gt;
  SET QUOTED_IDENTIFIER ON&lt;br /&gt;
  GO&lt;br /&gt;
  -- =============================================&lt;br /&gt;
  -- Author: Yosbany&lt;br /&gt;
  -- Fecha: &lt;br /&gt;
  -- Description:           &lt;br /&gt;
  -- =============================================&lt;br /&gt;
  CREATE PROCEDURE Eliminar_Inventario &lt;br /&gt;
            -- parámetro id por el que va a eliminar. El procedimiento espera este parámetro &lt;br /&gt;
  para eliminar el registro que lo contenga.&lt;br /&gt;
            @id int = 0&lt;br /&gt;
  AS&lt;br /&gt;
  BEGIN&lt;br /&gt;
            SET NOCOUNT ON;&lt;br /&gt;
 &lt;br /&gt;
    -- sentencia del procedimiento&lt;br /&gt;
            DELETE FROM Inventario WHERE id = @id;&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
Desde [[C++]] lo llamaríamos así: (Usando el componente ADOStoredProc)&lt;br /&gt;
 &lt;br /&gt;
  ADOStoredProc1-&amp;gt;ProcedureName = &amp;quot;Eliminar_inventario&amp;quot;;    //Nombre del procedimiento&lt;br /&gt;
 &lt;br /&gt;
  ADOStoredProc1-&amp;gt;Active=false; // Lo desactivamos&lt;br /&gt;
    TParameters *parameters = ADOStoredProc1-&amp;gt;Parameters;&lt;br /&gt;
    parameters-&amp;gt;Clear();&lt;br /&gt;
 &lt;br /&gt;
    parameters-&amp;gt;AddParameter();   //Añadimos el parámetro que espera el procedimiento&lt;br /&gt;
      (*parameters)[0]-&amp;gt;DataType = ftString;&lt;br /&gt;
      (*parameters)[0]-&amp;gt;Direction = pdInput;&lt;br /&gt;
      (*parameters)[0]-&amp;gt;Size = DBEdit1-&amp;gt;Text.Length();&lt;br /&gt;
      (*parameters)[0]-&amp;gt;Value = DBEdit1-&amp;gt;Text;&lt;br /&gt;
 &lt;br /&gt;
    ADOStoredProc1-&amp;gt;ExecProc();   // Y finalmente lo ejecutamos&lt;br /&gt;
 &lt;br /&gt;
==Conclusiones==&lt;br /&gt;
Los procedimientos almacenados permiten aprovechar los recursos del [[servidor]], ahorrar tiempo creando consultas complejas desde el servidor y permiten interactuar con otros objetos, generadores, excepciones, tablas y vistas. Por lo tanto, es importante para todo desarrollador utilizarlos correctamente y saber todo lo que se puede hacer con ellos.&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
*[http://dev.mysql.com/doc/refman/5.0/es/stored-procedures.html Procedimientos Almacenados en MySQL] &lt;br /&gt;
*[http://www.devjoker.com/contenidos/catss/238/Procedimientos-almacenados-en-Transact-SQL.aspx Procedimientos almacenados Transact-SQL]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bases_de_datos]]&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=PostgreSQL&amp;diff=1037316</id>
		<title>PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=PostgreSQL&amp;diff=1037316"/>
		<updated>2011-10-14T21:22:44Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=PostgreSQL&lt;br /&gt;
|familia=&lt;br /&gt;
|imagen=Logo_postgresql.png&lt;br /&gt;
|tamaño=&lt;br /&gt;
|descripción=Sistema de gestión de base de datos relacional orientada a objetos y libre&lt;br /&gt;
|imagen2=&lt;br /&gt;
|tamaño2=&lt;br /&gt;
|descripción2=&lt;br /&gt;
|creador=PostgreSQL Global Development Group&lt;br /&gt;
|desarrollador=&lt;br /&gt;
|diseñador=&lt;br /&gt;
|modelo de desarrollo=&lt;br /&gt;
|lanzamiento inicial=&lt;br /&gt;
|versiones=&lt;br /&gt;
|última versión estable=9.0 - [[20 de septiembre de 2010]]&lt;br /&gt;
|género=[[RDBMS]]&lt;br /&gt;
|sistemas operativos=[[Multiplataforma]]&lt;br /&gt;
|idioma=&lt;br /&gt;
|licencia=[[BSD]]&lt;br /&gt;
|premios=&lt;br /&gt;
|web=http://www.postgresql.org&lt;br /&gt;
}}'''PostgreSQL''' es un sistema de gestión de base de datos relacional orientada a objetos y libre, publicado bajo la licencia [[BSD]]. &lt;br /&gt;
&lt;br /&gt;
Como muchos otros proyectos de [[Código abierto]], el desarrollo de PostgreSQL no es manejado por una sola empresa sino que es dirigido por una comunidad de desarrolladores y organizaciones comerciales las cuales trabajan en su desarrollo. Dicha comunidad es denominada el PGDG (PostgreSQL Global Development Group). &lt;br /&gt;
&lt;br /&gt;
== Nombre del producto ==&lt;br /&gt;
&lt;br /&gt;
El uso de caracteres en mayúscula en el nombre PostgreSQL puede confundir a algunas personas a primera vista. Las distintas pronunciaciones de &amp;quot;SQL&amp;quot; pueden llevar a confusión. Los desarrolladores de PostgreSQL lo pronuncian /poːst ɡɹɛs kjuː ɛl/;. Es también común oír abreviadamente como simplemente &amp;quot;Postgres&amp;quot;, el que fue su nombre original. Debido a su soporte del estándar SQL entre la mayor parte de bases de datos relacionales, la comunidad consideró cambiar el nombre al anterior Postgres. Sin embargo, el PostgreSQL Core Team anunció en 2007 que el producto seguiría llamándose PostgreSQL. El nombre hace referencia a los orígenes del proyecto como la base de datos &amp;quot;post-Ingres&amp;quot;, y los autores originales también desarrollaron la base de datos Ingres. &lt;br /&gt;
&lt;br /&gt;
== Historia ==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL ha tenido una larga evolución, la cual se inicia en [[1982]] con el proyecto Ingres en la [[Universidad de Berkeley]]. Este proyecto, liderado por Michael Stonebraker, fue uno de los primeros intentos en implementar un motor de base de datos relacional. Después de haber trabajado un largo tiempo en Ingres y de haber tenido una experiencia comercial con él mismo, Michael decidió volver a la Universidad en [[1985]] para trabajar en un nuevo proyecto sobre la experiencia de Ingres, dicho proyecto fue llamado post-ingres o simplemente POSTGRES. &lt;br /&gt;
&lt;br /&gt;
El proyecto post-ingres pretendía resolver los problemas con el modelo de base de datos relacional que habían sido aclarados a comienzos de los años 1980. El principal de estos problemas era la incapacidad del modelo relacional de comprender &amp;quot;tipos&amp;quot;, es decir, combinaciones de datos simples que conforman una única unidad. Actualmente estos son llamados objetos. Se esforzaron en introducir la menor cantidad posible de funcionalidades para completar el soporte de tipos. Estas funcionalidades incluían la habilidad de definir tipos, pero también la habilidad de describir relaciones - las cuales hasta ese momento eran ampliamente utilizadas pero mantenidas completamente por el usuario. En Postgres la base de datos «comprendía» las relaciones y podía obtener información de tablas relacionadas utilizando reglas. Postgres usó muchas ideas de Ingres pero no su código. &lt;br /&gt;
&lt;br /&gt;
La siguiente lista muestra los hitos más importantes en la vida del proyecto Postgres. &lt;br /&gt;
&lt;br /&gt;
*1986: se publicaron varios papers que describían las bases del sistema. &lt;br /&gt;
*1988: ya se contaba con una versión utilizable. &lt;br /&gt;
*1989: el grupo publicaba la versión 1 para una pequeña comunidad de usuarios. &lt;br /&gt;
*1990: se publicaba la versión 2 la cual tenía prácticamente reescrito el sistema de reglas. &lt;br /&gt;
*1991: publicación de la versión 3, esta añadía la capacidad de múltiples motores de almacenamiento. &lt;br /&gt;
*1993: crecimiento importante de la comunidad de usuarios, la cual demandaba más características. &lt;br /&gt;
*1994: después de la publicación de la versión 4, el proyecto terminó y el grupo se disolvió.&lt;br /&gt;
&lt;br /&gt;
Después de que el proyecto POSTGRES' terminara, dos graduados de la universidad, Andrew Yu y Jolly Chen, comenzaron a trabajar sobre el código de POSTGRES, esto fue posible dado que POSTGRES estaba licenciado bajo la [[BSD]], y lo primero que hicieron fue añadir soporte para el lenguaje SQL a POSTGRES, dado que anteriormente contaba con un intérprete del lenguaje de consultas QUEL (basado en Ingres), creando así el sistema al cual denominaron Postgres95. &lt;br /&gt;
&lt;br /&gt;
Para el año [[1996]] se unieron al proyecto personas ajenas a la Universidad como Marc Fournier de Hub.Org Networking Services, Bruce Momjian y Vadim B. Mikheev quienes proporcionaron el primer servidor de desarrollo no universitario para el esfuerzo de desarrollo de código abierto y comenzaron a trabajar para estabilizar el código de Postgres95. &lt;br /&gt;
&lt;br /&gt;
En el año [[1996]] decidieron cambiar el nombre de Postgres95 de tal modo que refleje la característica del lenguaje SQL y lo terminaron llamando PostgreSQL, cuya primera versión de código abierto fue lanzada el 1 de agosto de 1996. La primera versión formal de PostgreSQL (6.0) fue liberada en enero de 1997. Desde entonces, muchos desarrolladores entusiastas de los motores de base de datos se unieron al proyecto, coordinaron vía Internet y entre todos comenzaron a incorporar muchas características al motor. &lt;br /&gt;
&lt;br /&gt;
Aunque la licencia permitía la comercialización de PostgreSQL, el código no se desarrolló en principio con fines comerciales, algo sorprendente considerando las ventajas que PostgreSQL ofrecía. La principal derivación se originó cuando Paula Hawthtorn (un miembro del equipo original de Ingres que se pasó a Postgres) y Michael Stonebraker conformaron Illustra Information Technologies para comercializar Postgres. &lt;br /&gt;
&lt;br /&gt;
En [[2000]], ex inversionistas de [[Red Hat]] crearon la empresa Great Bridge para comercializar PostgreSQL y competir contra proveedores comerciales de bases de datos. Great Bridge auspició a varios desarrolladores de PostgreSQL y donó recursos de vuelta a la comunidad, pero a fines de 2001 cerró debido a la dura competencia de compañías como Red Hat y pobres condiciones del mercado. &lt;br /&gt;
&lt;br /&gt;
En [[2001]], Command Prompt, Inc. lanzó Mammonth PostgreSQL, la más antigua distribución comercial de PostgreSQL. Continúa brindando soporte a la comunidad PostgreSQL a través del auspicio de desarrolladores y proyectos, incluyendo PL/Perl, PL/php y el alojamiento de proyectos de comunidades como PostgreSQL Build Farm. &lt;br /&gt;
&lt;br /&gt;
En enero de [[2005]], PostgreSQL recibió apoyo del proveedor de base de datos Pervasive Software, conocido por su producto Btrieve que se utilizaba en la plataforma Novell Netware, Pervasive anunció soporte comercial y participación comunitaria y logró algo de éxito. Sin embargo, en [[Julio de 2006]] dejó el mercado de soporte de PostgreSQL. &lt;br /&gt;
&lt;br /&gt;
A mediados de [[2005]] otras dos compañías anunciaron planes para comercializar PostgreSQL con énfasis en nichos separados de mercados. EnterpriseDB añadió funcionalidades que le permitían a las aplicaciones escritas para trabajar con Oracle ser más fáciles de ejecutar con PostgreSQL. Greenplum contribuyó mejoras directamente orientadas a aplicaciones de Data Warehouse e Inteligencia de negocios, incluyendo el proyecto BizGres. &lt;br /&gt;
&lt;br /&gt;
En [[Octubre de 2005]], John Loiacono, vicepresidente ejecutivo de software en Sun Microsystems comentó: &amp;quot;No estamos yendo tras el OEM de Microsoft pero estamos viendo a PostgreSQL ahora&amp;quot;, aunque no se dieron especificaciones en ese momento. Para noviembre de 2005, Sun Solaris 10 (lanzamiento 6/06) incluía PostgreSQL. &lt;br /&gt;
&lt;br /&gt;
En [[Agosto de 2007]] EnterpriseDB anunció el Postgres Resource Center y EnterpriseDB Postgres, diseñados para ser una completamente configurada distribución de PostgreSQL incluyendo muchos módulos contribuidos y agregados. EnterpriseDB Postgres fue renombrado Postgres Plus en [[Marzo de 2008]]. &lt;br /&gt;
&lt;br /&gt;
El proyecto PostgreSQL continúa haciendo lanzamientos principales anualmente y lanzamientos menores de reparación de bugs, todos disponibles bajo la licencia BSD, y basados en contribuciones de proveedores comerciales, empresas aportantes y programadores de código abierto mayormente. &lt;br /&gt;
&lt;br /&gt;
== Características ==&lt;br /&gt;
&lt;br /&gt;
Algunas de sus principales características son, entre otras: &lt;br /&gt;
&lt;br /&gt;
=== Alta concurrencia ===&lt;br /&gt;
&lt;br /&gt;
Mediante un sistema denominado MVCC (Acceso concurrente multiversión, por sus siglas en inglés) PostgreSQL permite que mientras un proceso escribe en una tabla, otros accedan a la misma tabla sin necesidad de bloqueos. Cada usuario obtiene una visión consistente de lo último a lo que se le hizo commit. Esta estrategia es superior al uso de bloqueos por tabla o por filas común en otras bases, eliminando la necesidad del uso de bloqueos explícitos. Amplia variedad de tipos nativos [editar] &lt;br /&gt;
&lt;br /&gt;
PostgreSQL provee nativamente soporte para: &lt;br /&gt;
&lt;br /&gt;
*Números de precisión arbitraria. &lt;br /&gt;
*Texto de largo ilimitado. &lt;br /&gt;
*Figuras geométricas (con una variedad de funciones asociadas) &lt;br /&gt;
*Direcciones [[IP]] ([[IPv4]] e [[IPv6]]). &lt;br /&gt;
*Bloques de direcciones estilo CIDR. &lt;br /&gt;
*Direcciones [[MAC]]. &lt;br /&gt;
*Arrays.&lt;br /&gt;
&lt;br /&gt;
Adicionalmente los usuarios pueden crear sus propios tipos de datos, los que pueden ser por completo indexables gracias a la infraestructura GiST de PostgreSQL. Algunos ejemplos son los tipos de datos GIS creados por el proyecto PostGIS. &lt;br /&gt;
&lt;br /&gt;
=== Otras características ===&lt;br /&gt;
&lt;br /&gt;
*Claves ajenas también denominadas Llaves ajenas o Claves Foráneas (foreign keys). &lt;br /&gt;
*Disparadores (triggers): Un disparador o trigger se define en una acción especifica basada en algo ocurrente entro de la base de datos. En PostgreSQL esto significa la ejecución de un [[procedimiento almacenado]] basado en una determinada acción sobre una tabla específica. Ahora todos los disparadores se definen por seis características:&lt;br /&gt;
&lt;br /&gt;
**El nombre del disparador o trigger &lt;br /&gt;
**El momento en que el disparador debe arrancar &lt;br /&gt;
**El evento del disparador deberá activarse sobre... &lt;br /&gt;
**La tabla donde el disparador se activará &lt;br /&gt;
**La frecuencia de la ejecución &lt;br /&gt;
**La función que podría ser llamada&lt;br /&gt;
&lt;br /&gt;
Entonces combinando estas seis características, PostgreSQL le permitirá crear una amplia funcionalidad a través de su sistema de activación de disparadores (triggers). &lt;br /&gt;
&lt;br /&gt;
*Vistas. &lt;br /&gt;
*Integridad transaccional. &lt;br /&gt;
*Herencia de tablas. &lt;br /&gt;
*Tipos de datos y operaciones geométricas. &lt;br /&gt;
*Soporte para transacciones distribuidas. Permite a PostgreSQL integrase en un sistema distribuido formado por varios recursos (p.ej, una base de datos PostgreSQL, otra [http://www.oracle.com/index.html Oracle], una cola de mensajes IBM MQ JMS y un ERP SAP) gestionado por un servidor de aplicaciones donde el éxito (&amp;quot;commit&amp;quot;) de la transacción goblal es el resultado del éxito de las transacciones locales.&lt;br /&gt;
&lt;br /&gt;
=== Funciones  ===&lt;br /&gt;
&lt;br /&gt;
Bloques de código que se ejecutan en el servidor. Pueden ser escritos en varios lenguajes, con la potencia que cada uno de ellos da, desde las operaciones básicas de programación, tales como bifurcaciones y bucles, hasta las complejidades de la programación orientada a objetos o la programación funcional. &lt;br /&gt;
&lt;br /&gt;
Los disparadores (''triggers'' en inglés) son funciones enlazadas a operaciones sobre los datos. &lt;br /&gt;
&lt;br /&gt;
Algunos de los lenguajes que se pueden usar son los siguientes: &lt;br /&gt;
&lt;br /&gt;
*Un lenguaje propio llamado [http://www.postgresql.org/docs/8.4/interactive/plpgsql.html PL/PgSQL] (similar al [[PL/SQL]] de oracle). &lt;br /&gt;
*[[Lenguaje_de_Programación_C|C]]. &lt;br /&gt;
*[[C++]]. &lt;br /&gt;
*[[Lenguaje de programación Java|Java]] [http://gborg.postgresql.org/project/pljava/projdisplay.php PL/Java web]. &lt;br /&gt;
*[[Perl|PL/Perl]]. &lt;br /&gt;
*[http://plphp.commandprompt.com/ plPHP]. &lt;br /&gt;
*[http://www.postgresql.org/docs/current/interactive/plpython.html PL/Python]. &lt;br /&gt;
*[http://raa.ruby-lang.org/project/pl-ruby PL/Ruby]. &lt;br /&gt;
*[http://plsh.projects.postgresql.org/ PL/sh]. &lt;br /&gt;
*[http://www.postgresql.org/docs/current/interactive/pltcl.html PL/Tcl]. &lt;br /&gt;
*[http://plscheme.projects.postgresql.org/ PL/Scheme]. &lt;br /&gt;
*Lenguaje para aplicaciones estadísticas [[Lenguaje R|R]] por medio de [http://www.joeconway.com/plr/ PL/R].&lt;br /&gt;
&lt;br /&gt;
PostgreSQL soporta funciones que retornan &amp;quot;filas&amp;quot;, donde la salida puede tratarse como un conjunto de valores que pueden ser tratados igual a una fila retornada por una consulta (query en inglés). &lt;br /&gt;
&lt;br /&gt;
Las funciones pueden ser definidas para ejecutarse con los derechos del usuario ejecutor o con los derechos de un usuario previamente definido. El concepto de funciones, en otros DBMS, son muchas veces referidas como &amp;quot;[[procedimientos almacenados]]&amp;quot; (stored procedures en inglés).&lt;br /&gt;
== Configuración ==&lt;br /&gt;
Lo primero que debemos hacer es crear un usuario con permiso de superadministrador, es sencillo:&lt;br /&gt;
#Primero nos autenticamos como root sudo su.&lt;br /&gt;
#Pasamos a ser el usuario postgres, el cual se crea cuando instalamos postgres su postgres&lt;br /&gt;
#Creamos el usuario nuevo con permisos de super administrador createuser -s -P nombre_usuario&lt;br /&gt;
El otro inconveniente que encontré fue que sólo me podía autenticar localmente desde  la PC donde instalé el postgres y necesitaba que desde cualquier PC de  la misma subred del lab se puedieran autenticar. Solución:&lt;br /&gt;
Primero  debemos decirle que no escuche peticiones solamente desde el localhost,  para eso editamos el fichero ubicado en  /etc/postgresql/8.3/main/postgresql.conf&lt;br /&gt;
  # sudo nano /etc/postgresql/8.3/main/postgresql.conf&lt;br /&gt;
Una vez que abrimos el archivo ubicamos la siguiente línea:&lt;br /&gt;
  #listen_addresses = ‘localhost’&lt;br /&gt;
Sustituimos esa línea por la siguiente:&lt;br /&gt;
  listen_addresses = ‘*’&lt;br /&gt;
Asi escuchará peticiones desde las direcciones permitidas en el fichero pg_hba.conf&lt;br /&gt;
#Ahora debemos decirle en el fichero pg_hba.conf cuales son las direcciones ip autorizadas a conectarse al server&lt;br /&gt;
  sudo nano /etc/postgresql/8.3/main/pg_hba.conf&lt;br /&gt;
Si queremos que escuche desde una subred entera, agregamos la siguiente línea al final&lt;br /&gt;
  host    all     all     10.35.12.0/24   md5&lt;br /&gt;
Ahí  estamos diciendo que para todas las bases de datos(primer all), todos  los usuarios que intenten loguearse(segundo all) desde los '''Ip 10.35.12.1 al 10.35.12.254''' se pueden loguear y se usará md5 .&lt;br /&gt;
Si en vez de la subred solamenmte nos interesara que se logueen desde el '''IP 10.35.12.26:host all all 10.35.12.26 255.255.255.255 trust'''&lt;br /&gt;
Y si quisiéramos que desde cualquier PC de la UCI se  logueen:h'''ost all all 0.0.0.0 0.0.0.0 md5'''&lt;br /&gt;
Luego reiniciamos el postgres para que coja la configuración que le hemos dado:&lt;br /&gt;
  sudo /etc/init.d/postgresql-8.3 restart.&lt;br /&gt;
Bueno,  hasta aquí sesolví lo que necesitaba,opcionalmente si quieres  administrar el server de Postgres desde la web puedes instalar el  paquete phppgadmin&lt;br /&gt;
  sudo apt-get install phppgadmin&lt;br /&gt;
Luego  para acceder desde la web lo haces con http://ip_servidor/phppgadmin ,  debes haber instalado el Apache para poder acceder por la web.&lt;br /&gt;
Nota:  Si al intentar acceder desde la web el server nos dice que no encuentra  la direccion /phppgadmin debemos decirle al Apache que cargue el  fichero de configuración del phppgadmin, para eso:&lt;br /&gt;
Editamos el fichero de configuración del Apache&lt;br /&gt;
  sudo nano /etc/apache2/apache/apache2.conf&lt;br /&gt;
Y le decimos que incluya al fichero de configuración del phppgadmin, para eso le añadimos la siguiente línea al final:&lt;br /&gt;
Include /etc/phppgadmin/apache.conf y reiniciamos el Apache:&lt;br /&gt;
  sudo /etc/init.d/apache2 restart&lt;br /&gt;
También existe un cliente para Postgres llamado PgAdmin, para instalarlo debes instalar el paquete pgadmin3 en la PC desde la cual deseas administrar el server.&lt;br /&gt;
Si en el mismo server tendrás una aplicación programada con php y desde la  misma necesitas acceder al postgres, debes instalar los siguientes  paquetes:&lt;br /&gt;
php5, php5-pgsql(soporte de php para postgres), apache2(servidor web Apache), para ello ejecutas el siguiente comando:&lt;br /&gt;
  sudo apt-get install php5  php5-pgsql apache2&lt;br /&gt;
&lt;br /&gt;
== Productos alrededor de PostgreSQL  ==&lt;br /&gt;
&lt;br /&gt;
El [[PGDG]] solo desarrolla el Motor de Datos y un número pequeño de utilidades, para potenciar el trabajo con PostgreSQL suele ser necesario añadir utilidades externas creadas especialmente para este motor, algunas de estas herramientas son: &lt;br /&gt;
&lt;br /&gt;
=== Alternativas Comerciales  ===&lt;br /&gt;
&lt;br /&gt;
Gracias a su licencia [[BSD]], se permite la utilización del código para ser comercializado. Uno de los casos ejemplo es la de Enterprise DB (Postgresql Plus), la cual incluye varios agregados y una interfaz de desarrollo basada en [[Lenguaje de programación Java|Java]]. Entre otras empresas que utilizan Postgresql para comercializar se encuentra CyberTech (alemania), con su producto CyberCluster. &lt;br /&gt;
&lt;br /&gt;
=== GIS  ===&lt;br /&gt;
&lt;br /&gt;
;[[PostGIS]] &lt;br /&gt;
:Extensión que añade soporte de objetos geográficos a PostgreSQL y permite realizar análisis mediante consultas SQL espaciales o mediante conexión a aplicaciones [[GIS]] (Sistema de Información Geográfica).&lt;br /&gt;
&lt;br /&gt;
=== Replicación  ===&lt;br /&gt;
&lt;br /&gt;
;[[PgCluster]] &lt;br /&gt;
:Replicación multi maestro.&lt;br /&gt;
&lt;br /&gt;
;[[Slony-I]] &lt;br /&gt;
:Replicación maestro esclavo.&lt;br /&gt;
&lt;br /&gt;
;[[PyReplica]] &lt;br /&gt;
:Replicación maestro esclavo y multi maestro asincrónica.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de administración  ===&lt;br /&gt;
&lt;br /&gt;
;[[PgAdmin3]] &lt;br /&gt;
:Entorno de escritorio visual.&lt;br /&gt;
&lt;br /&gt;
;[[PgAccess]] &lt;br /&gt;
:Entorno de escritorio visual.&lt;br /&gt;
&lt;br /&gt;
;[[PhpPgAdmin]] &lt;br /&gt;
:Entorno web.&lt;br /&gt;
&lt;br /&gt;
;psql &lt;br /&gt;
:Cliente de consola.&lt;br /&gt;
&lt;br /&gt;
;[http://www.nucleonsoftware.com Database Master] &lt;br /&gt;
:Entorno de escritorio visual.&lt;br /&gt;
&lt;br /&gt;
=== Búsqueda de texto  ===&lt;br /&gt;
&lt;br /&gt;
;Full text search &lt;br /&gt;
:Incluido en el núcleo a partir de la versión 8.3. &lt;br /&gt;
:Via [http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/ Tsearch2] y [[OpenFTS]] para versiones anteriores a la 8.3.&lt;br /&gt;
&lt;br /&gt;
=== XML  ===&lt;br /&gt;
&lt;br /&gt;
;[[XML]]/[[XSLT]] soporte &lt;br /&gt;
:Via [http://www.throwingbeans.org/postgresql_and_xml.html XPath extensiones en la sección contrib].&lt;br /&gt;
&lt;br /&gt;
== Premios  ==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL ha recibido los siguientes reconocimientos: &lt;br /&gt;
&lt;br /&gt;
*[[1999 |1999 ]]LinuxWorld Editor's Choice Award for Best Database &lt;br /&gt;
*[[2000|2000]] Linux Journal Editors' Choice Awards for Best Database &lt;br /&gt;
*[[2002|2002]] Linux New Media Editors Choice Award for Best Database &lt;br /&gt;
*[[2003|2003]] Linux Journal Editors' Choice Awards for Best Database &lt;br /&gt;
*[[2004|2004]] Linux New Media Award For Best Database &lt;br /&gt;
*2004 Linux Journal Editors' Choice Awards for Best Database &lt;br /&gt;
*2004 ArsTechnica Best Server Application Award &lt;br /&gt;
*[[2005|2005]] Linux Journal Editors' Choice Awards for Best Database &lt;br /&gt;
*[[2006|2006]] Linux Journal Editors' Choice Awards for Best Database &lt;br /&gt;
*[[2008|2008]] Developer.com Product of the Year, Database Tool&lt;br /&gt;
&lt;br /&gt;
== Enlaces externos  ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.postgresql.org/support/professional_support Asistencia técnica profesional para PostgreSQL] &lt;br /&gt;
*[http://www.postgresql.org Sitio web oficial de PostgreSQL] &lt;br /&gt;
*[http://wiki.woop.es/PostgreSQL Guía de administración básica de PostgreSQL bajo Linux] &lt;br /&gt;
*[http://www.pervasivepostgres.com/ Base de datos basada en PostgreSQL] &lt;br /&gt;
*[http://www.postgresql-es.org/ PostgreSQL-es.org] - Portal en español sobre PostgreSQL &lt;br /&gt;
*[http://www.arpug.com.ar Comunidad de usuarios y sitio de PostgreSQL de Argentina] &lt;br /&gt;
*[http://www.postgresql.org.pe/ Comunidad de usuarios y sitio de PostgreSQL de Perú] &lt;br /&gt;
*[http://www.postgresql.cl/ Comunidad de usuarios de PostgreSQL de Chile] &lt;br /&gt;
*[http://phppgadmin.sourceforge.net/ Cliente escrito en PHP]&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:Bases_de_datos]] [[Category:Software_para_Linux]]&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Microsoft_SQL_Server&amp;diff=1037311</id>
		<title>Microsoft SQL Server</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Microsoft_SQL_Server&amp;diff=1037311"/>
		<updated>2011-10-14T21:22:12Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=Microsoft Sql Server|imagen=Sql_server.jpg|descripción=|creador=Microsoft|última versión estable=(10.00.1600.22) [[2 de agosto ]] de [[2008]]|web=[http://www.microsoft.com/sql/ Sitio oficial]}}&lt;br /&gt;
&lt;br /&gt;
'''Microsoft SQL Server'''. Es un sistema para la gestión de [[Base de Datos|bases de datos]] creado por [[Microsoft]], el mismo se basa en el modelo relacional. Sel Server utiliza como lenguajes de consulta T-SQL y ANSI SQL. &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Caracteristicas fundamentales&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
Microsoft SQL Server revoluciona el concepto de Base de datos para la Empresa. Reúne en un sólo producto la potencia necesaria para cualquier aplicación empresarial ,crítica junto con unas herramientas de gestión que reducen al mínimo el coste de propiedad. Con Microdoft SQL Server, la empresa tiene todo de serie. &lt;br /&gt;
&lt;br /&gt;
Dentro de sus caracteristicas fundamentales se encuentran:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Soporte de transacciones. &lt;br /&gt;
*Escalabilidad, estabilidad y seguridad. &lt;br /&gt;
*Soporta [[procedimientos almacenados]]. &lt;br /&gt;
*Incluye también un potente entorno gráfico de administración, que permite el uso de comandos DDL y DML gráficamente. &lt;br /&gt;
*Permite trabajar en modo cliente-servidor, donde la información y datos se alojan en el servidor y los terminales o clientes de la red sólo acceden a la información. &lt;br /&gt;
*Además permite administrar información de otros servidores de datos.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Historial de versiones del proyecto  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; class=&amp;quot;MsoNormalTable&amp;quot; style=&amp;quot;margin-left: 12pt; width: 403px; height: 690px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
Historia de versiones &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
'''Versión''' &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
'''Año''' &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
'''Nombre de la versión''' &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
'''Nombre clave''' &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
1.0 (OS/2) &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
1989 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
SQL Server 1.0 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
- &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
4.21 (WinNT) &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
1993 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
SQL Server 4.21 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
- &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
6.0 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
1995 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
SQL Server 6.0 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
SQL95 &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
6.5 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
1996 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
SQL Server 6.5 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
Hydra &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
7.0 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
1998 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
SQL Server 7.0 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
Sphinx &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
- &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
1999 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
SQL Server 7.0&amp;lt;br&amp;gt;OLAP Tools &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
Plato &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
8.0 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
2000 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
SQL Server 2000 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
Shiloh &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
8.0 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
2003 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
SQL Server 2000&amp;lt;br&amp;gt; 64-bit Edition &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
Liberty &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
9.0 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
2005 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
SQL Server 2005 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
Yukon &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
10.0 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
2008 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
SQL Server 2008 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
Katmai &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
10.5 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
2010 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
SQL Server 2008 R2 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;padding: 0.75pt;&amp;quot; | &lt;br /&gt;
Kilimanjaro &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Integración [[Internet]] - [[Correo Electrónico]]&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
*MAPI, permitiendo aplicaciones de flujo de trabajo y notificación de cambio de datos automática. &lt;br /&gt;
*Compatibilidad con Microsoft Internet Information Server y otros servidores Web populares. &lt;br /&gt;
*SQL Web Assistant, para el retorno automático de datos en formato HTML. &lt;br /&gt;
*[[Procedimientos almacenados]] para generar páginas HTML o actualizar datos en plantillas Web. &lt;br /&gt;
*Posibilidad de poblar automáticamente carpetas públicas de Microsoft Exchange con datos. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Enlaces externos ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.microsoft.com/spain/sql/default.mspx Página web de Microsoft SQL Server]&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://elpaladintecnologico.blogspot.com/2009/02/blog-post.html Lo nuevo de SQL Server 2008]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:Bases_de_datos]]&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Mysql&amp;diff=1037276</id>
		<title>Mysql</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Mysql&amp;diff=1037276"/>
		<updated>2011-10-14T21:13:44Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=Mysql&lt;br /&gt;
|familia=&lt;br /&gt;
|imagen=90138-logo-mysql.jpg&lt;br /&gt;
|tamaño=&lt;br /&gt;
|descripción=Gestor de Bases de Datos&lt;br /&gt;
|imagen2=&lt;br /&gt;
|tamaño2=&lt;br /&gt;
|descripción2=&lt;br /&gt;
|creador=MySQL AB&lt;br /&gt;
|desarrollador=Oracle&lt;br /&gt;
|diseñador=&lt;br /&gt;
|modelo de desarrollo=&lt;br /&gt;
|lanzamiento inicial=&lt;br /&gt;
|versiones=&lt;br /&gt;
|última versión estable=5.5.9 -[[2 de junio de 2010]]&lt;br /&gt;
|género=[[RDBMS]]&lt;br /&gt;
|sistemas operativos=[[Multiplataforma]]&lt;br /&gt;
|idioma=&lt;br /&gt;
|licencia=&lt;br /&gt;
|premios=&lt;br /&gt;
|web=http://www.mysql.com&lt;br /&gt;
}}&lt;br /&gt;
'''MySQL'''. Sistema de gestión de base de datos relacional y multiusuario con más de seis millones de instalaciones. Por un lado se ofrece bajo la [[GNU]] [[GPL]] para cualquier uso compatible con esta licencia, pero para aquellas empresas que quieran incorporarlo en productos privativos deben comprar a la empresa una licencia específica que les permita este uso. Está desarrollado en su mayor parte en [[ANSI C]].&lt;br /&gt;
&lt;br /&gt;
Al contrario de proyectos como [[Apache]], donde el [[software]] es desarrollado por una comunidad pública y el [[copyright]] del código está en poder del autor individual, MySQL es propietario y está patrocinado por una empresa privada, que posee el [[copyright]] de la mayor parte del código.&lt;br /&gt;
&lt;br /&gt;
Esto es lo que posibilita el esquema de licenciamiento anteriormente mencionado. Además de la venta de licencias privativas, la compañía ofrece soporte y servicios. Para sus operaciones contratan trabajadores alrededor del mundo que colaboran vía [[Internet]]. MySQL AB fue fundado por David Axmark, Allan Larsson y Michael Widenius.&lt;br /&gt;
&lt;br /&gt;
==Historia del proyecto== &lt;br /&gt;
&lt;br /&gt;
[[SQL]]Lenguaje de Consulta Estructurado fue comercializado por primera vez en [[1981]] por [[IBM]] el cual fue presentado a [[ANSI]]  y desde entonces ha sido considerado como un estándar para las bases de datos relacionales. Desde [[1986]], el estándar SQL ha aparecido en diferentes versiones como por ejemplo: SQL:92, SQL:99, SQL:2003. MySQL es una idea originaria de la empresa opensource Mysql AB establecida inicialmente en Suecia en [[1995]] y cuyos fundadores son '''David Axmark, Allan Larsson''', y '''Michael Monty Widenius'''. El objetivo que persigue esta empresa consiste en que MySQL cumpla el estándar SQL, pero sin sacrificar velocidad, fiabilidad o usabilidad.&lt;br /&gt;
&lt;br /&gt;
Michael Widenius en ladecada de los 90 trató de usar mSQL para conectar las tablas usando rutinas de bajo nivel ISAM, sin embargo, mSQL no era rápido y flexible para sus necesidades. Esto lo llevó a crear una API SQL denominada MySQL para bases de datos muy similar a la de mSQL pero más portable.&lt;br /&gt;
&lt;br /&gt;
La procedencia del nombre de MySQL no es clara. Desde hace más de 10 años, las herramientas han mantenido el prefijo My. También, se cree que tiene relación con el nombre de la hija del cofundador Monty Widenius quien se llama My.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el nombre del delfín de MySQL es [[Sakila]] y fue seleccionado por los fundadores de MySQL AB en el concurso “Name the Dolphin”. Este nombre fue enviado por Ambrose Twebaze, un desarrollador de software de código abierto africano, derivado del idioma SiSwate, el idioma local de [[Swzilandia]] y corresponde al nombre de una ciudad en [[Arusha]], [[Tanzania]], cerca de [[Uganda]] la ciudad origen de [[Ambrose]].&lt;br /&gt;
&lt;br /&gt;
==Aplicaciones==&lt;br /&gt;
 &lt;br /&gt;
MySQL es muy utilizado en apliciones web, en plataformas [[Linux]]/[[Windows]]-[[Apache]]-MySQL-[[PHP]]/[[Perl]]/[[Python]], y por herramientas de seguimiento de errores como [[Bugzilla]]. Su popularidad como aplicación web está muy ligada a [[PHP]], que a menudo aparece en combinación con MySQL. MySQL es una base de datos muy rápida en la lectura cuando utiliza el motor no transaccional [[MyISAM]], pero puede provocar problemas de integridad en entornos de alta concurrencia en la modificación. En aplicaciones web hay baja concurrencia en la modificación de datos y en cambio el entorno es intensivo en lectura de datos, lo que hace a MySQL ideal para este tipo de aplicaciones. Sea cual sea el entorno en el que va a utilizar MySQL, es importante adelantar monitoreos sobre el desempeño para detectar y corregir errores tanto de SQL como de programacion.&lt;br /&gt;
&lt;br /&gt;
==Plataformas== &lt;br /&gt;
&lt;br /&gt;
MySQL funciona sobre múltiples plataformas, incluyendo:&lt;br /&gt;
&lt;br /&gt;
*[[AIX]]&lt;br /&gt;
*[[BSD]] &lt;br /&gt;
*[[FreeBSD]] &lt;br /&gt;
*[[HP-UX]]&lt;br /&gt;
*[[GNU/Linux]] &lt;br /&gt;
*[[Mac OS X]]&lt;br /&gt;
*[[NetBSD]]&lt;br /&gt;
*[[Novell Netware]]&lt;br /&gt;
*[[OpenBSD]]&lt;br /&gt;
*[[OS/2 Warp]]&lt;br /&gt;
*[[QNX]]&lt;br /&gt;
*[[SGI IRIX]]&lt;br /&gt;
*[[Solaris]]&lt;br /&gt;
*[[SunOS]]&lt;br /&gt;
*[[SCO OpenServer]]&lt;br /&gt;
*[[SCO UnixWare]]&lt;br /&gt;
*[[Tru64]]&lt;br /&gt;
*[[eBD]]&lt;br /&gt;
*[[Windows 95]], [[Windows 98]], [[Windows NT]], [[Windows 2000]], [[Windows XP]], [[Windows Vista]], [[Windows 7]] y [[Windows Server]] [[2000]], [[2003]] y [[2008]] Windows. &lt;br /&gt;
&lt;br /&gt;
==Características de la versión 5.0.22==&lt;br /&gt;
&lt;br /&gt;
* Un amplio subconjunto de ANSI SQL 99, y varias extensiones.&lt;br /&gt;
* Soporte a multiplataforma&lt;br /&gt;
* [[Procedimientos almacenados]]&lt;br /&gt;
* Disparadores (triggers)&lt;br /&gt;
* Cursores&lt;br /&gt;
* Vistas actualizables&lt;br /&gt;
* Soporte a VARCHAR&lt;br /&gt;
* INFORMATION_SCHEMA&lt;br /&gt;
* Modo Strict&lt;br /&gt;
* Soporte X/Open XA de transacciones distribuidas; transacción en dos fases como parte de esto, utilizando el motor InnoDB de Oracle&lt;br /&gt;
* Motores de almacenamiento independientes (MyISAM para lecturas rápidas, InnoDB para transacciones e integridad referencial)&lt;br /&gt;
* Transacciones con los motores de almacenamiento InnoDB, BDB Y Cluster; puntos de recuperación (savepoints) con InnoDB&lt;br /&gt;
* Soporte para SSL&lt;br /&gt;
* Query caching&lt;br /&gt;
* Sub-SELECTs (o SELECTs anidados)&lt;br /&gt;
* Réplica con un maestro por esclavo, varios esclavos por maestro, sin soporte automático para múltiples maestros por esclavo.&lt;br /&gt;
* indexing y buscando campos de texto completos usando el motor de almacenamiento MyISAM&lt;br /&gt;
* Embedded database library&lt;br /&gt;
* Soporte completo para Unicode&lt;br /&gt;
* Conforme a las reglas ACID usando los motores InnoDB, BDB y Cluster&lt;br /&gt;
* Shared-nothing clustering through MySQL Cluster&lt;br /&gt;
&lt;br /&gt;
==Características adicionales==&lt;br /&gt;
&lt;br /&gt;
* Usa GNU Automake, Autoconf, y Libtool para portabilidad&lt;br /&gt;
* Uso de multihilos mediante hilos del kernel.&lt;br /&gt;
* Usa tablas en disco b-tree para búsquedas rápidas con compresión de índice&lt;br /&gt;
* Tablas hash en memoria temporales&lt;br /&gt;
* El código MySQL se prueba con Purify (un detector de memoria perdida comercial) así como con Valgrind, una herramienta GPL&lt;br /&gt;
* Completo soporte para operadores y funciones en cláusulas select y where.&lt;br /&gt;
* Completo soporte para cláusulas group by y order by, soporte de funciones de agrupación&lt;br /&gt;
* Seguridad: ofrece un sistema de contraseñas y privilegios seguro mediante verificación basada en el host y el tráfico de contraseñas está cifrado al conectarse a un servidor.&lt;br /&gt;
* Soporta gran cantidad de datos. MySQL Server tiene bases de datos de hasta 50 millones de registros.&lt;br /&gt;
* Se permiten hasta 64 índices por tabla (32 antes de MySQL 4.1.2). Cada índice puede consistir desde 1 hasta 16 columnas o partes de columnas. El máximo ancho de límite son 1000 bytes (500 antes de MySQL 4.1.2).&lt;br /&gt;
* Los clientes se conectan al servidor MySQL usando sockets TCP/IP en cualquier plataforma. En sistemas Windows se pueden conectar usando named pipes y en sistemas Unix usando ficheros socket Unix.&lt;br /&gt;
* En MySQL 5.0, los clientes y servidores Windows se pueden conectar usando memoria compartida.&lt;br /&gt;
* MySQL contiene su propio paquete de pruebas de rendimiento proporcionado con el código fuente de la distribución de MySQL.&lt;br /&gt;
&lt;br /&gt;
==Desarrollo del proyecto==&lt;br /&gt;
&lt;br /&gt;
El desarrollo de MySQL se fundamenta en el trabajo de los desarrolladores contratados por la empresa MySQL AB quienes se encargan de dar soporte a los socios comerciales y usuarios de la comunidad MySQL y dar solución a los problemas encontrados por los usuarios. Los usuarios o miembros de la comunidad MySQL pueden reportar bugs revisando el manual en línea que contiene las soluciones a problemas encontrados; el historial de cambios; la base de datos bugs que contiene bugs reportados y solucionados y en las listas de correo MySQL.&lt;br /&gt;
&lt;br /&gt;
A través de las listas de correo los usuarios pueden enviar preguntas y éstas serán contestadas por desarrolladores brindándoles soporte.&lt;br /&gt;
&lt;br /&gt;
==Estructuras organizativas/asociativas o de decisión==&lt;br /&gt;
&lt;br /&gt;
La dirección y el patrocinio de los proyectos MySQL están a cargo de la empresa MySQL AB quien posee el copyrigth del código fuente MySQL, su logo y marca registrada. MySQL, Inc. y MySQL GmbH son ejemplos de empresas subsidiarias de MySQL AB. Están establecidas en los [[Estados Unidos]] y [[Alemania]] respectivamente. MySQL AB, cuenta con más de 200 empleados en más de 20 países y funcionan bajo la estrategia de teletrabajo.&lt;br /&gt;
&lt;br /&gt;
En [[enero]] del [[2008]] [[Sun Microsystems]] anuncia su compra.&lt;br /&gt;
&lt;br /&gt;
==Industria relacionada==&lt;br /&gt;
&lt;br /&gt;
La industria radica en la venta de productos software y de algunos servicios relacionados a numerosas empresas que utilizan estos productos.&lt;br /&gt;
&lt;br /&gt;
MySQL AB clasifica los productos así:&lt;br /&gt;
&lt;br /&gt;
* '''MySQL Enterprise''': incluye MySQL Enterprise Server , Monitoreo de la red MySQL, servicios de consulta y soporte de producción MySQL.&lt;br /&gt;
* '''MySQL Cluster'''.&lt;br /&gt;
* '''MySQL Embedded Database'''.&lt;br /&gt;
* '''MySQL Drivers''': para JDBC, ODBC y .Net.&lt;br /&gt;
* '''MySQL Tools''': MySQL Administrator, MySQL Query Browser, and the MySQL Migration Toolkit.&lt;br /&gt;
* '''MaxDB''': MaxDB es una base de datos de código abierto certificada para SAP/R3.&lt;br /&gt;
&lt;br /&gt;
Los ingresos de esta empresa por la venta de licencias privativas de sus productos y los servicios suma los '''U$12 millones'''.&lt;br /&gt;
&lt;br /&gt;
==MySQL en cifras==&lt;br /&gt;
&lt;br /&gt;
* Según las cifras del fabricante, existen más de seis millones de copias de MySQL funcionando en la actualidad, lo que supera la base instalada de cualquier otra herramienta de bases de datos.&lt;br /&gt;
* El tráfico del sitio web de MySQL AB superó en 2004 al del sitio de IBM.&lt;br /&gt;
&lt;br /&gt;
==Licencia==&lt;br /&gt;
&lt;br /&gt;
La licencia GNU GPL de MySQL obliga a que la distribución de cualquier producto derivado (aplicación) se haga bajo esa misma licencia. Si un desarrollador desea incorporar MySQL en su producto pero desea distribuirlo bajo otra licencia que no sea la GNU GPL, puede adquirir una licencia comercial de MySQL que le permite hacer justamente eso.&lt;br /&gt;
&lt;br /&gt;
==Estado actual==&lt;br /&gt;
&lt;br /&gt;
La serie en desarrollo de MySQL Server actualmente, es la 5.1 a la cual se añaden nuevas características en relación a la serie 5.0. La serie de producción actual de MySQL es 5.0, cuya penúltima versión estable es la 5.0.26 lanzada en [[octubre]] de [[2006]]. Actualmente, se puede descargar la serie 5.0.27. La serie de producción anterior fue la 4.1, cuya versión estable es 4.1.7 lanzada en octubre de [[2004]]. A estas versiones de producción sólo se arreglan problemas, es decir, ya no se añaden nuevas características. Y a las versiones anteriores solamente se les corrigen bugs críticos.&lt;br /&gt;
&lt;br /&gt;
==Oracle adquiere Sun Microsystems==&lt;br /&gt;
&lt;br /&gt;
El lunes [[20 de abril]], [[Oracle]], el fabricante de software altamente reconocido por su base de datos; adquiere a [[Sun Microsystems]] para lo cual desembolsó $ 7,4 mil millones de dólares.&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
&lt;br /&gt;
* [[PostgreSQL]] Otra base de datos basada en software libre&lt;br /&gt;
* [[PHP]] Lenguaje en web comúnmente usado con MySQL&lt;br /&gt;
* [[Base de datos]]&lt;br /&gt;
* [[Bonsai cvs]]&lt;br /&gt;
* [[Appserv]]&lt;br /&gt;
&lt;br /&gt;
== Enlaces externos ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.mysql.com Sitio web oficial de MySQL] (en inglés)&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Procedimientos_almacenados&amp;diff=1037140</id>
		<title>Procedimientos almacenados</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Procedimientos_almacenados&amp;diff=1037140"/>
		<updated>2011-10-14T20:45:47Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: Página creada con '{{Ficha Software |nombre=Procedimientos almacenados |familia= Objetos de Base de Datos |imagen=Procedimientos_almacenados.jpg }} &amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt; ==Concepto== Los '''Proced...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=Procedimientos almacenados&lt;br /&gt;
|familia= Objetos de Base de Datos&lt;br /&gt;
|imagen=Procedimientos_almacenados.jpg&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
==Concepto==&lt;br /&gt;
Los '''Procedimientos almacenados''' son un conjunto de comandos que pueden ser ejecutados directamente en el [[servidor]], es decir, será ejecutado por el servidor de [[Base de Datos]] y no por el programa cliente que lo accede, permitiendo la ejecución de una acción o conjunto de acciones especificas. Se almacenan en la propia [[Base de Datos]] y constituyen un objeto más dentro de esta, por lo que mejorar el rendimiento de los sistemas ya que reducen en intercambio entre [[Cliente]] y servidor. Los procedimientos almacenados son reutilizables, de manera que los usuarios mediante la aplicación cliente no necesitan relanzar los comandos individuales, sino que pueden llamar el procedimiento.&lt;br /&gt;
&lt;br /&gt;
==¿Dónde utilizarlos?==&lt;br /&gt;
Los '''procedimientos almacenados''' son muy útiles sobre todo en arquitecturas cliente/servidor donde tenemos un servidor muy potente el cual podemos aprovechar para ejecutar procesos, consultas y actualizaciones complejas en la base de datos.&lt;br /&gt;
&lt;br /&gt;
'''Posibles usos que pueden darse a estos objetos de la base de datos:'''&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, si deseamos obtener un reporte complejo que incluya instrucciones condicionales y cálculos complejos con datos obtenidos de varias tablas, un procedimiento almacenado es nuestro mejor aliado. También podemos ejecutar complejos procesos que a veces tardan horas cuando son ejecutados desde el cliente, ya que en tales casos la información debe pasar del servidor al cliente y viceversa. Casi siempre las computadoras servidores son poderosas máquinas con mucha memoria, discos rápidos y uno o más procesadores también muy rápidos. Por lo tanto, al ejecutar los procesos mediante procedimientos almacenados estamos aprovechando toda esa capacidad de cómputo disponible en el [[hardware]] del servidor.&lt;br /&gt;
&lt;br /&gt;
'''Algunos casos en que pueden resultar particularmente útiles:'''&lt;br /&gt;
&lt;br /&gt;
Cuando múltiples aplicaciones cliente se escriben en distintos lenguajes o funcionan en distintas plataformas, pero necesitan realizar la misma operación en la base de datos. &lt;br /&gt;
Cuando la seguridad es muy importante. Los bancos, por ejemplo, usan procedimientos almacenados para todas las operaciones comunes. Esto proporciona un entorno seguro y consistente, y los procedimientos pueden asegurar que cada operación se loguea apropiadamente. En tal entorno, las aplicaciones y los usuarios no obtendrían ningún acceso directo a las tablas de la base de datos, sólo pueden ejectuar algunos procedimientos almacenados. &lt;br /&gt;
&lt;br /&gt;
==Elementos de los procedimientos almacenados==&lt;br /&gt;
'''Los procedimientos almacenados están compuestos por algunos de estos elementos:'''&lt;br /&gt;
* Parámetros de entrada       (pueden esperar parámetros)&lt;br /&gt;
* Parámetros de salida          (pueden devolver resultados)&lt;br /&gt;
* Declaración de variables     (puede usarse variables en su cuerpo)&lt;br /&gt;
* Cuerpo del procedimiento   (en su cuerpo se indican las acciones a realizar)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Tanto los parámetros de entrada como los de salida son opcionales. Podemos tener un procedimiento que no tenga parámetros de entrada, pero sí de salida y viceversa. Como todo buen [[programador]] sabe, los parámetros de entrada sirven para pasarle datos al procedimiento que necesita para llevar a cabo una acción determinada. Los parámetros de salida devuelven al programa cliente que ejecutó el procedimiento el resultado del mismo.&lt;br /&gt;
==Sintaxis==&lt;br /&gt;
Para crear un procedimiento almacenado debemos emplear la sentencia CREATE PROCEDURE.&lt;br /&gt;
&lt;br /&gt;
  CREATE PROCEDURE &amp;lt;nombre_procedure&amp;gt; [@param1 &amp;lt;tipo&amp;gt;, ...]&lt;br /&gt;
    AS&lt;br /&gt;
    -- Sentencias del procedure&lt;br /&gt;
Para modificar un procedimiento almacenado debemos emplear la sentencia ALTER PROCEDURE.&lt;br /&gt;
  &lt;br /&gt;
    ALTER PROCEDURE&amp;lt;nombre_procedure&amp;gt; [@param1 &amp;lt;tipo&amp;gt;, ...]&lt;br /&gt;
    AS &amp;lt;/source&amp;gt;&lt;br /&gt;
    -- Sentencias del procedure&lt;br /&gt;
El siguiente ejemplo muestra un procedimiento almacenado, llamado spu_addCliente que añade clientes, o sea, inserta un registro en la tabla ‘Clientes’: &lt;br /&gt;
&lt;br /&gt;
  CREATE PROCEDURE spu_addCliente @nombre varchar(100),&lt;br /&gt;
                                 @apellidos varchar(100),&lt;br /&gt;
                                 @f_Naciento datetime,&lt;br /&gt;
                                 @email varchar(50)&lt;br /&gt;
    AS&lt;br /&gt;
    INSERT INTO CLIENTES (nombre, apellidos, f_nacimiento, email)&lt;br /&gt;
    VALUES (@nombre, @apellidos, @f_naciento, @email)&lt;br /&gt;
==Ejemplos==&lt;br /&gt;
 &lt;br /&gt;
El siguiente ejemplo muestra un procedimiento almacenado en SQL Server que inserta un registro en la tabla ‘Inventario’:&lt;br /&gt;
&lt;br /&gt;
  USE [bd_inventario]&lt;br /&gt;
  GO&lt;br /&gt;
  SET ANSI_NULLS ON&lt;br /&gt;
  GO&lt;br /&gt;
  SET QUOTED_IDENTIFIER ON&lt;br /&gt;
  GO&lt;br /&gt;
  -- =============================================&lt;br /&gt;
  -- Autor: Yosbany&lt;br /&gt;
  -- Fecha: &lt;br /&gt;
  -- Descripción:   &lt;br /&gt;
  -- =============================================&lt;br /&gt;
  ALTER PROCEDURE [dbo].[Insertar_Inventario] &lt;br /&gt;
 &lt;br /&gt;
  --Parámetros de entrada&lt;br /&gt;
 &lt;br /&gt;
            @Descripcion char(15) = '',&lt;br /&gt;
            @No_inv char(15),&lt;br /&gt;
            @Marca char(15),&lt;br /&gt;
            @Modelo char(15),&lt;br /&gt;
            @No_serie char(15),&lt;br /&gt;
            @Puesto char(3),&lt;br /&gt;
            @id int = 0&lt;br /&gt;
  AS&lt;br /&gt;
  BEGIN&lt;br /&gt;
            SET NOCOUNT ON;&lt;br /&gt;
 &lt;br /&gt;
    -- Sentencia del procedimiento&lt;br /&gt;
            INSERT INTO Inventario (id, Descripcion, No_inventario, Marca, Modelo, No_serie, Puesto) &lt;br /&gt;
            VALUES(@id, @Descripcion, @No_inv, @Marca, @Modelo, @No_serie, @Puesto);&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Llamando el procedimiento==&lt;br /&gt;
 &lt;br /&gt;
En este caso veremos cómo llamarlo desde el lenguaje de programación C++, usando la tecnología ADO que trae C++Builder6:&lt;br /&gt;
 &lt;br /&gt;
Por ejemplo, si tenemos un procedimiento almacenado que elimina un registro según el id que se le pase, de esta manera, en el gestor [[SQL Server]]:&lt;br /&gt;
  USE [bd_inventario]&lt;br /&gt;
  GO&lt;br /&gt;
  SET ANSI_NULLS ON&lt;br /&gt;
  GO&lt;br /&gt;
  SET QUOTED_IDENTIFIER ON&lt;br /&gt;
  GO&lt;br /&gt;
  -- =============================================&lt;br /&gt;
  -- Author: Yosbany&lt;br /&gt;
  -- Fecha: &lt;br /&gt;
  -- Description:           &lt;br /&gt;
  -- =============================================&lt;br /&gt;
  CREATE PROCEDURE Eliminar_Inventario &lt;br /&gt;
            -- parámetro id por el que va a eliminar. El procedimiento espera este parámetro &lt;br /&gt;
  para eliminar el registro que lo contenga.&lt;br /&gt;
            @id int = 0&lt;br /&gt;
  AS&lt;br /&gt;
  BEGIN&lt;br /&gt;
            SET NOCOUNT ON;&lt;br /&gt;
 &lt;br /&gt;
    -- sentencia del procedimiento&lt;br /&gt;
            DELETE FROM Inventario WHERE id = @id;&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
Desde [[C++]] lo llamaríamos así: (Usando el componente ADOStoredProc)&lt;br /&gt;
 &lt;br /&gt;
  ADOStoredProc1-&amp;gt;ProcedureName = &amp;quot;Eliminar_inventario&amp;quot;;    //Nombre del procedimiento&lt;br /&gt;
 &lt;br /&gt;
  ADOStoredProc1-&amp;gt;Active=false; // Lo desactivamos&lt;br /&gt;
    TParameters *parameters = ADOStoredProc1-&amp;gt;Parameters;&lt;br /&gt;
    parameters-&amp;gt;Clear();&lt;br /&gt;
 &lt;br /&gt;
    parameters-&amp;gt;AddParameter();   //Añadimos el parámetro que espera el procedimiento&lt;br /&gt;
      (*parameters)[0]-&amp;gt;DataType = ftString;&lt;br /&gt;
      (*parameters)[0]-&amp;gt;Direction = pdInput;&lt;br /&gt;
      (*parameters)[0]-&amp;gt;Size = DBEdit1-&amp;gt;Text.Length();&lt;br /&gt;
      (*parameters)[0]-&amp;gt;Value = DBEdit1-&amp;gt;Text;&lt;br /&gt;
 &lt;br /&gt;
    ADOStoredProc1-&amp;gt;ExecProc();   // Y finalmente lo ejecutamos&lt;br /&gt;
 &lt;br /&gt;
==Conclusiones==&lt;br /&gt;
Los procedimientos almacenados permiten aprovechar los recursos del [[servidor]], ahorrar tiempo creando consultas complejas desde el servidor y permiten interactuar con otros objetos, generadores, excepciones, tablas y vistas. Por lo tanto, es importante para todo desarrollador utilizarlos correctamente y saber todo lo que se puede hacer con ellos.&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
*[http://dev.mysql.com/doc/refman/5.0/es/stored-procedures.html Procedimientos Almacenados en MySQL] &lt;br /&gt;
*[http://www.devjoker.com/contenidos/catss/238/Procedimientos-almacenados-en-Transact-SQL.aspx Procedimientos almacenados Transact-SQL]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bases_de_datos]]&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Archivo:Procedimientos_almacenados.jpg&amp;diff=1036553</id>
		<title>Archivo:Procedimientos almacenados.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Archivo:Procedimientos_almacenados.jpg&amp;diff=1036553"/>
		<updated>2011-10-14T19:15:07Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: Procedimientos Almacenados&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sumario ==&lt;br /&gt;
Procedimientos Almacenados&lt;br /&gt;
== Estado de copyright: ==&lt;br /&gt;
&lt;br /&gt;
== Fuente: ==&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Proyecto_de_seguridad_de_aplicaciones_web_abiertas&amp;diff=1008545</id>
		<title>Proyecto de seguridad de aplicaciones web abiertas</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Proyecto_de_seguridad_de_aplicaciones_web_abiertas&amp;diff=1008545"/>
		<updated>2011-10-07T18:05:25Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: /* Fragmento del contenido temático */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Seguridad_informática]] &lt;br /&gt;
{{Definición &lt;br /&gt;
|nombre= OWASP - Open Web Application Security Project&lt;br /&gt;
|imagen=Owasp.jpg&lt;br /&gt;
|tamaño=&lt;br /&gt;
|concepto= Es un proyecto de código abierto dedicado a determinar y combatir las causas que hacen que el software sea inseguro.&lt;br /&gt;
}}&lt;br /&gt;
==OWASP==&lt;br /&gt;
OWASP (acrónimo de Open Web Application Security Project, en inglés ‘Proyecto de seguridad de aplicaciones web abiertas’) es un proyecto de código abierto dedicado a determinar y combatir las causas que hacen que el software sea inseguro. La Fundación OWASP es un organismo sin ánimo de lucro que apoya y gestiona los proyectos e infraestructura de OWASP. La comunidad OWASP está formada por empresas, organizaciones educativas y particulares de todo mundo. Juntos constituyen una comunidad de seguridad informática que trabaja para crear artículos, metodologías, documentación, herramientas y tecnologías que se liberan y pueden ser usadas gratuitamente por cualquiera.&lt;br /&gt;
OWASP es un nuevo tipo de entidad en el mercado de seguridad informática. Estar libre de presiones corporativas facilita que OWASP proporcione información imparcial, práctica y redituable sobre seguridad de aplicaciones informática. OWASP no está afiliado a ninguna compañía tecnológica, si bien apoya el uso informado de tecnologías de seguridad. OWASP recomienda enfocar la seguridad de aplicaciones informáticas considerando todas sus dimensiones: personas, procesos y tecnologías.&lt;br /&gt;
Los documentos con más éxito de OWASP incluyen la Guía OWASP y el ampliamente adoptado documento de autoevaluación OWASP Top 10. Las herramientas OWASP más usadas incluyen el entorno de formación [[WebGoat]], la herramienta de pruebas de penetración [[WebScarab]] y las utilidades de seguridad para entornos .NETOWASP DotNet. OWASP cuenta con unos 50 capítulos locales por todo el mundo y miles de participantes en las listas de correo del proyecto. OWASP ha organizado la serie de conferencias [[AppSec]] para mejorar la construcción de la comunidad de seguridad de aplicaciones web.&lt;br /&gt;
 &lt;br /&gt;
==Historia==&lt;br /&gt;
Los líderes OWASP son responsables de tomar decisiones sobre la dirección técnica, las prioridades del proyecto, los plazos y las publicaciones. Colectivamente, los líderes OWASP pueden considerarse gestores de la Fundación OWASP, si bien el proyecto prima la compartición de conocimiento en la comunidad frente al reconocimiento individual.&lt;br /&gt;
OWASP comenzó en el año 2001. La Fundación OWASP, una organización sin ánimo de lucro, se creó en 2004 para apoyar los proyectos e infraestructura de OWASP.&lt;br /&gt;
&lt;br /&gt;
OWASP depende para su mantenimiento de las donaciones y las cuotas de los socios, particulares y empresas.&lt;br /&gt;
 &lt;br /&gt;
==Proyectos==&lt;br /&gt;
Los proyectos OWASP se dividen en dos categorías principales: proyectos de desarrollo y proyectos de documentación.&lt;br /&gt;
&lt;br /&gt;
===proyectos de documentación===&lt;br /&gt;
Guía OWASP – Un enorme      documento que proporciona una guía detallada sobre la seguridad de las      aplicaciones web.&lt;br /&gt;
OWASP Top 10 – Documento de alto      nivel que se centra sobre las vulnerabilidades más críticas de las      aplicaciones web.&lt;br /&gt;
Métricas – Un proyecto para      definir métricas aplicables de seguridad de aplicaciones web.&lt;br /&gt;
Legal – Un proyecto para ayudar      a los vendedores y compradores de software a negociar adecuadamente los      aspectos de seguridad en sus contratos.&lt;br /&gt;
Guía de pruebas – Una guía      centrada en la prueba efectiva de la seguridad de aplicaciones web.&lt;br /&gt;
ISO 17799 –      Documentos de apoyo para organizaciones que realicen revisiones ISO 17799.&lt;br /&gt;
AppSec FAQ – Preguntas y      respuestas frecuentes sobre seguridad de aplicaciones web.&lt;br /&gt;
&lt;br /&gt;
===Proyectos de desarrollo===&lt;br /&gt;
*WebScarab – Un aplicación de chequeo de vulnerabilidades de aplicaciones web incluyendo herramientas [[proxy]].&lt;br /&gt;
*Filtros de validación (Stinger para [[J2EE]], filters para [[PHP]]) – Filtros genéricos de seguridad perimetral que los desarrolladores pueden usar en sus propias aplicaciones.&lt;br /&gt;
*WebGoat – Una herramientra interactiva de formación y benchmarking para que los usuarios aprendan sobre seguridad de aplicaciones web de forma segura y legal.&lt;br /&gt;
*DotNet – Un conjunto de herramientas para securizar los entornos[[ .NET]].&lt;br /&gt;
&lt;br /&gt;
===Guía OWASP===&lt;br /&gt;
Manual de referencia con vulnerabilidades, contramedidas y una completa metodología para la revisión y evaluación del estado de seguridad de nuestras aplicaciones.&lt;br /&gt;
El marco de trabajo descrito en este documento pretende alentar a las personas a evaluar y tomar una medida de la seguridad a través de todo el proceso de desarrollo. Así, pueden relacionar los costes de un software inseguro al impacto que tiene en su negocio, y de este modo gestionar decisiones de negocio apropiadas (recursos) para la gestión del riesgo.&lt;br /&gt;
El software inseguro tiene de por si sus consecuencias, pero las aplicaciones web inseguras, expuestas a millones de usuarios a través de Internet, representan una inquietud creciente. Incluso a día de hoy, la confianza de los clientes que usan la Web para realizar sus compras o cubrir sus necesidades de información está decreciendo, a medida que más y más aplicaciones web se ven expuestas a ataques. Esta introducción contempla los procesos involucrados en el testing de aplicaciones web:&lt;br /&gt;
*El alcance de qué se debe probar&lt;br /&gt;
*Principios del testing&lt;br /&gt;
*Explicación de las técnicas de pruebas&lt;br /&gt;
*Explicación del marco de pruebas del OWASP&lt;br /&gt;
En la segunda parte de esta guía se cubre como comprobar cada fase del ciclo de vida del desarrollo del software, utilizando las técnicas descritas en este documento. Por ejemplo, la segunda parte cubre como realizar pruebas de vulnerabilidades específicas, como inyección SQL mediante inspección de código fuente y pruebas de intrusión.&lt;br /&gt;
&lt;br /&gt;
====Fragmento del contenido temático====&lt;br /&gt;
*Pruebas de intrusión de [[aplicaciones Web]]&lt;br /&gt;
*[[Spiders]], [[Robots]], y [[Crawlers]]&lt;br /&gt;
*Pruebas de firma digital de aplicaciones web&lt;br /&gt;
*Analisis de codigos de error&lt;br /&gt;
*Pruebas de [[SSL]]/[[TLS]]&lt;br /&gt;
*Pruebas del receptor de escucha de la [[BBDD]]&lt;br /&gt;
*Archivos antiguos, copias de seguridad y sin referencias&lt;br /&gt;
*Metodos http y [[XST]]&lt;br /&gt;
*Comprobación del sistema de autenticación&lt;br /&gt;
*Transmision de credenciales a traves de un canal cifrado&lt;br /&gt;
*Enumeracion de Usuarios&lt;br /&gt;
*Cuentas de usuario adivinables (diccionario) O por defecto&lt;br /&gt;
*Fuerza bruta&lt;br /&gt;
*Saltarse el sistema de autenticación&lt;br /&gt;
*Pruebas de gestión del caché de navegación y de salida de sesión&lt;br /&gt;
*Pruebas de Captcha&lt;br /&gt;
*Pruebas para atributos de cookies&lt;br /&gt;
*Pruebas para [[CSRF]]&lt;br /&gt;
*Pruebas de ruta transversal&lt;br /&gt;
*Pruebas de escalada de privilegios&lt;br /&gt;
*Pruebas de cross site scripting Reflejado&lt;br /&gt;
*[[Inyección SQL]]&lt;br /&gt;
*Inyeccion [[XML]]&lt;br /&gt;
*Pruebas de desbordamiento de búfer&lt;br /&gt;
*Pruebas de [[HTTP]] Splitting/Smuggling&lt;br /&gt;
*Pruebas de denegación de servicio&lt;br /&gt;
&lt;br /&gt;
==Referencia==&lt;br /&gt;
*[http://www.owasp.org/ Open Web Application Security Project]&lt;br /&gt;
*[http://www.dragonjar.org/owasp-testing-guide-3-0-en-espanol.xhtml  OWASP Testing Guide 3.0 en Español]&lt;br /&gt;
*[https://www.owasp.org/index.php/Category:OWASP_Testing_Project OWASP Testing Project]&lt;br /&gt;
*[https://www.owasp.org/index.php/Spain OWASP Spain]&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=WordPress&amp;diff=1008524</id>
		<title>WordPress</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=WordPress&amp;diff=1008524"/>
		<updated>2011-10-07T18:03:00Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: /* Vulnerabilidades */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=WordPress&lt;br /&gt;
|familia=&lt;br /&gt;
|imagen=Wordpress-logo-texto0.png&lt;br /&gt;
|tamaño=&lt;br /&gt;
|descripción=Sistema gestor de contenidos para blogs y páginas web.&lt;br /&gt;
|imagen2=&lt;br /&gt;
|tamaño2=&lt;br /&gt;
|descripción2=&lt;br /&gt;
|creador=Matt Mullenweg, Mike Little&lt;br /&gt;
|desarrollador=Ryan Boren, Mark Jaquith, Andrew Ozz, Peter Westwood&lt;br /&gt;
|diseñador=&lt;br /&gt;
|modelo de desarrollo=&lt;br /&gt;
|lanzamiento inicial=[[27 de mayo]] de [[2003]]&lt;br /&gt;
|versiones=0.70, 1.2, 1.5, 2.0, 2.1, 2.2, 2.3, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.1, 3.2, 3.2.1 &lt;br /&gt;
|última versión estable=3.2.1&lt;br /&gt;
|género=&lt;br /&gt;
|sistemas operativos=''Cross-platform''&lt;br /&gt;
|idioma=[[Inglés]], [[español]]&lt;br /&gt;
|licencia=[[GPL]]&lt;br /&gt;
|premios=''Open Source CMS Award'' ([[2007]], [[2009]])&lt;br /&gt;
|web=[http://wordpress.org/ WordPress]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: none;&amp;quot; id=&amp;quot;divCleekiAttrib&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
'''WordPress'''. [[Sistema de gestión de contenidos]] enfocado a la creación de [[Blogs]] (sitios web periódicamente actualizados). Desarrollado en [[PHP]] y [[MySQL]], bajo licencia [[GPL]] y código modificable, tiene como fundador a [[Matt Mullenweg]]. WordPress fue creado a partir del desaparecido b2/cafelog y se ha convertido junto a [[Movable Type]] en el [[CMS]] más popular de la [[Blogosfera]]. Las causas de su enorme crecimiento son, entre otras, su licencia, su facilidad de uso y sus características como gestor de contenidos.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro motivo a considerar sobre su éxito y extensión, es la enorme comunidad de desarrolladores y diseñadores, que se encargan de desarrollarlo en general o crear plugins y temas para la comunidad, siendo usado en [[septiembre]] de 2009 por 202 millones de usuarios.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Historia&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
=== Nombre y versiones&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
El desarrollador principal [[Matt Mullenweg]] eligió el nombre WordPress por sugerencia de su amiga [[Christine Selleck]]. Las versiones lanzadas de WordPress tienen como nombre en clave músicos de [[jazz]], como por ejemplo la versión 1.0, [[Mingus]]. La versión 1.5, que fue lanzada a mediados de [[febrero de 2005]] tiene como nombre en clave &amp;quot;Strayhorn&amp;quot; ([[Billy Strayhorn]]) y ofreció una gama amplia de nuevas características como por ejemplo el uso de páginas estáticas.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== La empresa&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
Automattic, la empresa detrás de WordPress, tiene asimismo un servicio de alojamiento de blogs gratuito basado en su software llamado WordPress.com.&amp;lt;br&amp;gt;Facilita la administración de páginas fuera del orden cronológico &amp;quot;normal&amp;quot; del weblog y ha sido el primer paso para transformarse de un software básico de administración de blogs a un completo sistema de administración de contenidos.&amp;lt;br&amp;gt;Otra funcionalidad es la del sistema de creación de plantillas (&amp;quot;Themes&amp;quot;), las cuales permiten al usuario activar o desactivar una u otra según deseen para sus sitios. WordPress también ha sido equipado &amp;quot;de serie&amp;quot; con una nueva plantilla por defecto (con nombre en clave [[Kubrick]] denominada como &amp;quot;Default&amp;quot;) además de la tradicional e inicial &amp;quot;Classic&amp;quot;, sencilla y válida con los estándares del W3C.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Desarrolladores&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
El desarrollo de WordPress es dirigido por [[Ryan Boren]] y [[Matt Mullenweg]]. Mullenweg y [[Mike Little]] fueron los fundadores del proyecto. Los desarrolladores de WordPress son:&amp;lt;br&amp;gt;• [[Dougal Campbell]]&amp;lt;br&amp;gt;• [[Mark Jaquith]]&amp;lt;br&amp;gt;• [[Donncha Ó Caoimh]]&amp;lt;br&amp;gt;• [[Andy Skelton]]&amp;lt;br&amp;gt;• [[Michel Valdrighi]]&amp;lt;br&amp;gt;• [[Peter Westwood]]&amp;lt;br&amp;gt;Aunque gran parte del proyecto ha sido desarrollado por la comunidad alrededor de WordPress, aún está asociado a [[Automattic]], la empresa donde algunos de los principales contribuyentes de WordPress son empleados.&amp;lt;br&amp;gt;WordPress es también en parte desarrollado por su comunidad, entre los que se cuentan los testers, un grupo de personas que dedican tiempo y esfuerzo voluntariamente para probar cada lanzamiento. Ellos tienen acceso a las versiones aún en desarrollo (conocidas como nightly builds), versiones Beta y versiones candidatas (Release Candidates). Actualizando a estas versiones, ellos pueden encontrar errores y reportarlos a una [[Lista de correo]] especial. o al [[Sistema de seguimiento de errores]] basado en [[Trac]].&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Características principales&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
WordPress nació del deseo de construir un sistema de publicación personal, elegante y con una buena arquitectura (&amp;quot;Code is poetry&amp;quot;). Basado en PHP, MySQL y licenciado bajo GPL, Wordpress pone especial atención a la estética, [[estándares web]], y usabilidad.&amp;lt;br&amp;gt;En principio, está configurado para usar una bitácora o weblog por sitio o instalación, pero también es posible, sin &amp;quot;hacks&amp;quot; o añadidos, tener varios blogs -varias instalaciones en realidad- con varias o una única base de datos.&amp;lt;br&amp;gt;Además, existen versiones similares, paralelas o &amp;quot;hackeadas&amp;quot; de Wordpress que permiten esta funcionalidad, una de las más conocidas, extendida y de más soporte es Wordpress MU:&amp;lt;br&amp;gt;Debido a que Wordpress no permitía esta funcionalidad, hay disponible una versión adaptada y similar de los mismos desarrolladores llamada [[WordPress MU]], que permite la instalación de múltiples blogs.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Estructura&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
Wordpress, en principio, es un sistema de publicación web basado en entradas ordenadas por fecha, entre otras muchas posibilidades además de páginas estáticas. &lt;br /&gt;
&lt;br /&gt;
*La estructura y diseño visual del sitio depende del sistema de plantillas. &lt;br /&gt;
*La filosofía de Wordpress apuesta decididamente por la elegancia, la sencillez y las recomendaciones del [[W3C]] pero depende siempre de la plantilla a usar. &amp;quot;Classic&amp;quot;, por ejemplo es una plantilla que viene &amp;quot;de serie&amp;quot; y que es válido como (X)HTML Transicional y CSS. &lt;br /&gt;
*Separa el contenido y el diseño en [[XHTML]] y [[CSS]], aunque, como se ha dicho, depende de la plantilla que se esté usando. No obstante, el código que se intenta generar en las entradas (&amp;quot;posts&amp;quot;) apuesta por esta característica forzando -si así se elige- un marcado correcto. &lt;br /&gt;
*La gestión y ejecución corre a cargo del sistema de administración con los plugins y los widgets que usan las plantillas.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
*Fácil instalación, actualización y personalización. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Posibilidad de actualización automática del sistema implementada en la versión 2.7. &lt;br /&gt;
*Múltiples autores o usuarios, junto con sus roles o perfiles que establecen distintos niveles de permisos desde la versión 2.0). &lt;br /&gt;
*Múltiples blogs o bitácoras (desde la versión 1.6). &lt;br /&gt;
*Capacidad de crear páginas estáticas (a partir de la versión 1.5). &lt;br /&gt;
*Permite ordenar artículos y páginas estáticas en categorías, subcategorías y etiquetas (&amp;quot;tags&amp;quot;). &lt;br /&gt;
*Cuatro estados para una entrada (&amp;quot;post&amp;quot;): Publicado, Borrador, Esperando Revisión (nuevo en Wordpress 2.3) y Privado (sólo usuarios registrados), además de uno adicional: Protegido con contraseña. &lt;br /&gt;
*Editor WYSIWYG &amp;quot;What You See Is What You Get&amp;quot; en inglés, &amp;quot;lo que ves es lo que obtienes&amp;quot; (desde la versión 2.0). &lt;br /&gt;
*Publicación mediante email. &lt;br /&gt;
*Importación desde Blogger, Blogware, Dotclear, Greymatter, Livejournal, Movable Type y Typepad, Textpattern y desde cualquier fuente RSS. Se está trabajando para poder importar desde pMachine y Nucleus además de la importación a través de scripts o directamente de base de datos. &lt;br /&gt;
*Guardado automático temporizado del artículo como Borrador (A partir de la versión 2.2). &lt;br /&gt;
*Permite comentarios y herramientas de comunicación entre blogs (Trackback, Pingback, etc). &lt;br /&gt;
*Permite &amp;quot;permalinks&amp;quot; (enlaces permanentes y fáciles de recordar) mediante mod_rewrite. &lt;br /&gt;
*Distribución de los artículos mediante RDF, RSS 0.92, RSS 2.0 y Atom 1.0. &lt;br /&gt;
*Distribución de las discusiones (mediante RSS 2.0 y ATOM 1.0). &lt;br /&gt;
*Gestión y distribución de enlaces. &lt;br /&gt;
*Subida y gestión de adjuntos y archivos multimedia. &lt;br /&gt;
*Admite &amp;quot;Plugins&amp;quot; (versión 1.6). &lt;br /&gt;
*Admite plantillas y &amp;quot;Widgets&amp;quot; para éstas. &lt;br /&gt;
*Búsqueda integrada. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Búsqueda en entradas y páginas estáticas y Widget de casa para búsqueda integrada de google desde la versión 2.5. &lt;br /&gt;
*Integración: &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; bbPress, sistema de foros de los mismos creadores, se integra automáticamente con Wordpress. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Integración con el foro Vanilla de Lussumo factible, al menos hasta la versión 2.2 no inclusive.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiblogging&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
WordPress soporta un blog por instalación, aunque se pueden utilizar múltiples copias en directorios distintos si se utilizan tablas de bases de datos separadas.&amp;lt;br&amp;gt;WordPress MU (también conocido como WPMU) es una derivación de WordPress creada para permitir la existencia de varios blogs en una sola instalación. WordPress MU hace posible para cualquier con un sitio web que desee alojar su propia comunidad de blogs, controlar y moderar todos los blogs desde un solo entorno de administración. WordPress MU añade ocho nuevas tablas de datos para cada blog respecto a WordPress. Es utilizado en el servicio de alojamiento de blogs gratuito WordPress.com, además de otras organizaciones como el diario Le Monde, la Universidad de Harvard y Edublogs.&amp;lt;br&amp;gt;Lyceum es otra versión empresarial de WordPress. A diferencia de WordPress MU, Lyceum almacena toda la información en un conjunto de tablas de base de datos. Algunas comunidades destacadas que usan Lyceum son TeachFor.Us(Teach for America teacher's blogs), BodyBlogs y Hopkins Blogs.&amp;lt;br&amp;gt;En 2008 Andy Peatling se unió a Automattic para continuar su trabajo en [[BuddyPress]], una extensión de WPMU que añadirá características de comunidad a WordPress.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Plantillas&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
Las plantillas (themes) de Wordpress son plantillas de diseño que sirven para establecer la apariencia y estructura de tu blog.&amp;lt;br&amp;gt;Hay una gran comunidad oficial, tanto profesional como de usuarios, dedicada al diseño de estas plantillas que se suelen listar en el sitio de Wordpress una vez han sido comprobadas y aprobadas oficialmente -ver lista de Enlaces externos-.&amp;lt;br&amp;gt;Aunque la filosofía de Wordpress apuesta por un marcado válido según las directrices del W3C, las posibilidades de este sistema, tanto a nivel de diseño, estructura o gestión, y la flexibilidad del sistema de plantilla y widgets en concreto, son enormes y prácticamente permiten tener desde un simple blog hasta un CMS personalizado.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Widgets  ===&lt;br /&gt;
&lt;br /&gt;
Wordpress incorpora un sistema de Widgets para sus plantillas desde la versión 2.2 que ofrece numerosas posibilidades y flexibilidad para el diseño y estructura de sus blogs. Si bien son sumamente útiles, no todos las plantillas lo soportan.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Plugins  ===&lt;br /&gt;
&lt;br /&gt;
Hay una ingente cantidad de plugins que potencian el uso de Wordpress más allá de una simple bitácora y que lo hacen un sistema flexible y prácticamente de propósito general. Los plugins de Wordpress se incorporaron en la versión 1.6.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Versiones&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
=== Iniciales&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
1.0 La primera versión final de Wordpress se lanzó oficialmente el 3 de enero de 2004, se llamó denominada &amp;quot;Miles&amp;quot; por el músico de jazz Miles Davis.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Rama 2.x  ===&lt;br /&gt;
&lt;br /&gt;
Desde el lanzamiento de Wordpress 2.1, se empezó a usar la versión 4.1 de MySQL mientras que Wordpress 2.0 usa MySQL 3. Con las nuevas versiones 2.x, el equipo de Wordpress analizó los servicios de &amp;quot;hosting&amp;quot; vigentes y concretaron que todavía muchos de estos servicios no soportaban MySQL 4. Así, se decidió seguir dando soporte de Wordpress 2.0 (actualizaciones de seguridad) hasta el 2010, donde se esperaban que todos los servicios de hosting empiecen a ofrecer MySQL 4 y 5.&amp;lt;br&amp;gt;Además, está la obsolescencia de PHP4 para 2008 lo que provoca que las nuevas versiones de Wordpress estén construidas con base en la versión 5, aunque manteniendo la compatibilidad inversa -y el soporte de la rama 2.0- en iguales circunstancias que con MySQL.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*2.0 (Duke), la versión de Wordpress, denominada &amp;quot;Duke&amp;quot; por el músico Duke Ellington y lanzada el 31 de diciembre de 2005, fue después de la versión 2.5 realmente el desarrollo más innovador y con más cambios, o al menos de más impacto, hasta esa fecha. Incluía el editor WYSIWIG &amp;quot;TinyMCE&amp;quot;, la subida de adjuntos e imágenes, gestión de roles o perfiles de usuarios, caché persistente de contenidos, soporte de diferentes versiones para la base de datos y backup de ésta, el plugin antispam Akismet -también de Automattic-, previsualización de entradas y algunas funciones AJAX entre otras. &lt;br /&gt;
*2.0.12: La rama 2.0.x adquiere Soporte oficial, esta versión incluye arreglos de seguridad, mejoras y estética para la rama 2.0. &lt;br /&gt;
*2.2 (Getz), versión de Wordpress llamada &amp;quot;Getz&amp;quot; en honor al saxofonista Stan Getz. Esta versión fue sacada a la luz el día 16 de mayo del 2007 e incluye 200 actualizaciones de &amp;quot;bugs&amp;quot;. Su funcionalidad más notable añadida es la integración de Widgets. &lt;br /&gt;
*2.3 (Dexter), la versión llamada &amp;quot;Dexter&amp;quot;, en honor al saxofonista Dexter Gordon lanzada oficialmente el 24 de septiembre de 2007. &lt;br /&gt;
*2.4, versión cancelada en enero de 2008 para pasar a la versión 2.5. Se canceló por diversos motivos pero principalmente por los fallos y retraso en el demasiado rápido desarrollo del nuevo &amp;quot;tablero&amp;quot; (dashboard) y que fue reescrito para la versión 2.5. &lt;br /&gt;
*2.5 (Brecker), llamada &amp;quot;Brecker&amp;quot; en honor al saxofonista Michael Brecker y que salió oficialmente el 29 de marzo de 2008. Ésta versión fue un nuevo punto de inflexión en el desarrollo de Wordpress con especial énfasis en la mejora del &amp;quot;tablero&amp;quot; (administración) de Wordpress. Se mejoró el aspecto visual y la usabilidad de la administración, en especial añadiendo funciones AJAX que, en general, mejoraban todo el tablero y en concreto: la gestión de adjuntos y archivos multimedia, de etiquetas, categorías y enlaces, guardado automático de borradores por tiempo, sistema automático de actualización de plugins, mejora del sistema de widgets para plantillas.También fue importante el añadido del API para &amp;quot;Shortcode&amp;quot; que permite ejecutar código en las entradas (&amp;quot;posts&amp;quot;) sin el uso directo de incrustación PHP, soporte para el servicio Gravatar en comentarios y generación automática de galerías de imágenes sobre los adjuntos. &lt;br /&gt;
*2.5.1, versión de mejora en seguridad y corrección de bugs lanzada el 25 de abril de 2008. &lt;br /&gt;
*2.6 (Tyner), llamada &amp;quot;Tyner&amp;quot; en honor al pianista de jazz McCoy Tyner y que es lanzada el 15 de julio de 2008. La versión Tyner, introduce -según el blog de desarrollo- nuevas mejoras que potencian el uso de Wordpress como CMS. Por ejemplo la gestión de revisiones y versiones de las entradas (diff) al estilo tradicional de las wikis, la posibilidad de sacar del árbol web directorios y archivos sensibles, soporte completo SSL, nuevas versiones de algunas de sus bibliotecas incluidas tales como jQuery y jQuery UI (1.5.1) o TinyMCE, mejora y añadido de plugins como &amp;quot;Wordpress Video&amp;quot;, pre visualización de plantillas en administración, campos extra para perfiles de usuario (hasta ahora mediante plugins) o la posibilidad de establecer varias sub-categorías, entre otras nuevas funciones y, según la noticia oficial, correcciones sobre 194 errores o bugs. &lt;br /&gt;
*2.6.2 Parche dirigido prácticamente en exclusiva a solucionar vulnerabilidades en el registro de usuarios, relacionadas con la generación aleatoria de contraseñas y el posible reseteo de las mismas para otros usuarios. Afecta por lo tanto sólo a sistemas con el registro de usuarios habilitado. &lt;br /&gt;
*2.6.3 Parche dirigido para solucionar una vulnerabilidad de bajo riesgo en la biblioteca Snoopy, la cual se utiliza para mostrar los feeds en el Tablero. &lt;br /&gt;
*2.7 (Coltrane) Llamada &amp;quot;Coltrane&amp;quot;, en honor al saxofonista John Coltrane, y que es lanzada el 10 de diciembre del 2008.Esta versión incorpora, sobre todo, una nueva y muy esperada interfaz gráfica (1.0) con, también nuevas, mejoras AJAX, corrección de algunos fallos en la actual y, en especial, el cambio, tanto de ubicación como en relación a la usabilidad, del menú general superior a la parte izquierda de la pantalla. El nuevo menú posibilita el acceso a cualquier sección sin importar la profundidad de las sub-secciones gracias a la implementación de AJAX para hacerlo extensible. Además, otro aspecto muy esperado, es la implementación del sistema de actualización automática para el sistema en general y que está basado, como en otras ocasiones ya se ha hecho, en el plugin independiente que ya había. Se acaba de implementar el sistema de cookies sobre HTTP en exclusiva, el añadido de adjuntos sin la necesidad de guardarlos como entradas, explorador de archivos para plugins, edición en línea (no desde el tablero), la documentación PHPDoc estará disponible y se incluyen funcionalidades para «arrastrar y soltar» elementos en el Tablero, entre otros. Como es habitual se corrige otro gran número de bugs en relación sobre todo a la interfaz y su funcionalidad respecto a navegadores, localizaciones, etc, así como sobre el código del sistema y validaciones varias. &lt;br /&gt;
*2.7.1 Arregla más de 60 errores menores, y que es lanzada el 10 de febrero del 2009. &lt;br /&gt;
*2.8 (Baker). Llamada &amp;quot;Baker&amp;quot; en honor al trompetista Chet Baker. La versión 2.8 incluye características enfocadas a usuarios avanzados, como el nuevo editor de código CodePress que, a diferencia del anterior editor, resalta el código dependiendo del lenguaje que se está usando. Otra nueva característica que se incluye es la instalación de plantillas vía web, similar a la instalación de plugins vía web insertada en la versión 2.7 &lt;br /&gt;
*2.8.6: Se liberó el 12 de noviembre de 2009. &lt;br /&gt;
*2.9 (Carmen): Llamada &amp;quot;Carmen&amp;quot; en honor a la cantante y pianista Carmen McRae. Permite hacer ediciones en imágenes (Rotar, voltear, recortar), incrustación de multimedia (sin necesidad de código embed), así como un sistema de papelera para almacenar los comentarios y artículos eliminados, entre otros.[22] &lt;br /&gt;
*2.9.1: Esta revisión soluciona los fallos encontrados en la versión 2.9. &lt;br /&gt;
*2.9.2: Esta revisión soluciona un fallo de seguridad que permite obtener los resultado de la papelera. Además soluciona otros fallos encontrados en la versión 2.9.1&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rama 3.x  ===&lt;br /&gt;
&lt;br /&gt;
*3.0: Fusiona Wordpress con &amp;quot;Wordpress Mu&amp;quot; para dar soporte multiblogging por defecto. Los menúes son editables y las actualizaciones de plugins pueden realizarse en masa. &lt;br /&gt;
*3.1&amp;amp;nbsp;: Esta versión, la número 14, fue lanzada el 22 de febrero de 2011 y se llama Django Reinhardt en honor al Jazzista. Las novedades principales de esta versión son: &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Enlaces internos – con un clic en el nuevo botón para enlaces internos podrás buscar una entrada o revisar el contenido existente para enlazarlo. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Barra de admin – contiene varios enlaces para acceder a diversas pantallas de administración. Por defecto, la barra de admin se muestra cuando un usuario ha accedido y está visitando el sitio, y no se muestra en las pantallas de administración en las instalaciones simples (sin multisitio activado). Para las instalaciones con multisitio se muestra tanto cuando estás visitando el sitio como en las pantallas de administración &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Mejoras en la interfaz de escritura – Los nuevos usuarios de WordPress encontrarán la pantalla de escritura mucho más limpia que antes, con la mayoría de las opciones ocultas por defecto. (puedes hacer clic en Opciones de pantalla de la parte superior para volverlas a mostrar) &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Formatos de entrada – La información de los formatos pueden usarla los temas para personalizar la presentación de una entrada. Tienes más información en Formatos de entrada (en inglés todavía). &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Administrador de la red – Se han movido los menús del Super administrador y las páginas relacionadas de la pantalla de admin habitual a la nueva Pantalla de administrador de la red. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Pantallas de administración en modo de lista – puedes ordenar las columnas de las pantallas con listados (páginas, entradas, comentarios, etc) para mejorar la paginación. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Mejoras del exportador/importador – Hay muchos cambios en la información del autor, mejora en el manejo de taxonomías y términos, soporte correcto de menús de navegación, etc. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Mejoras en el tipo de contenido personalizado – Permite a los desarrolladores crear páginas de archivo y disponer de más controles de las capacidades y mejores menús. Aprende más en Tipos de entrada (en inglés todavía). &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Consultas avanzadas – Permite a los desarrolladores realizar consultas múltiples de taxonomías y campos personalizados. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Un esquema de color azul para la administración más fresco que centra la atención en tu contenido.&lt;br /&gt;
&lt;br /&gt;
=== WordPress para iPhone  ===&lt;br /&gt;
&lt;br /&gt;
El 11 de julio de 2008, con el lanzamiento de [[iTunes App Store]] por Apple Inc., WordPress también lanzó su primera aplicación nativa para [[iPhone]] y [[iPod Touch]]. La aplicación WordPress tiene todas las características que tiene el panel de administración de WordPress. Esta aplicación funciona para todos los blogs en WordPress.com y alojamientos propios en WordPress 2.5.1 o superior.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Instalación  ==&lt;br /&gt;
&lt;br /&gt;
Windows: Actualmente existe la posibilidad de poder instalar Wordpress en nuestro ordenador de una forma sencilla y rápida con [[Microsoft Web Platform Installer]].&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Premios  ==&lt;br /&gt;
&lt;br /&gt;
En diciembre de 2009 ganó el premio al mejor CMS de Software Libre en el certamen de los Open Source CMS Awards compitiendo con otras 12.000 candidaturas, en este concurso ganó el segundo lugar como mejor CMS basado en PHP.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Temas visuales auspiciados  ==&lt;br /&gt;
&lt;br /&gt;
El 20 de julio de 2007, siguiendo a una discusión en el foro de ideas de WordPress y una publicación de Mark Ghosh en su blog Weblogs Tools Collection, Matt Mullenweng anunció que el directorio de temas oficial de WordPress en [[http://themes.wordpress.net]] no alojaría temas visuales conteniendo enlaces patrocinados. Aunque este movimiento fue criticado por los diseñadores y usuarios de temas patrocinados, fue aplaudido por algunos usuarios de WordPress que consideraban a dichos temas como spam. El directorio de temas de WordPress dejó de aceptar cualquier nuevo tema, incluyendo aquellos sin enlaces patrocinados, tiempo después de que el anuncio fue realizado. Irónicamente, el cierre del sitio oficial y su consecuente falta de temas actualizados generó que varias personas descargaran temas de sitios no oficiales que insertaban sus propios enlaces de spam en todos los temas descargados desde dichos sitios.&amp;lt;br&amp;gt;El 18 de julio de 2008, un nuevo directorio de temas fue abierto en [[http://wordpress.org/extend/themes/]]. Fue diseñado con los mismos lineamientos que el directorio de plugins (extensiones). Cualquier tema que sea colgado puede ser vetado en principio por un programa automatizado y luego por un humano. &lt;br /&gt;
&lt;br /&gt;
== Vulnerabilidades  ==&lt;br /&gt;
&lt;br /&gt;
BlogSecurity actualmente mantiene una lista de vulnerabilidades descubiertas en WordPress.&amp;lt;br&amp;gt;En enero de 2007, muchos sitios reconocidos de blogs relacionados a optimización de búsquedas ([[Search engine optimization]], SEO), así como muchos blogs comerciales de menor importacia y que utilizaban [[AdSense]] fueron objetivo de ataques con un [[exploit]] (pieza de código que explota una vulnerabilidad).&amp;lt;br&amp;gt;Una vulnerabilidad en uno de los servidores web del proyecto WordPress permitió a un atacante introducir código con vulnerabilidades en forma de una puerta trasera (back door) para algunas descargas de WordPress 2.1.1. El lanzamiento de la versión 2.1.2 superó este incidente; una advertencia enviada a tiempo aconsejó a todos los usuarios actualizar inmediatamente.&amp;lt;br&amp;gt;En mayo de 2007, un estudio reveló que el 98% de los blogs basados en WordPress eran vulnerables a ataques.&amp;lt;br&amp;gt;En una entrevista en junio de 2007, Stefen Esser, el fundandor del PHP Security Response Team, criticó el registro de seguridad de WordPress, citando problemas con la arquitectura de la aplicación que hacían innecesariamente difícil escribir código que sea seguro frente a vulnerabilidades de [[inyección SQL]], así como otros problemas.&lt;br /&gt;
&lt;br /&gt;
== Críticas  ==&lt;br /&gt;
&lt;br /&gt;
Las críticas de WordPress se han centrado varias veces alrededor de su seguridad; muchos problemas de seguridad no han sido resueltos en el software, particularmente entre 2007 y 2008. De acuerdo a Secunia, WordPress a noviembre de 2008 tiene 7 advertencias de seguridad no solucionadas (de un total de 31), con una calificación máxima de &amp;quot;Menos Crítica&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
*[http://es.wordpress.org/ Sitio Oficial en Español]&lt;br /&gt;
*[http://es.wikipedia.org/wiki/WordPress/ Wikipedia]&lt;br /&gt;
&lt;br /&gt;
== Referencias  ==&lt;br /&gt;
&lt;br /&gt;
[http://www.google.es/search?q=Wordpress+como+CMS Google: Wordpress como CMS] &lt;br /&gt;
&lt;br /&gt;
== Enlaces Externos  ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.wordpress.org/ Página Web Oficial]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div id=&amp;quot;divCleekiAttrib&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div style=&amp;quot;display: none;&amp;quot; id=&amp;quot;divCleekiAttrib&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
[[Category:Software_Libre]]&lt;br /&gt;
&amp;lt;div id=&amp;quot;divCleekiAttrib&amp;quot; style=&amp;quot;display: none;&amp;quot; expanded=&amp;quot;0&amp;quot; activeid=&amp;quot;-1&amp;quot; menuleft=&amp;quot;0&amp;quot; menutop=&amp;quot;0&amp;quot; menuright=&amp;quot;0&amp;quot; menubottom=&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=WordPress&amp;diff=1008507</id>
		<title>WordPress</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=WordPress&amp;diff=1008507"/>
		<updated>2011-10-07T18:00:57Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=WordPress&lt;br /&gt;
|familia=&lt;br /&gt;
|imagen=Wordpress-logo-texto0.png&lt;br /&gt;
|tamaño=&lt;br /&gt;
|descripción=Sistema gestor de contenidos para blogs y páginas web.&lt;br /&gt;
|imagen2=&lt;br /&gt;
|tamaño2=&lt;br /&gt;
|descripción2=&lt;br /&gt;
|creador=Matt Mullenweg, Mike Little&lt;br /&gt;
|desarrollador=Ryan Boren, Mark Jaquith, Andrew Ozz, Peter Westwood&lt;br /&gt;
|diseñador=&lt;br /&gt;
|modelo de desarrollo=&lt;br /&gt;
|lanzamiento inicial=[[27 de mayo]] de [[2003]]&lt;br /&gt;
|versiones=0.70, 1.2, 1.5, 2.0, 2.1, 2.2, 2.3, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.1, 3.2, 3.2.1 &lt;br /&gt;
|última versión estable=3.2.1&lt;br /&gt;
|género=&lt;br /&gt;
|sistemas operativos=''Cross-platform''&lt;br /&gt;
|idioma=[[Inglés]], [[español]]&lt;br /&gt;
|licencia=[[GPL]]&lt;br /&gt;
|premios=''Open Source CMS Award'' ([[2007]], [[2009]])&lt;br /&gt;
|web=[http://wordpress.org/ WordPress]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: none;&amp;quot; id=&amp;quot;divCleekiAttrib&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
'''WordPress'''. [[Sistema de gestión de contenidos]] enfocado a la creación de [[Blogs]] (sitios web periódicamente actualizados). Desarrollado en [[PHP]] y [[MySQL]], bajo licencia [[GPL]] y código modificable, tiene como fundador a [[Matt Mullenweg]]. WordPress fue creado a partir del desaparecido b2/cafelog y se ha convertido junto a [[Movable Type]] en el [[CMS]] más popular de la [[Blogosfera]]. Las causas de su enorme crecimiento son, entre otras, su licencia, su facilidad de uso y sus características como gestor de contenidos.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro motivo a considerar sobre su éxito y extensión, es la enorme comunidad de desarrolladores y diseñadores, que se encargan de desarrollarlo en general o crear plugins y temas para la comunidad, siendo usado en [[septiembre]] de 2009 por 202 millones de usuarios.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Historia&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
=== Nombre y versiones&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
El desarrollador principal [[Matt Mullenweg]] eligió el nombre WordPress por sugerencia de su amiga [[Christine Selleck]]. Las versiones lanzadas de WordPress tienen como nombre en clave músicos de [[jazz]], como por ejemplo la versión 1.0, [[Mingus]]. La versión 1.5, que fue lanzada a mediados de [[febrero de 2005]] tiene como nombre en clave &amp;quot;Strayhorn&amp;quot; ([[Billy Strayhorn]]) y ofreció una gama amplia de nuevas características como por ejemplo el uso de páginas estáticas.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== La empresa&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
Automattic, la empresa detrás de WordPress, tiene asimismo un servicio de alojamiento de blogs gratuito basado en su software llamado WordPress.com.&amp;lt;br&amp;gt;Facilita la administración de páginas fuera del orden cronológico &amp;quot;normal&amp;quot; del weblog y ha sido el primer paso para transformarse de un software básico de administración de blogs a un completo sistema de administración de contenidos.&amp;lt;br&amp;gt;Otra funcionalidad es la del sistema de creación de plantillas (&amp;quot;Themes&amp;quot;), las cuales permiten al usuario activar o desactivar una u otra según deseen para sus sitios. WordPress también ha sido equipado &amp;quot;de serie&amp;quot; con una nueva plantilla por defecto (con nombre en clave [[Kubrick]] denominada como &amp;quot;Default&amp;quot;) además de la tradicional e inicial &amp;quot;Classic&amp;quot;, sencilla y válida con los estándares del W3C.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Desarrolladores&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
El desarrollo de WordPress es dirigido por [[Ryan Boren]] y [[Matt Mullenweg]]. Mullenweg y [[Mike Little]] fueron los fundadores del proyecto. Los desarrolladores de WordPress son:&amp;lt;br&amp;gt;• [[Dougal Campbell]]&amp;lt;br&amp;gt;• [[Mark Jaquith]]&amp;lt;br&amp;gt;• [[Donncha Ó Caoimh]]&amp;lt;br&amp;gt;• [[Andy Skelton]]&amp;lt;br&amp;gt;• [[Michel Valdrighi]]&amp;lt;br&amp;gt;• [[Peter Westwood]]&amp;lt;br&amp;gt;Aunque gran parte del proyecto ha sido desarrollado por la comunidad alrededor de WordPress, aún está asociado a [[Automattic]], la empresa donde algunos de los principales contribuyentes de WordPress son empleados.&amp;lt;br&amp;gt;WordPress es también en parte desarrollado por su comunidad, entre los que se cuentan los testers, un grupo de personas que dedican tiempo y esfuerzo voluntariamente para probar cada lanzamiento. Ellos tienen acceso a las versiones aún en desarrollo (conocidas como nightly builds), versiones Beta y versiones candidatas (Release Candidates). Actualizando a estas versiones, ellos pueden encontrar errores y reportarlos a una [[Lista de correo]] especial. o al [[Sistema de seguimiento de errores]] basado en [[Trac]].&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Características principales&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
WordPress nació del deseo de construir un sistema de publicación personal, elegante y con una buena arquitectura (&amp;quot;Code is poetry&amp;quot;). Basado en PHP, MySQL y licenciado bajo GPL, Wordpress pone especial atención a la estética, [[estándares web]], y usabilidad.&amp;lt;br&amp;gt;En principio, está configurado para usar una bitácora o weblog por sitio o instalación, pero también es posible, sin &amp;quot;hacks&amp;quot; o añadidos, tener varios blogs -varias instalaciones en realidad- con varias o una única base de datos.&amp;lt;br&amp;gt;Además, existen versiones similares, paralelas o &amp;quot;hackeadas&amp;quot; de Wordpress que permiten esta funcionalidad, una de las más conocidas, extendida y de más soporte es Wordpress MU:&amp;lt;br&amp;gt;Debido a que Wordpress no permitía esta funcionalidad, hay disponible una versión adaptada y similar de los mismos desarrolladores llamada [[WordPress MU]], que permite la instalación de múltiples blogs.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Estructura&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
Wordpress, en principio, es un sistema de publicación web basado en entradas ordenadas por fecha, entre otras muchas posibilidades además de páginas estáticas. &lt;br /&gt;
&lt;br /&gt;
*La estructura y diseño visual del sitio depende del sistema de plantillas. &lt;br /&gt;
*La filosofía de Wordpress apuesta decididamente por la elegancia, la sencillez y las recomendaciones del [[W3C]] pero depende siempre de la plantilla a usar. &amp;quot;Classic&amp;quot;, por ejemplo es una plantilla que viene &amp;quot;de serie&amp;quot; y que es válido como (X)HTML Transicional y CSS. &lt;br /&gt;
*Separa el contenido y el diseño en [[XHTML]] y [[CSS]], aunque, como se ha dicho, depende de la plantilla que se esté usando. No obstante, el código que se intenta generar en las entradas (&amp;quot;posts&amp;quot;) apuesta por esta característica forzando -si así se elige- un marcado correcto. &lt;br /&gt;
*La gestión y ejecución corre a cargo del sistema de administración con los plugins y los widgets que usan las plantillas.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
*Fácil instalación, actualización y personalización. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Posibilidad de actualización automática del sistema implementada en la versión 2.7. &lt;br /&gt;
*Múltiples autores o usuarios, junto con sus roles o perfiles que establecen distintos niveles de permisos desde la versión 2.0). &lt;br /&gt;
*Múltiples blogs o bitácoras (desde la versión 1.6). &lt;br /&gt;
*Capacidad de crear páginas estáticas (a partir de la versión 1.5). &lt;br /&gt;
*Permite ordenar artículos y páginas estáticas en categorías, subcategorías y etiquetas (&amp;quot;tags&amp;quot;). &lt;br /&gt;
*Cuatro estados para una entrada (&amp;quot;post&amp;quot;): Publicado, Borrador, Esperando Revisión (nuevo en Wordpress 2.3) y Privado (sólo usuarios registrados), además de uno adicional: Protegido con contraseña. &lt;br /&gt;
*Editor WYSIWYG &amp;quot;What You See Is What You Get&amp;quot; en inglés, &amp;quot;lo que ves es lo que obtienes&amp;quot; (desde la versión 2.0). &lt;br /&gt;
*Publicación mediante email. &lt;br /&gt;
*Importación desde Blogger, Blogware, Dotclear, Greymatter, Livejournal, Movable Type y Typepad, Textpattern y desde cualquier fuente RSS. Se está trabajando para poder importar desde pMachine y Nucleus además de la importación a través de scripts o directamente de base de datos. &lt;br /&gt;
*Guardado automático temporizado del artículo como Borrador (A partir de la versión 2.2). &lt;br /&gt;
*Permite comentarios y herramientas de comunicación entre blogs (Trackback, Pingback, etc). &lt;br /&gt;
*Permite &amp;quot;permalinks&amp;quot; (enlaces permanentes y fáciles de recordar) mediante mod_rewrite. &lt;br /&gt;
*Distribución de los artículos mediante RDF, RSS 0.92, RSS 2.0 y Atom 1.0. &lt;br /&gt;
*Distribución de las discusiones (mediante RSS 2.0 y ATOM 1.0). &lt;br /&gt;
*Gestión y distribución de enlaces. &lt;br /&gt;
*Subida y gestión de adjuntos y archivos multimedia. &lt;br /&gt;
*Admite &amp;quot;Plugins&amp;quot; (versión 1.6). &lt;br /&gt;
*Admite plantillas y &amp;quot;Widgets&amp;quot; para éstas. &lt;br /&gt;
*Búsqueda integrada. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Búsqueda en entradas y páginas estáticas y Widget de casa para búsqueda integrada de google desde la versión 2.5. &lt;br /&gt;
*Integración: &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; bbPress, sistema de foros de los mismos creadores, se integra automáticamente con Wordpress. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Integración con el foro Vanilla de Lussumo factible, al menos hasta la versión 2.2 no inclusive.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiblogging&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
WordPress soporta un blog por instalación, aunque se pueden utilizar múltiples copias en directorios distintos si se utilizan tablas de bases de datos separadas.&amp;lt;br&amp;gt;WordPress MU (también conocido como WPMU) es una derivación de WordPress creada para permitir la existencia de varios blogs en una sola instalación. WordPress MU hace posible para cualquier con un sitio web que desee alojar su propia comunidad de blogs, controlar y moderar todos los blogs desde un solo entorno de administración. WordPress MU añade ocho nuevas tablas de datos para cada blog respecto a WordPress. Es utilizado en el servicio de alojamiento de blogs gratuito WordPress.com, además de otras organizaciones como el diario Le Monde, la Universidad de Harvard y Edublogs.&amp;lt;br&amp;gt;Lyceum es otra versión empresarial de WordPress. A diferencia de WordPress MU, Lyceum almacena toda la información en un conjunto de tablas de base de datos. Algunas comunidades destacadas que usan Lyceum son TeachFor.Us(Teach for America teacher's blogs), BodyBlogs y Hopkins Blogs.&amp;lt;br&amp;gt;En 2008 Andy Peatling se unió a Automattic para continuar su trabajo en [[BuddyPress]], una extensión de WPMU que añadirá características de comunidad a WordPress.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Plantillas&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
Las plantillas (themes) de Wordpress son plantillas de diseño que sirven para establecer la apariencia y estructura de tu blog.&amp;lt;br&amp;gt;Hay una gran comunidad oficial, tanto profesional como de usuarios, dedicada al diseño de estas plantillas que se suelen listar en el sitio de Wordpress una vez han sido comprobadas y aprobadas oficialmente -ver lista de Enlaces externos-.&amp;lt;br&amp;gt;Aunque la filosofía de Wordpress apuesta por un marcado válido según las directrices del W3C, las posibilidades de este sistema, tanto a nivel de diseño, estructura o gestión, y la flexibilidad del sistema de plantilla y widgets en concreto, son enormes y prácticamente permiten tener desde un simple blog hasta un CMS personalizado.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Widgets  ===&lt;br /&gt;
&lt;br /&gt;
Wordpress incorpora un sistema de Widgets para sus plantillas desde la versión 2.2 que ofrece numerosas posibilidades y flexibilidad para el diseño y estructura de sus blogs. Si bien son sumamente útiles, no todos las plantillas lo soportan.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Plugins  ===&lt;br /&gt;
&lt;br /&gt;
Hay una ingente cantidad de plugins que potencian el uso de Wordpress más allá de una simple bitácora y que lo hacen un sistema flexible y prácticamente de propósito general. Los plugins de Wordpress se incorporaron en la versión 1.6.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Versiones&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
=== Iniciales&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
1.0 La primera versión final de Wordpress se lanzó oficialmente el 3 de enero de 2004, se llamó denominada &amp;quot;Miles&amp;quot; por el músico de jazz Miles Davis.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Rama 2.x  ===&lt;br /&gt;
&lt;br /&gt;
Desde el lanzamiento de Wordpress 2.1, se empezó a usar la versión 4.1 de MySQL mientras que Wordpress 2.0 usa MySQL 3. Con las nuevas versiones 2.x, el equipo de Wordpress analizó los servicios de &amp;quot;hosting&amp;quot; vigentes y concretaron que todavía muchos de estos servicios no soportaban MySQL 4. Así, se decidió seguir dando soporte de Wordpress 2.0 (actualizaciones de seguridad) hasta el 2010, donde se esperaban que todos los servicios de hosting empiecen a ofrecer MySQL 4 y 5.&amp;lt;br&amp;gt;Además, está la obsolescencia de PHP4 para 2008 lo que provoca que las nuevas versiones de Wordpress estén construidas con base en la versión 5, aunque manteniendo la compatibilidad inversa -y el soporte de la rama 2.0- en iguales circunstancias que con MySQL.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*2.0 (Duke), la versión de Wordpress, denominada &amp;quot;Duke&amp;quot; por el músico Duke Ellington y lanzada el 31 de diciembre de 2005, fue después de la versión 2.5 realmente el desarrollo más innovador y con más cambios, o al menos de más impacto, hasta esa fecha. Incluía el editor WYSIWIG &amp;quot;TinyMCE&amp;quot;, la subida de adjuntos e imágenes, gestión de roles o perfiles de usuarios, caché persistente de contenidos, soporte de diferentes versiones para la base de datos y backup de ésta, el plugin antispam Akismet -también de Automattic-, previsualización de entradas y algunas funciones AJAX entre otras. &lt;br /&gt;
*2.0.12: La rama 2.0.x adquiere Soporte oficial, esta versión incluye arreglos de seguridad, mejoras y estética para la rama 2.0. &lt;br /&gt;
*2.2 (Getz), versión de Wordpress llamada &amp;quot;Getz&amp;quot; en honor al saxofonista Stan Getz. Esta versión fue sacada a la luz el día 16 de mayo del 2007 e incluye 200 actualizaciones de &amp;quot;bugs&amp;quot;. Su funcionalidad más notable añadida es la integración de Widgets. &lt;br /&gt;
*2.3 (Dexter), la versión llamada &amp;quot;Dexter&amp;quot;, en honor al saxofonista Dexter Gordon lanzada oficialmente el 24 de septiembre de 2007. &lt;br /&gt;
*2.4, versión cancelada en enero de 2008 para pasar a la versión 2.5. Se canceló por diversos motivos pero principalmente por los fallos y retraso en el demasiado rápido desarrollo del nuevo &amp;quot;tablero&amp;quot; (dashboard) y que fue reescrito para la versión 2.5. &lt;br /&gt;
*2.5 (Brecker), llamada &amp;quot;Brecker&amp;quot; en honor al saxofonista Michael Brecker y que salió oficialmente el 29 de marzo de 2008. Ésta versión fue un nuevo punto de inflexión en el desarrollo de Wordpress con especial énfasis en la mejora del &amp;quot;tablero&amp;quot; (administración) de Wordpress. Se mejoró el aspecto visual y la usabilidad de la administración, en especial añadiendo funciones AJAX que, en general, mejoraban todo el tablero y en concreto: la gestión de adjuntos y archivos multimedia, de etiquetas, categorías y enlaces, guardado automático de borradores por tiempo, sistema automático de actualización de plugins, mejora del sistema de widgets para plantillas.También fue importante el añadido del API para &amp;quot;Shortcode&amp;quot; que permite ejecutar código en las entradas (&amp;quot;posts&amp;quot;) sin el uso directo de incrustación PHP, soporte para el servicio Gravatar en comentarios y generación automática de galerías de imágenes sobre los adjuntos. &lt;br /&gt;
*2.5.1, versión de mejora en seguridad y corrección de bugs lanzada el 25 de abril de 2008. &lt;br /&gt;
*2.6 (Tyner), llamada &amp;quot;Tyner&amp;quot; en honor al pianista de jazz McCoy Tyner y que es lanzada el 15 de julio de 2008. La versión Tyner, introduce -según el blog de desarrollo- nuevas mejoras que potencian el uso de Wordpress como CMS. Por ejemplo la gestión de revisiones y versiones de las entradas (diff) al estilo tradicional de las wikis, la posibilidad de sacar del árbol web directorios y archivos sensibles, soporte completo SSL, nuevas versiones de algunas de sus bibliotecas incluidas tales como jQuery y jQuery UI (1.5.1) o TinyMCE, mejora y añadido de plugins como &amp;quot;Wordpress Video&amp;quot;, pre visualización de plantillas en administración, campos extra para perfiles de usuario (hasta ahora mediante plugins) o la posibilidad de establecer varias sub-categorías, entre otras nuevas funciones y, según la noticia oficial, correcciones sobre 194 errores o bugs. &lt;br /&gt;
*2.6.2 Parche dirigido prácticamente en exclusiva a solucionar vulnerabilidades en el registro de usuarios, relacionadas con la generación aleatoria de contraseñas y el posible reseteo de las mismas para otros usuarios. Afecta por lo tanto sólo a sistemas con el registro de usuarios habilitado. &lt;br /&gt;
*2.6.3 Parche dirigido para solucionar una vulnerabilidad de bajo riesgo en la biblioteca Snoopy, la cual se utiliza para mostrar los feeds en el Tablero. &lt;br /&gt;
*2.7 (Coltrane) Llamada &amp;quot;Coltrane&amp;quot;, en honor al saxofonista John Coltrane, y que es lanzada el 10 de diciembre del 2008.Esta versión incorpora, sobre todo, una nueva y muy esperada interfaz gráfica (1.0) con, también nuevas, mejoras AJAX, corrección de algunos fallos en la actual y, en especial, el cambio, tanto de ubicación como en relación a la usabilidad, del menú general superior a la parte izquierda de la pantalla. El nuevo menú posibilita el acceso a cualquier sección sin importar la profundidad de las sub-secciones gracias a la implementación de AJAX para hacerlo extensible. Además, otro aspecto muy esperado, es la implementación del sistema de actualización automática para el sistema en general y que está basado, como en otras ocasiones ya se ha hecho, en el plugin independiente que ya había. Se acaba de implementar el sistema de cookies sobre HTTP en exclusiva, el añadido de adjuntos sin la necesidad de guardarlos como entradas, explorador de archivos para plugins, edición en línea (no desde el tablero), la documentación PHPDoc estará disponible y se incluyen funcionalidades para «arrastrar y soltar» elementos en el Tablero, entre otros. Como es habitual se corrige otro gran número de bugs en relación sobre todo a la interfaz y su funcionalidad respecto a navegadores, localizaciones, etc, así como sobre el código del sistema y validaciones varias. &lt;br /&gt;
*2.7.1 Arregla más de 60 errores menores, y que es lanzada el 10 de febrero del 2009. &lt;br /&gt;
*2.8 (Baker). Llamada &amp;quot;Baker&amp;quot; en honor al trompetista Chet Baker. La versión 2.8 incluye características enfocadas a usuarios avanzados, como el nuevo editor de código CodePress que, a diferencia del anterior editor, resalta el código dependiendo del lenguaje que se está usando. Otra nueva característica que se incluye es la instalación de plantillas vía web, similar a la instalación de plugins vía web insertada en la versión 2.7 &lt;br /&gt;
*2.8.6: Se liberó el 12 de noviembre de 2009. &lt;br /&gt;
*2.9 (Carmen): Llamada &amp;quot;Carmen&amp;quot; en honor a la cantante y pianista Carmen McRae. Permite hacer ediciones en imágenes (Rotar, voltear, recortar), incrustación de multimedia (sin necesidad de código embed), así como un sistema de papelera para almacenar los comentarios y artículos eliminados, entre otros.[22] &lt;br /&gt;
*2.9.1: Esta revisión soluciona los fallos encontrados en la versión 2.9. &lt;br /&gt;
*2.9.2: Esta revisión soluciona un fallo de seguridad que permite obtener los resultado de la papelera. Además soluciona otros fallos encontrados en la versión 2.9.1&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rama 3.x  ===&lt;br /&gt;
&lt;br /&gt;
*3.0: Fusiona Wordpress con &amp;quot;Wordpress Mu&amp;quot; para dar soporte multiblogging por defecto. Los menúes son editables y las actualizaciones de plugins pueden realizarse en masa. &lt;br /&gt;
*3.1&amp;amp;nbsp;: Esta versión, la número 14, fue lanzada el 22 de febrero de 2011 y se llama Django Reinhardt en honor al Jazzista. Las novedades principales de esta versión son: &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Enlaces internos – con un clic en el nuevo botón para enlaces internos podrás buscar una entrada o revisar el contenido existente para enlazarlo. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Barra de admin – contiene varios enlaces para acceder a diversas pantallas de administración. Por defecto, la barra de admin se muestra cuando un usuario ha accedido y está visitando el sitio, y no se muestra en las pantallas de administración en las instalaciones simples (sin multisitio activado). Para las instalaciones con multisitio se muestra tanto cuando estás visitando el sitio como en las pantallas de administración &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Mejoras en la interfaz de escritura – Los nuevos usuarios de WordPress encontrarán la pantalla de escritura mucho más limpia que antes, con la mayoría de las opciones ocultas por defecto. (puedes hacer clic en Opciones de pantalla de la parte superior para volverlas a mostrar) &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Formatos de entrada – La información de los formatos pueden usarla los temas para personalizar la presentación de una entrada. Tienes más información en Formatos de entrada (en inglés todavía). &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Administrador de la red – Se han movido los menús del Super administrador y las páginas relacionadas de la pantalla de admin habitual a la nueva Pantalla de administrador de la red. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Pantallas de administración en modo de lista – puedes ordenar las columnas de las pantallas con listados (páginas, entradas, comentarios, etc) para mejorar la paginación. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Mejoras del exportador/importador – Hay muchos cambios en la información del autor, mejora en el manejo de taxonomías y términos, soporte correcto de menús de navegación, etc. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Mejoras en el tipo de contenido personalizado – Permite a los desarrolladores crear páginas de archivo y disponer de más controles de las capacidades y mejores menús. Aprende más en Tipos de entrada (en inglés todavía). &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Consultas avanzadas – Permite a los desarrolladores realizar consultas múltiples de taxonomías y campos personalizados. &lt;br /&gt;
*&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Un esquema de color azul para la administración más fresco que centra la atención en tu contenido.&lt;br /&gt;
&lt;br /&gt;
=== WordPress para iPhone  ===&lt;br /&gt;
&lt;br /&gt;
El 11 de julio de 2008, con el lanzamiento de [[iTunes App Store]] por Apple Inc., WordPress también lanzó su primera aplicación nativa para [[iPhone]] y [[iPod Touch]]. La aplicación WordPress tiene todas las características que tiene el panel de administración de WordPress. Esta aplicación funciona para todos los blogs en WordPress.com y alojamientos propios en WordPress 2.5.1 o superior.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Instalación  ==&lt;br /&gt;
&lt;br /&gt;
Windows: Actualmente existe la posibilidad de poder instalar Wordpress en nuestro ordenador de una forma sencilla y rápida con [[Microsoft Web Platform Installer]].&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Premios  ==&lt;br /&gt;
&lt;br /&gt;
En diciembre de 2009 ganó el premio al mejor CMS de Software Libre en el certamen de los Open Source CMS Awards compitiendo con otras 12.000 candidaturas, en este concurso ganó el segundo lugar como mejor CMS basado en PHP.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Temas visuales auspiciados  ==&lt;br /&gt;
&lt;br /&gt;
El 20 de julio de 2007, siguiendo a una discusión en el foro de ideas de WordPress y una publicación de Mark Ghosh en su blog Weblogs Tools Collection, Matt Mullenweng anunció que el directorio de temas oficial de WordPress en [[http://themes.wordpress.net]] no alojaría temas visuales conteniendo enlaces patrocinados. Aunque este movimiento fue criticado por los diseñadores y usuarios de temas patrocinados, fue aplaudido por algunos usuarios de WordPress que consideraban a dichos temas como spam. El directorio de temas de WordPress dejó de aceptar cualquier nuevo tema, incluyendo aquellos sin enlaces patrocinados, tiempo después de que el anuncio fue realizado. Irónicamente, el cierre del sitio oficial y su consecuente falta de temas actualizados generó que varias personas descargaran temas de sitios no oficiales que insertaban sus propios enlaces de spam en todos los temas descargados desde dichos sitios.&amp;lt;br&amp;gt;El 18 de julio de 2008, un nuevo directorio de temas fue abierto en [[http://wordpress.org/extend/themes/]]. Fue diseñado con los mismos lineamientos que el directorio de plugins (extensiones). Cualquier tema que sea colgado puede ser vetado en principio por un programa automatizado y luego por un humano. &lt;br /&gt;
&lt;br /&gt;
== Vulnerabilidades  ==&lt;br /&gt;
&lt;br /&gt;
BlogSecurity actualmente mantiene una lista de vulnerabilidades descubiertas en WordPress.&amp;lt;br&amp;gt;En enero de 2007, muchos sitios reconocidos de blogs relacionados a optimización de búsquedas ([[Search engine optimization]], SEO), así como muchos blogs comerciales de menor importacia y que utilizaban [[AdSense]] fueron objetivo de ataques con un [[exploit]] (pieza de código que explota una vulnerabilidad).&amp;lt;br&amp;gt;Una vulnerabilidad en uno de los servidores web del proyecto WordPress permitió a un atacante introducir código con vulnerabilidades en forma de una puerta trasera (back door) para algunas descargas de WordPress 2.1.1. El lanzamiento de la versión 2.1.2 superó este incidente; una advertencia enviada a tiempo aconsejó a todos los usuarios actualizar inmediatamente.&amp;lt;br&amp;gt;En mayo de 2007, un estudio reveló que el 98% de los blogs basados en WordPress eran vulnerables a ataques.&amp;lt;br&amp;gt;En una entrevista en junio de 2007, Stefen Esser, el fundandor del PHP Security Response Team, criticó el registro de seguridad de WordPress, citando problemas con la arquitectura de la aplicación que hacían innecesariamente difícil escribir código que sea seguro frente a vulnerabilidades de [inyección SQL], así como otros problemas. &lt;br /&gt;
&lt;br /&gt;
== Críticas  ==&lt;br /&gt;
&lt;br /&gt;
Las críticas de WordPress se han centrado varias veces alrededor de su seguridad; muchos problemas de seguridad no han sido resueltos en el software, particularmente entre 2007 y 2008. De acuerdo a Secunia, WordPress a noviembre de 2008 tiene 7 advertencias de seguridad no solucionadas (de un total de 31), con una calificación máxima de &amp;quot;Menos Crítica&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
*[http://es.wordpress.org/ Sitio Oficial en Español]&lt;br /&gt;
*[http://es.wikipedia.org/wiki/WordPress/ Wikipedia]&lt;br /&gt;
&lt;br /&gt;
== Referencias  ==&lt;br /&gt;
&lt;br /&gt;
[http://www.google.es/search?q=Wordpress+como+CMS Google: Wordpress como CMS] &lt;br /&gt;
&lt;br /&gt;
== Enlaces Externos  ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.wordpress.org/ Página Web Oficial]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div id=&amp;quot;divCleekiAttrib&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div style=&amp;quot;display: none;&amp;quot; id=&amp;quot;divCleekiAttrib&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
[[Category:Software_Libre]]&lt;br /&gt;
&amp;lt;div id=&amp;quot;divCleekiAttrib&amp;quot; style=&amp;quot;display: none;&amp;quot; expanded=&amp;quot;0&amp;quot; activeid=&amp;quot;-1&amp;quot; menuleft=&amp;quot;0&amp;quot; menutop=&amp;quot;0&amp;quot; menuright=&amp;quot;0&amp;quot; menubottom=&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Archivo:Inyeccion_SQL.png&amp;diff=1008006</id>
		<title>Archivo:Inyeccion SQL.png</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Archivo:Inyeccion_SQL.png&amp;diff=1008006"/>
		<updated>2011-10-07T16:39:03Z</updated>

		<summary type="html">&lt;p&gt;Yosbanyequipoprovincialgrm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sumario ==&lt;br /&gt;
&lt;br /&gt;
== Estado de copyright: ==&lt;br /&gt;
&lt;br /&gt;
== Fuente: ==&lt;/div&gt;</summary>
		<author><name>Yosbanyequipoprovincialgrm</name></author>
		
	</entry>
</feed>