31
dotnetConf SQL PASS LIMA 2016

Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

Embed Size (px)

Citation preview

Page 1: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

dotnetConfSQL PASS LIMA 2016

Page 2: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

Mejores Prácticas de conectividad, Seguridad y uso de CLR en SQL Server

Juan RafaelMVP | MCT MS Dynamics@jlc_rve

Page 3: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

AgendaMejores Prácticas de Conectividad y SeguridadAzure SQL Database: ¿Qué puede hacer por mi?Azure SQL Database y .NET: ¿cómo va esa conectividad?Rendimiento: Yo soy programador y no DBA.Seguridad: ¿En qué no tengo que preocuparme?

Uso de CLR en SQL Server y Azure SQL DB..NET dentro de SQL?

Page 4: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

Azure SQL Database - Introducción¿Qué puede hacer por mí?

Page 5: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

Azure SQL Database - IntroducciónModelos de Cloud

On Premises

StorageServers

Networking

O/SMiddleware

Virtualization

DataApplications

Runtime

You

man

age

Infrastructure(as a Service)

StorageServers

Networking

O/SMiddleware

Virtualization

DataApplications

Runtime

Managed by M

icrosoft

You

man

age

Platform(as a Service)

Managed by M

icrosoft

You

man

age

StorageServers

Networking

O/SMiddleware

Virtualization

Applications

RuntimeData

Software(as a Service)

Managed by M

icrosoft

StorageServers

Networking

O/SMiddleware

Virtualization

Applications

RuntimeData

Page 6: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

Azure SQL Database - Introducción¿Qué puede hacer por mí?

Sencillez Escalabilidad Seguridad Continuidad de Negocio

Siempre Actualizado

Fácil de crear.Dashboard con DB métricas.No es necesario cambiar el aplicativo.Múltiples herramientas de migración.Familiarización.

Rendimiento predictivo.

Múltiples Modelos de Bases de datos según uso.

Parallel Data-Warehouse

Azure AAD o SQL LoginMúltiples mecanismos de Seguridad.ComplianceAuditoría

Disaster RecoveryGeo-ReplicaciónGeo-Restauración Restauración Point-in-Time.Replicas de datos.Backups 5 min

Últimas opciones disponibles a nivel de empresa.

Múltiples herramientas de monitorización.

Page 7: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

Azure SQL DB y .NET: ¿cómo va esa conectividad?

Page 8: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

Mejores prácticas de ConectividadNetwork LatencyPolítica de reintentosPooling de conexiones y TCP exhausted

Page 9: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

Mejores prácticas de ConectividadNetwork Latency: Usuario y AplicaciónAplicación y Azure DB SQL

Rendimiento percibido: Tiempo de respuesta = 2x(Latencia_1 + Latencia_2) + Query_Exec_Time

Optimización:Minimizar latencia 1: seleccionar un data center cerca de la mayoría de los usuarios. Minimizar latencia 2: seleccionar el Azure SQL DB en el mismo data center del

aplicativo. Minimizar los “network round trips”

SQLAzur

e

Latency_1

Latency_2

Page 10: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

Mejores prácticas de ConectividadPolítica de reintentos

Tanto de connectividad como de ejecución de comandos.Conexiones en estado Idle después de 30 minutos. Denial of Service attacks.FailoverLímite de recursos.

Optimización:Política de reintentos, incremental, a intervalos fijos y exponencial.Deteción de errores y política de reintentos customizados.

Page 11: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

Mejores prácticas de ConectividadConnection Pooling

Cachea las conexiones físicas que tengan una misma cadena en un proceso. Reduce el coste de abrir y cerrar las conexiones. Si una conexión se ha establecido, pero puede fallar la ejecución del comando?Si permanece mucho tiempo en el pool, puede generar incidencias.

Optimización:Workaround: después de tres intentos, limpia el pool SqlConnection.ClearPool(cnn)

Page 12: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

Click icon to add picture

Rendimiento: Yo soy programador y no DBA

Page 14: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

DemoHaga clic en el icono para agregar una imagen

Page 15: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

Click icon to add picture

Seguridad:¿en qué no tengo que preocuparme?

Page 16: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

Nuevas Opciones de Seguridad

Threat Detectio

n

Row Level

Security

Dynamic Data

Masking

Page 17: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

Click icon to add picture

.NET dentro de SQL?

Page 18: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

