Encryptar / Desencryptar QueryString ASP NET

HTML Markup
Page 1
The following HTML Markup consists of a TextBox, a DropDownList and a Button. The value from the TextBox and the DropDownLists will be encrypted and send using QueryString Parameters to the next page on Button click.
<table border=»0″ cellpadding=»0″ cellspacing=»0″>
    <tr>
        <td>
            Name:
        </td>
        <td>
            <asp:TextBox ID=»txtName» runat=»server» Text=»Mudassar Khan» />
        </td>
    </tr>
    <tr>
        <td>
            Technology:
        </td>
        <td>
            <asp:DropDownList ID = «ddlTechnology» runat=»server»>
                <asp:ListItem Text=»ASP.Net» Value = «ASP.Net» />
                <asp:ListItem Text=»PHP» Value = «PHP» />
                <asp:ListItem Text=»JSP» Value = «JSP» />
            </asp:DropDownList>
        </td>
    </tr>
</table>
<hr />
<asp:Button ID=»Button1″ Text=»Submit» runat=»server» OnClick = «Submit» />
 
Page 2
The following HTML Markup consists of two Label controls which will be used to display the QueryString Parameter values received on the page.
<table border=»0″ cellpadding=»0″ cellspacing=»0″>
    <tr>
        <td>
            Name:
        </td>
        <td>
            <asp:Label ID=»lblName» runat=»server» Text=»» />
        </td>
    </tr>
    <tr>
        <td>
            Technology:
        </td>
        <td>
            <asp:Label ID=»lblTechnology» runat=»server» Text=»» />
        </td>
    </tr>
</table>
 
 
Namespaces
You will need to import the following namespaces.
C#
using System.IO;
using System.Text;
using System.Security.Cryptography;
VB.Net
Imports System.IO
Imports System.Text
Imports System.Security.Cryptography
 
 
AES Algorithm Encryption and Decryption functions
Below are the functions for Encryption and Decryption which will be used for the Encrypting or Decrypting QueryString Parameter Values.
Note: The following functions have been explained in the article AES Encryption Decryption (Cryptography) Tutorial with example in ASP.Net using C# and VB.Net
 
 
Encrypting the QueryString Parameter Values
When the Button is clicked the following event handler is executed. Here the values of the TextBox and the DropDownList are first encrypted using the AES Symmetric Key Algorithm and then encoded using the UrlEncode method of the HttpUtility class. Finally these values are sent as QueryString Parameters to the next page.
Note: Here Encoding is required as the Encrypted string contains special characters and it is necessary to encode special characters before sending them as QueryString parameter.
C#
protected void Submit(object sender, EventArgs e)
{
    string name = HttpUtility.UrlEncode(Encrypt(txtName.Text.Trim()));
    string technology = HttpUtility.UrlEncode(Encrypt(ddlTechnology.SelectedItem.Value));
    Response.Redirect(string.Format(«~/CS2.aspx?name={0}&technology={1}», name, technology));
}
private string Encrypt(string clearText)
{
    string EncryptionKey = «MAKV2SPBNI99212»;
    byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
    using (Aes encryptor = Aes.Create())
    {
        Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
        encryptor.Key = pdb.GetBytes(32);
        encryptor.IV = pdb.GetBytes(16);
        using (MemoryStream ms = new MemoryStream())
        {
            using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
            {
                cs.Write(clearBytes, 0, clearBytes.Length);
                cs.Close();
            }
            clearText = Convert.ToBase64String(ms.ToArray());
        }
    }
    return clearText;
}
 
VB.Net
Protected Sub Submit(sender As Object, e As EventArgs)
    Dim name As String = HttpUtility.UrlEncode(Encrypt(txtName.Text.Trim()))
    Dim technology As String = HttpUtility.UrlEncode(Encrypt(ddlTechnology.SelectedItem.Value))
    Response.Redirect(String.Format(«~/VB2.aspx?name={0}&technology={1}», name, technology))
End Sub
Private Function Encrypt(clearText As String) As String
    Dim EncryptionKey As String = «MAKV2SPBNI99212»
    Dim clearBytes As Byte() = Encoding.Unicode.GetBytes(clearText)
    Using encryptor As Aes = Aes.Create()
        Dim pdb As New Rfc2898DeriveBytes(EncryptionKey, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _
         &H65, &H64, &H76, &H65, &H64, &H65, _
         &H76})
        encryptor.Key = pdb.GetBytes(32)
        encryptor.IV = pdb.GetBytes(16)
        Using ms As New MemoryStream()
            Using cs As New CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write)
                cs.Write(clearBytes, 0, clearBytes.Length)
                cs.Close()
            End Using
            clearText = Convert.ToBase64String(ms.ToArray())
        End Using
    End Using
    Return clearText
