Muy interesante seguridad en internet, se quejan de las cookies pero hay mucho más.
http://www.securitybydefault.com/2014/07/cazador-de-mitos-la-privacidad-en.html
viernes, 18 de julio de 2014
viernes, 6 de junio de 2014
IDENTITY - Error de desbordamiento aritmético
Bueno problemilla de hoy.
Tenemos una tabla con un campo id que es identity de tipo smallint
En la tabla hacemos una consulta y solo hay 10 registros
El mayor id es 11
Cuando queremos hacer un insert da un error
Antes de que te vuelvas loco, tal vez se borraron registros y por eso no lo ves (que es lo nos pasó a nosotros)
La solución es resetear el valor de la identidad y se puede hacer por linea de comandos
También es posible hacer un trucante
Tenemos una tabla con un campo id que es identity de tipo smallint
En la tabla hacemos una consulta y solo hay 10 registros
El mayor id es 11
Cuando queremos hacer un insert da un error
Mens. 8115, Nivel 16, Estado 1, Línea 1
Error de desbordamiento aritmético al convertir IDENTITY al tipo de datos smallint.
Desbordamiento aritmético.
Error de desbordamiento aritmético al convertir IDENTITY al tipo de datos smallint.
Desbordamiento aritmético.
Antes de que te vuelvas loco, tal vez se borraron registros y por eso no lo ves (que es lo nos pasó a nosotros)
La solución es resetear el valor de la identidad y se puede hacer por linea de comandos
También es posible hacer un trucante
viernes, 2 de mayo de 2014
Seguridad & Applet & Java
Una curiosidad que nos ha llevado un rato (posiblemente para otros sea obvio)
Creamos un Applet,las utilidades pueden ser vario-pintas. Desde las nuevas versiones de Java, se obliga a que el Applet este firmado por una entidad de confianza. De hecho, si no está firmado bloquea el Applet. Esto es un paso “más” en la seguridad: desde mi punto de vista relativo, estamos suponiendo que los usuarios verán (porque leer es más que improbable) el mensaje del Java y sabrán lo que significa (lo cual es mucho suponer)
Por supuesto hay documentación al respecto:
http://www.java.com/es/download/help/appsecuritydialogs.xml
Cómo firmar el Applet:
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jarsigner.html
Supongamos que lo hemos hecho todo, y después de repasarlo aún tenemos el mensaje de aviso. La pregunta sería: ¿estamos usando una firma valida?. Esa firma la usas para otras cosas, está emitida por una entidad que tú entiendes que es válida. ¿Seguro?
Que entiende Oracle por certificación (CA) de confianza?? Estará en google, pero yo no lo he visto. Lo que es seguro es que está en tu máquina:
En Windows (panel de control/ programas/ java )

Si tu firma no está emitido por un CA valido incluida en esa lista, siempre tendrás el mensajes de aviso. Para que te salga el aviso en azul, tus usuarios tendrán que agregar el certificado de la entidad que generó la firma. Pero nunca verán el logo de Java en el mensaje.
La solución real, es usar un certificado de una CA Valida y tendras el logo de Java
viernes, 18 de abril de 2014
Trigger – SQL server
Chorra pero interesante, si te piden hacer un histórico de un tabla
No vamos a entrar en si es trabajo del administrador, del log… esto es fácil y rápido
Y ya está , lo probamos
Como veras cuando hay un update, guardo el valor que había en la tabla, si quisieras guardar tanto el valor anterior como el nuevo tendrías que usar Deleted & Inserted, cuando es de tipo ‘U’
Claro que hay otra formas:
Trigger genérico
Change Data Capture (CDC) y Change Tracking (CT).
No vamos a entrar en si es trabajo del administrador, del log… esto es fácil y rápido
- Nos creamos una tabla que tiene la misma estructura que la tabla que queremos auditar backup_movimientos_mitabla , añadiendo 3 campos
Fecha --> de tipo date
Movimiento -->de tipo char(1) --> para saber si es un (Insert, Update o Delete)
Secuencia--> como campo identity y además primary key
- De la tabla que queremos audtiar, añadimos el siguiente trigger
CREATE TRIGGER [dbo].[tr_mitabla]
ON [dbo].[mitabla]
AFTER INSERT,DELETE, UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @Type as char(1)
-- Identificar que evento se está ejecutando (Insert, Update o Delete)
if exists (SELECT * FROM inserted)
if exists (SELECT * FROM deleted)
SELECT @Type='U' -- Si es un update
else
SELECT @Type='I' -- Si es un insert
else
SELECT @Type='D' -- si es un delete
-- Ahora guadarmos el cambios segun sea un tipo u otro
if @Type ='D' or @Type ='U'
insert into backup_movimientos_mitabla select *, getdate(), @Type FROM deleted
else
insert into backup_movimientos_mitabla select *, getdate(), @Type FROM inserted
set NoCount OFF;
END
Y ya está , lo probamos
insert into mitabla (column1, column2) values ('9999','Prueba backup');
update mitabla set column2='Prueba backup 0 ' where column1 ='9999';
delete from mitabla where column1 ='9999';
select * from backup_movimientos_mitabla
Como veras cuando hay un update, guardo el valor que había en la tabla, si quisieras guardar tanto el valor anterior como el nuevo tendrías que usar Deleted & Inserted, cuando es de tipo ‘U’
Claro que hay otra formas:
Trigger genérico
Change Data Capture (CDC) y Change Tracking (CT).
viernes, 4 de abril de 2014
Contains mayúsculas y minúsculas
Esto es una curiosidad,
Quería hacer una filtro, en un datagridview con una caja de texto, algo muy normal
Un ejemplo super-completo en http://joseluisgarciab.blogspot.com.es/2013/08/filtrar-datagridview-usando-listas.html
Lo mío era más sencillo, y menos reutilizable, y quería que se filtrara por “contiene”
olist.ForEach(Sub(a) a.EsVisible =
a.NombrePantalla.Contains(txtFiltro.Text))
Si hago esto me distingue entre mayúsculas y minúsculas.
Si ya sé que podría hacer:
olist.ForEach(Sub(a) a.EsVisible =
a.NombrePantalla.ToUpper.Contains(txtFiltro.Text.ToUpper))
Pero me parece más elegante:
olist.ForEach(Sub(a) a.EsVisible = Regex.IsMatch(a.NombrePantalla,
txtFiltro.Text, RegexOptions.IgnoreCase))
Suscribirse a:
Entradas (Atom)