CLR en SQLSQL Server 2005 CLR 2SQL Server 2008 CLR 2SQL Server 2008 R2 CLR 2SQL Server 2012 CLR 4SQL Server 2014 CLR 4 SQL Server 2016 CLR 4

Page 19: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

CLR en SQL¿Qué podemos hacer?Procedimientos almacenadosTriggersFuncionesAgregadosTipos definidos por el usuario (UDT)

Assemblies necesariosSystem System.Data.SqlTypesSystem.Data.SqlClientMicrosoft.SqlServer.Server

Page 20: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

CLR en SQLSeguridadSAFE

Solo se permite acceso a la instancia de SQL donde ejecuta el assembly.

EXTERNAL_ACCESSPermite acceso externo, IO, DNS, EventLog, Socket…

UNSAFESin restricciones, permitido P/Invoke y código unsafe.

Cuando se accede a un recurso externo se usan las credenciales de SQL Server.

Page 21: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

CLR en SQLSeguridadApplication DomainsUn AppDomain por Assembly Owner y por base de datos

DB1 DB2

AssemblyA1AssemblyA2

AssemblyB1AssemblyB2

AssemblyA3AssemblyA4

AssemblyB3AssemblyB4

Page 22: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

Mapeo tipos SQL CLRSQL System.Data.SQLTypes CLRInt SqlInt32 Int32,Nullable<Int32>nchar,nvarchar SqlChars,SqlString String, Char[]float SqlDoubleDouble,Nullable<Double>decimal SqlDecimalDecimal,Nullable<Decimal>datetime2 -DateTime,Nullable<DateTime>varbinary SqlBytes,SqlBinary Byte[]

https://msdn.microsoft.com/en-us/library/ms131092.aspx

Page 23: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

CLR en SQLProcedimientos almacenadosMétodo estático en una clase con el atributo:

[Microsoft.SqlServer.Server.SqlProcedure]Tiene que devolver void o int.Podemos devolver una tabla usando SqlContext.Pipe:

SendSendResultsStartSendResultsRowSendResultsEnd

Page 24: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

CLR en SQLTriggersPodemos acceder a los datos modificados mediante las tablas temporales INSERTED y DELETED.

SELECT * FROM INSERTEDSELECT * FROM DELETED

Determinar qué columnas han sido modificadas en un UPDATE.Acceder a informacion de los objetos modificados gracias a la clase SqlTriggerContext.

Page 25: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

CLR en SQLFuncionesMétodo estático en una clase con el atributo:

[Microsoft.SqlServer.Server.SqlFunction]bool isPrecise si la función es o no es precisa, p.e. floatbool isDeterministic si la función es o no determinista

Escalar o tabular.

Page 26: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

CLR en SQLAgregadosClase con el atributo

[Microsoft.SqlServer.Server.SqlUserDefinedAggregate]Propiedades del atributo

IsInvariantToDuplicates La presencia de duplicados no modifica el agregado, p.e. MAX()

IsInvariantToNulls La presencia de valores nulos no modifica el agregado, p.e. MAX()

Page 27: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

CLR en SQLAgregadosNecesitamos implementar tres metodos en la clase

- Init Se llama antes de empezar a procesar datos- Accumulate Se llama por cada element a aggregar- Merge En caso de de que la query se resuelva de forma paralela se llama

a merge para agregar los resultados parciales de cada hilo- Terminate Se llama cuando se finaliza el procesado, cleanup y devolver valor

final del agregado

Page 28: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

CLR en SQLUDT(User Defined Types)Podemos almacenar una clase del CLR como valor en una tabla, atributo

Microsoft.SqlServer.Server.SqlUserDefinedTypeNecesita implementar un metodo estatico ParseNecesita implementar la interface INullablePodemos llamar a los metodos desde la selectTenemos dos opciones para serializar

Native: SQL se encarga de la serialización, solo tipos basicos, no cadenas.UserDefined: Serializacion manual, será obligatorio implementar la interface

IBinarySerialize

Page 29: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

CLR en SQL[Serializable][Microsoft.SqlServer.Server.SqlUserDefinedType(Format.UserDefined, MaxByteSize = -1)]public class Plane : INullable, IBinarySerialize

public static Plane Parse(SqlString s){ //Parse s

return Plane;}

Page 30: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

DEMOHaga clic en el icono para agregar una imagen

Page 31: Mejores Practicas en SQL Server - Seguridad, Conectividad y CLR

dotnetConfSQL PASS LIMA 2016