End Function
 
 
Decrypting the QueryString Parameter Values
In the Page Load event of the page, the values of the TextBox and DropDownList sent from the previous page are first fetched from the QueryString Parameters and then are decoded using the UrlDecode method of the HttpUtility class.
After decoding the string is decrypted using the AES Symmetric Key Algorithm and then the decrypted values are displayed using Label controls.
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        lblName.Text = Decrypt(HttpUtility.UrlDecode(Request.QueryString[«name»]));
        lblTechnology.Text = Decrypt(HttpUtility.UrlDecode(Request.QueryString[«technology»]));
    }
}
private string Decrypt(string cipherText)
{
    string EncryptionKey = «MAKV2SPBNI99212»;
    cipherText = cipherText.Replace(» «, «+»);
    byte[] cipherBytes = Convert.FromBase64String(cipherText);
    using (Aes encryptor = Aes.Create())
    {
        Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
        encryptor.Key = pdb.GetBytes(32);
        encryptor.IV = pdb.GetBytes(16);
        using (MemoryStream ms = new MemoryStream())
        {
            using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
            {
                cs.Write(cipherBytes, 0, cipherBytes.Length);
                cs.Close();
            }
            cipherText = Encoding.Unicode.GetString(ms.ToArray());
        }
    }
    return cipherText;
}
 
VB.Net
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        lblName.Text = Decrypt(HttpUtility.UrlDecode(Request.QueryString(«name»)))
        lblTechnology.Text = Decrypt(HttpUtility.UrlDecode(Request.QueryString(«technology»)))
    End If
End Sub
Private Function Decrypt(cipherText As String) As String
    Dim EncryptionKey As String = «MAKV2SPBNI99212»
    cipherText = cipherText.Replace(» «, «+»)
    Dim cipherBytes As Byte() = Convert.FromBase64String(cipherText)
    Using encryptor As Aes = Aes.Create()
        Dim pdb As New Rfc2898DeriveBytes(EncryptionKey, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _
         &H65, &H64, &H76, &H65, &H64, &H65, _
         &H76})
        encryptor.Key = pdb.GetBytes(32)
        encryptor.IV = pdb.GetBytes(16)
        Using ms As New MemoryStream()
            Using cs As New CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write)
                cs.Write(cipherBytes, 0, cipherBytes.Length)
                cs.Close()
            End Using
            cipherText = Encoding.Unicode.GetString(ms.ToArray())
        End Using
    End Using
    Return cipherText
End Function
 

Encrypt and Decrypt QueryString Parameter Values in ASP.Net using C# and VB.Net

Encrypt and Decrypt QueryString Parameter Values in ASP.Net using C# and VB.Net

Configurar Database Mail en SQL Server 2008 R2

 

Continuando con la serie de artículos sobre Database Mail en SQL Server 2008 R2, en esta ocasión vamos a tratar la configuración de Database Mail, utilizando para ello una instalación en Cluster de SQL Server 2008 R2 sobre un Failover Cluster Windows Server 2008 R2. Empezamos.

Configurar Database Mail en SQL Server 2008 R2

Es posible configurar Database Mail por comandos o con la interfaz gráfica (SSMS). En nuestro caso de ejemplo, vamos a realizar desde cero la configuración de Database Mail en un Cluster de SQL Server 2008 R2 utilizando SQL Server Management Studio (SSMS). Para empezar, utilizaremos la opción Configure Database Mail desde el menú contextual de Database Mail, como se muestra en la siguiente pantalla capturada.

Es posible configurar Database Mail por comandos o con la interfaz gráfica (SSMS). En nuestro caso de ejemplo, vamos a realizar desde cero la configuración de Database Mail en un Cluster de SQL Server 2008 R2 utilizando SQL Server Management Studio (SSMS). Para empezar, utilizaremos la opción Configure Database Mail desde el menú contextual de Database Mail, como se muestra en la siguiente pantalla capturada

En la pantalla de bienvenida del asistente de configuración de Database Mail, click en Next para continuar.

En la pantalla de bienvenida del asistente de configuración de Database Mail, click en Next para continuar.

En la pantalla Select Configuration Task, seleccionaremos la opción Set up Database Mail by performing the following tasks. Click Next para continuar.

En la pantalla Select Configuration Task, seleccionaremos la opción Set up Database Mail by performing the following tasks. Click Next para continuar.

Si aún no estaba habilitado el Database Mail en nuestra instancia de SQL Server (como es nuestro caso), se mostrará un diálogo como el siguiente, preguntando si deseamos habilitar Database Mail. Click Yes para continuar.

Si aún no estaba habilitado el Database Mail en nuestra instancia de SQL Server (como es nuestro caso), se mostrará un diálogo como el siguiente, preguntando si deseamos habilitar Database Mail. Click Yes para continuar.

En la pantalla New Profile, crearemos un nuevo perfil de Database Mail especificando un nombre y descripción. Seguidamente, click Add para añadir una cuenta de correo al perfil que estamos creando. Téngase en cuenta, que podemos crear múltiples cuentas de correo, y ordenarlas según deseemos que sean utilizadas. De este modo, si se produce un error al enviar un correo electrónico utilizando una cuenta, se podrá intentar automáticamente utilizando la siguiente cuenta de la lista.

En la pantalla New Profile, crearemos un nuevo perfil de Database Mail especificando un nombre y descripción. Seguidamente, click Add para añadir una cuenta de correo al perfil que estamos creando. Téngase en cuenta, que podemos crear múltiples cuentas de correo, y ordenarlas según deseemos que sean utilizadas. De este modo, si se produce un error al enviar un correo electrónico utilizando una cuenta, se podrá intentar automáticamente utilizando la siguiente cuenta de la lista.

En la pantalla New Database Mail Account configuraremos una cuenta de correo electrónico para ser utilizada por Database Mail. En resumidas cuentas, se trata de indicar la cuenta de correo electrónico, el servidor SMTP, y la configuración de autenticación del servidor SMTP. Click OK para continuar.

En la pantalla New Database Mail Account configuraremos una cuenta de correo electrónico para ser utilizada por Database Mail. En resumidas cuentas, se trata de indicar la cuenta de correo electrónico, el servidor SMTP, y la configuración de autenticación del servidor SMTP. Click OK para continuar.

De nuevo en la pantalla New Profile, tenemos la oportunidad de añadir más cuentas de correo electrónico (si lo deseamos) al perfil que estamos configurando. En caso contrario, click Next para continuar.

De nuevo en la pantalla New Profile, tenemos la oportunidad de añadir más cuentas de correo electrónico (si lo deseamos) al perfil que estamos configurando. En caso contrario, click Next para continuar.

Llegamos a la pantalla Manage Profile Security. Cada perfil de Database Mail, puede ser configurado como público (puede ser utilizado por cualquier usuario) o como privado (sólo puede ser utilizado por el usuario designado). En ambos casos, el perfil puede configurarse como perfil por defecto, de tal modo que sea el perfil utilizado excepto que se indique lo contrario. En nuestro caso de ejemplo, marcamos el perfil que estamos creado, como público y como predeterminado, en la pestaña Public Profiles.

Llegamos a la pantalla Manage Profile Security. Cada perfil de Database Mail, puede ser configurado como público (puede ser utilizado por cualquier usuario) o como privado (sólo puede ser utilizado por el usuario designado). En ambos casos, el perfil puede configurarse como perfil por defecto, de tal modo que sea el perfil utilizado excepto que se indique lo contrario. En nuestro caso de ejemplo, marcamos el perfil que estamos creado, como público y como predeterminado, en la pestaña Public Profiles.

Aprovechamos para mostrar la pestaña Private Profiles, aunque en nuestro caso, no realizaremos ninguna configuración aquí. Click Next para continuar.

Aprovechamos para mostrar la pestaña Private Profiles, aunque en nuestro caso, no realizaremos ninguna configuración aquí. Click Next para continuar.

En la pantalla Configure System Parameters podemos configurar varias opciones de configuración globales de Database Mail que pueden resultarnos de gran utilidad (Account Retry Attempts, Account Retry Delay, Maximum File Size, Prohibited Attachment File Extensions, Database Mail Executable Minimum Lifetime, Logging Level). Click Next para continuar.

En la pantalla Configure System Parameters podemos configurar varias opciones de configuración globales de Database Mail que pueden resultarnos de gran utilidad (Account Retry Attempts, Account Retry Delay, Maximum File Size, Prohibited Attachment File Extensions, Database Mail Executable Minimum Lifetime, Logging Level). Click Next para continuar.

En la pantalla Complete the Wizard, revisamos el resumen de la configuración que vamos a realizar, y si estamos de acuerdo click en Finish para continuar.

En la pantalla Complete the Wizard, revisamos el resumen de la configuración que vamos a realizar, y si estamos de acuerdo click en Finish para continuar.

En unos instantes la configuración de Database Mail habrá finalizado satisfactoriamente en nuestro Cluster de SQL Server 2008 R2. Click Close.

En unos instantes la configuración de Database Mail habrá finalizado satisfactoriamente en nuestro Cluster de SQL Server 2008 R2. Click Close.

Realizado esto, ya tendremos inicialmente configurado Database Mail. Sin embargo, lo más probable, es que necesitemos realizar alguna configuración adicional, como por ejemplo, crear perfiles de Database Mail adicionales.

Modificar la configuración de Database Mail en SQL Server 2008 R2

Una vez que hemos finalizado la configuración inicial de Database Mail, muy probablemente tendremos que realizar alguna configuración posterior, ya sea para configurar más perfiles de Database Mail, o bien más adelante para modificar los perfiles existente, cambiar las configuraciones globales de Database Mail, etc. A continuación, vamos a mostrar la forma de modificar la configuración de Database Mail en SQL Server 2008 R2 utilizando SQL Server Management Studio (también se podría realizar con TSQL). Para ello, utilizaremos la opciónConfigure Database Mail desde el menú contextual de Database Mail, como se muestra en la siguiente pantalla capturada.

Una vez que hemos finalizado la configuración inicial de Database Mail, muy probablemente tendremos que realizar alguna configuración posterior, ya sea para configurar más perfiles de Database Mail, o bien más adelante para modificar los perfiles existente, cambiar las configuraciones globales de Database Mail, etc. A continuación, vamos a mostrar la forma de modificar la configuración de Database Mail en SQL Server 2008 R2 utilizando SQL Server Management Studio (también se podría realizar con TSQL). Para ello, utilizaremos la opción Configure Database Mail desde el menú contextual de Database Mail, como se muestra en la siguiente pantalla capturada.

En la pantalla de bienvenida del asistente de configuración de Database Mail, click Next para continuar.

En la pantalla de bienvenida del asistente de configuración de Database Mail, click Next para continuar.

En la pantalla Select Configuration Task, seleccionaremos la opción que necesitemos en función de la configuración que tengamos que realizar. Click Next para continuar.

En la pantalla Select Configuration Task, seleccionaremos la opción que necesitemos en función de la configuración que tengamos que realizar. Click Next para continuar.

En función de la opción que hayamos seleccionado en la pantalla anterior, se mostrará una u otra pantalla. En todos los casos, se trata de pantallas similares a las que ya vimos en la configuración inicial del Database Mail, por lo que no perderemos tiempo en repetirlo (es más de lo mismo).

Hasta aquí llega el presente artículo, sobre cómo configurar Database Mail sobre SQL Server 2008 R2 (en particular, sobre un Cluster de SQL Server 2008 R2). Próximamente, aprovecharemos para hablar sobre cómo utilizar Database Mail en SQL Server 2008 R2.

Poco más por hoy. Como siempre, confío que la lectura resulte de interés.

 

ememail

[Fecha del Artículo (UTC): 04/12/2011]
[Autor: GuilleSQL]

Cómo configurar el servidor de Reporting Services en SQL Server 2008

Como primer paso vamos a abrir el Reporting Services Configuration Manager, ahí nos va a solicitar la información del servidor que queremos configurar. En este caso para efectos de este ejemplo nos conectamos a localhost, pero ahí le debes indicar el nombre de la terminal o ip y la instancia SQL en donde está instalado el servicio.

reporting01-400x232

En el menú seleccionamos Database y ahí Change Database. Nos va a mostrar una pantalla donde le indicamos si se va a crear una nueva base de datos para reporting o se quiere conectar a una ya existente, en este caso vamos a crear una nueva para configurarla desde el inicio.

reporting02-400x253

En la siguiente pantalla nos va a solicitar los credenciales para conectarnos a ese servidor, remoto o local. Este usuario es solamente para conectarse y configurar, no es con el que el servicio de reporting va a funcionar. En este caso como es en localhost y yo soy administrador, continuamos con seguridad integrada, pero ahí le indicas un usuario que tenga permisos para crear o modificar bases de datos.

reporting03-400x208

En la siguiente pantalla le indicamos el nombre de la base de datos que vamos a crear para el manejo del Report Server.

reporting04-400x172

En la siguiente pantalla se le indica las credenciales de la cuenta con la que el servicio se va a conectar a la base de datos ReportServer. Dependiendo de la configuración del servidor lo podemos dejar con el usuario del servicio o con otro usuario de base de datos previamente creado.

reporting05-400x201

Finalmente en el último pase se verifican los datos ingresados y se procede con la configuración final (Next / Finish).

reporting06-400x295

reporting07-400x293

reporting08-400x301

Luego de que se configura la base de datos vamos a la opción del menú que dice Web Service URL y le indicamos el IP y puerto donde se va a utilizar el servicio. Es probable que el puerto 80 no esté disponible por algun servicio del IIS, por lo que es recomendable utilizar algun otro disponible (ej. 82).  Seleccionamos el botón de Aplicar o Apply que está abajo a la derecha.

reporting09-400x248

Luego seleccionamos en el menú la opción de Report Manager URL y le indicamos el nombre del directorio virtual donde van a estar nuestros reportes y seleccionamos Apply.

reporting10-400x247

Finalmente en el menú seleccionamos Service Account y verificamos que los datos del servicio sean correctos.

reporting11-400x232

Luego en el Root del menú verificamos que el servicio esté ejecutándose.

reporting12-400x212

En el menú de Web Service URL y Report Manager URL están los urls donde podemos ver nuestro servidor ejecutándose. En mi caso http://localhost/Reports es la ruta y ahí podemos configurar la seguridad de los reportes, para la primera vez debes ejecutar Internet Explorer como usuario Administrador “Run as Administrator”, para que te de permisos de entrar a la configuración y agregarte como usuario valido de los reportes y darte los permisos respectivos.

Cerrar conexiones SQL – Base de datos en uso

He encontrado varios metodos para aplicar, estos son:

1.- PROBADO

USE master GO ALTER DATABASE database_name SET OFFLINE WITH ROLLBACK IMMEDIATE GO

2.- SIN PROBAR

DECLARE @kill varchar(8000) = »; SELECT @kill = @kill + ‘kill ‘ + CONVERT(varchar(5), spid) + ‘;’ FROM master..sysprocesses WHERE dbid = db_id(‘MyDB’) EXEC(@kill);

3.- SIN PROBAR

CREATE PROCEDURE dbo.KillConexiones
@dbName SYSNAME
AS
BEGIN
SET NOCOUNT ON

DECLARE @spid INT,
@cnt INT,
@sql VARCHAR(255)

SELECT @spid = MIN(spid), @cnt = COUNT(*)
FROM master..sysprocesses
WHERE dbid = DB_ID(@dbname)
AND spid != @@SPID

PRINT ‘Eliminando ‘+RTRIM(@cnt)+’ procesos.’

WHILE @spid IS NOT NULL
BEGIN
PRINT ‘Eliminando Proceso ‘+RTRIM(@spid)
SET @sql = ‘KILL ‘+RTRIM(@spid)
EXEC(@sql)
SELECT @spid = MIN(spid), @cnt = COUNT(*)
FROM master..sysprocesses
WHERE dbid = DB_ID(@dbname)
AND spid != @@SPID
PRINT RTRIM(@cnt)+’ Procesos por eliminar.’
END
END
GO

4.- SIN PROBAR –  PARECIDO AL 3 PERO SIN SER SP

USE MASTER
GO
DECLARE @spid SMALLINT
DECLARE @KILL VARCHAR(16)

DECLARE @dbname sysname
SET @dbname = 'Suscripciones'
dbid = db_id(@dbname) 
DECLARE kill_cursor CURSOR FOR
select spid
from master..sysprocesses
where status = 'sleeping'
AND dbid=57
OPEN kill_cursor
FETCH NEXT FROM kill_cursor INTO @spid
WHILE @@FETCH_STATUS = 0
      BEGIN
      SET @KILL= 'kill '+cast(@spid as varchar(5))
      print (@KILL)
FETCH NEXT FROM kill_cursor INTO @spid
END

5.- PROBADO OK


USE master
GO
SET NOCOUNT ON
DECLARE @DBName varchar(50)
DECLARE @spidstr varchar(8000)
DECLARE @ConnKilled smallint
SET @ConnKilled=0
SET @spidstr = ''
Set @DBName = 'NOMBRE_BASE_DE_DATOS'
IF db_id(@DBName) < 4 BEGIN PRINT 'Connections to system databases cannot be killed' RETURN END SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; ' FROM master..sysprocesses WHERE dbid=db_id(@DBName) IF LEN(@spidstr) > 0
BEGIN
EXEC(@spidstr)
SELECT @ConnKilled = COUNT(1)
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
END