Problema con usuarios y procedimiento almacenado

09/07/2008 - 11:05 por Angel Zapata | Informe spam
Hola a todos,

tengo un problema con 2 usuarios concretamente y no consigo la solución, a ver si algun guru de SQL sabe donde buscar.

Me ocurre con 2 usuarios que conectan remotamente con terminal server, si conecto yo con mi cuenta de usuario y despues me identifico en la
aplicación funciona perfectamente, en cambio si conecto con su cuenta de usuario, aunque en la aplicación me identifique yo me da un error de
conversion de varchar a datetime al leer un procedimiento almacenado, aunque la identificación a la base de datos la hace internamente la
aplicación como sa. Por lo que entiendo que todos tienen acceso a todo, que es la aplicación quien limita que tablas, vistas o procedimientos
puede ejecutar.

Les he cambiado de todo pero no encuentro que no estoy haciendo o que no estoy haciendo bien.

Por favor, me urge encontrar el porque, ya que deseo implementar niveles de seguridad que hasta ahora no tenía y estoy perdido.

Muchas gracias por vuestra atención
Angel Zapata
Siglhogar XXI S.L.
"Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"

Preguntas similare

Leer las respuestas

#6 Angel Zapata
09/07/2008 - 19:09 | Informe spam
Hola Alejandro,
para ejecutar el procedimiento hago una llamada desde el codigo de la aplicacion de esta forma (VB 6)

ProcedimientoParametros = PedidoFiltro.CanalDesde & ", " & PedidoFiltro.CanalHasta _
& ", '" & PedidoFiltro.FechaDesde & "', '" & PedidoFiltro.FechaHasta & "'" _
& ", " & PedidoFiltro.AgenteDesde & ", " & PedidoFiltro.AgenteHasta _
& ", " & PedidoFiltro.ClienteDesde & ", " & PedidoFiltro.ClienteHasta _
& ", " & PedidoFiltro.GerenciaDesde & ", " & PedidoFiltro.GerenciaHasta _
& ", " & PedidoFiltro.ZonaDesde & ", " & PedidoFiltro.ZonaHasta _
& ", " & PedidoFiltro.DelegacionDesde & ", " & PedidoFiltro.DelegacionHasta _
& ", " & PedidoFiltro.EquipoDesde & ", " & PedidoFiltro.EquipoHasta _

RegistroGridPedido.Open "Execute spPedidoGeneral " & ProcedimientoParametros, Conexion, adOpenStatic, adLockReadOnly

Angel Zapata
Siglhogar XXI S.L.
"Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"

Alejandro Mesa escribió:
Angel,

Con longitud de 8?

Eso me suena raro, puesto que la definicion de datetime no necesita
especificacion de longitud, aunque SQL Server usa 8 bytes para su
almacenamiento.

Otra cosa, como estan ejecutando ese procedimiento?


AMB

"Angel Zapata" wrote:

Hola Alejandro,

el campo PcaFecha corresponde a la tabla Pedido_Cab y es de tipo datetime con longitud de 8.

Muchas gracias por tu interes

Angel Zapata
Siglhogar XXI S.L.
"Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"

Alejandro Mesa escribió:
Angel,

Me inmagino que esta fila sera la de el problema.

and (PcaFecha BETWEEN @DesdeFecha AND @HastaFecha)


Pudieras decirnos a que tabla pertence esta columna y cual es el tipo de
data de la misma?


AMB


"Angel Zapata" wrote:

Hola Alejandro,

el sp en cuestion es este

ALTER Procedure spPedidoGeneral
@DesdeCanal as Int, @HastaCanal as Int,
@DesdeFecha as Datetime, @HastaFecha as Datetime,
@DesdeAgente as Int, @HastaAgente as Int,
@DesdeCliente as Int, @HastaCliente as Int,
@DesdeGerencia as Int, @HastaGerencia as int,
@DesdeZona as Int, @HastaZona as int,
@DesdeDelegacion as int, @HastaDelegacion as int,
@DesdeEquipo as int, @HastaEquipo as int
AS
SELECT dbo.Pedido_Cab.PcaAño AS Año, dbo.Pedido_Cab.PcaCanCodigo AS Canal, dbo.Pedido_Cab.PcaCodigo AS Pedido,
dbo.Pedido_Cab.PcaContrato AS Contrato, dbo.Pedido_Cab.PcaFecha AS Fecha, dbo.Pedido_Cab.PcaCliCodigo AS ClienteCodigo,
dbo.Cliente.CliApellido1 + ' ' + dbo.Cliente.CliApellido2 + ' ' + dbo.Cliente.CliNombre AS ClienteNombre, dbo.Cliente.CliNIF AS ClienteNIF,
dbo.Cliente.CliTelefono1 AS ClienteTelefono, dbo.Pedido_Cab.PcaAgeCodigo AS AgenteCodigo, dbo.Agente.AgenteGerenciaCodigo,
dbo.Agente.AgenteZonaCodigo, dbo.Agente.AgenteDelegacionCodigo, dbo.Agente.AgenteEquipoCodigo
FROM dbo.Pedido_Cab LEFT OUTER JOIN
dbo.Cliente ON dbo.Pedido_Cab.PcaCliCodigo = dbo.Cliente.CliCodigo LEFT OUTER JOIN
dbo.Agente ON dbo.Pedido_Cab.PcaAgeCodigo = dbo.Agente.AgeCodigo
WHERE (PcaCanCodigo BETWEEN @DesdeCanal AND @HastaCanal)
and (PcaFecha BETWEEN @DesdeFecha AND @HastaFecha)
and (PcaAgeCodigo BETWEEN @DesdeAgente AND @HastaAgente)
and (PcaCliCodigo BETWEEN @DesdeCliente AND @HastaCliente)
and (AgenteGerenciaCodigo BETWEEN @DesdeGerencia AND @HastaGerencia)
and (AgenteZonaCodigo BETWEEN @DesdeZona AND @HastaZona)
and (AgenteDelegacionCodigo BETWEEN @DesdeDelegacion AND @HastaDelegacion)
and (AgenteEquipoCodigo BETWEEN @DesdeEquipo AND @HastaEquipo)
ORDER BY PcaContrato, PcaAño, PcaCanCodigo, PcaCodigo
return

Lo curioso es que da error cuando se ejecuta con un usuario de escritorio remoto (Terminal Server), con los usuarios locales no hay ningun problema.

Angel Zapata
Siglhogar XXI S.L.
"Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"

Alejandro Mesa escribió:
Angel,

conversion de varchar a datetime al leer un procedimiento almacenado


Pudieras postear la sentencia que da el error?

No se si estaras usando alguna cadena cuyo formato es dependiente de el
lenguaje en uso o de el formato de "set dateformat". Si quieres evitar este
tipo de problemas, usa un formato independiente como "yyyymmdd" o
"yyyy-mm-ddThh:mi:ss.mmm". Para mas info sobre estos formatos, chequea la
funcion "convert" en los BOL.


AMB




"Angel Zapata" wrote:

Hola a todos,

tengo un problema con 2 usuarios concretamente y no consigo la solución, a ver si algun guru de SQL sabe donde buscar.

Me ocurre con 2 usuarios que conectan remotamente con terminal server, si conecto yo con mi cuenta de usuario y despues me identifico en la
aplicación funciona perfectamente, en cambio si conecto con su cuenta de usuario, aunque en la aplicación me identifique yo me da un error de
conversion de varchar a datetime al leer un procedimiento almacenado, aunque la identificación a la base de datos la hace internamente la
aplicación como sa. Por lo que entiendo que todos tienen acceso a todo, que es la aplicación quien limita que tablas, vistas o procedimientos
puede ejecutar.

Les he cambiado de todo pero no encuentro que no estoy haciendo o que no estoy haciendo bien.

Por favor, me urge encontrar el porque, ya que deseo implementar niveles de seguridad que hasta ahora no tenía y estoy perdido.

Muchas gracias por vuestra atención
Angel Zapata
Siglhogar XXI S.L.
"Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"

Respuesta Responder a este mensaje
#7 Alejandro Mesa
09/07/2008 - 19:36 | Informe spam
Angel,

Justo eso era lo que queria saber. Sabes que de esa forma expones tu
servidor a que sea atacado mediante el uso de "SQL Injection"?

Te recomiendo cuanto antes que cambies la aplicacion y que en vez de
concatenar todos esos valores, que uses el objero SqlCommand y que crees la
coleccion de parametros.

Using Stored Procedures with a Command
http://msdn.microsoft.com/en-us/library/yy6y35y8(VS.71).aspx

Por lo pronto te recomiendo que formatees los valores de las fechas, para
que estas sean interpretadas por SQL Server independiente de el lenguaje o el
seteo de dateformat. Creo que eso ya lo comente en un otro mensaje.

& ", '" & PedidoFiltro.FechaDesde & "', '" & PedidoFiltro.FechaHasta & "'"



Ejemplo:

Module Module1

Sub Main()
Dim thisDate As Date = #3/15/2008#
Console.WriteLine(thisDate.ToString("yyyyMMdd"))
End Sub

End Module


AMB


"Angel Zapata" wrote:

Hola Alejandro,
para ejecutar el procedimiento hago una llamada desde el codigo de la aplicacion de esta forma (VB 6)

ProcedimientoParametros = PedidoFiltro.CanalDesde & ", " & PedidoFiltro.CanalHasta _
& ", '" & PedidoFiltro.FechaDesde & "', '" & PedidoFiltro.FechaHasta & "'" _
& ", " & PedidoFiltro.AgenteDesde & ", " & PedidoFiltro.AgenteHasta _
& ", " & PedidoFiltro.ClienteDesde & ", " & PedidoFiltro.ClienteHasta _
& ", " & PedidoFiltro.GerenciaDesde & ", " & PedidoFiltro.GerenciaHasta _
& ", " & PedidoFiltro.ZonaDesde & ", " & PedidoFiltro.ZonaHasta _
& ", " & PedidoFiltro.DelegacionDesde & ", " & PedidoFiltro.DelegacionHasta _
& ", " & PedidoFiltro.EquipoDesde & ", " & PedidoFiltro.EquipoHasta _

RegistroGridPedido.Open "Execute spPedidoGeneral " & ProcedimientoParametros, Conexion, adOpenStatic, adLockReadOnly

Angel Zapata
Siglhogar XXI S.L.
"Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"

Alejandro Mesa escribió:
> Angel,
>
> Con longitud de 8?
>
> Eso me suena raro, puesto que la definicion de datetime no necesita
> especificacion de longitud, aunque SQL Server usa 8 bytes para su
> almacenamiento.
>
> Otra cosa, como estan ejecutando ese procedimiento?
>
>
> AMB
>
> "Angel Zapata" wrote:
>
>> Hola Alejandro,
>>
>> el campo PcaFecha corresponde a la tabla Pedido_Cab y es de tipo datetime con longitud de 8.
>>
>> Muchas gracias por tu interes
>>
>> Angel Zapata
>> Siglhogar XXI S.L.
>> "Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"
>>
>> Alejandro Mesa escribió:
>>> Angel,
>>>
>>> Me inmagino que esta fila sera la de el problema.
>>>
>>>> and (PcaFecha BETWEEN @DesdeFecha AND @HastaFecha)
>>> Pudieras decirnos a que tabla pertence esta columna y cual es el tipo de
>>> data de la misma?
>>>
>>>
>>> AMB
>>>
>>>
>>> "Angel Zapata" wrote:
>>>
>>>> Hola Alejandro,
>>>>
>>>> el sp en cuestion es este
>>>>
>>>> ALTER Procedure spPedidoGeneral
>>>> @DesdeCanal as Int, @HastaCanal as Int,
>>>> @DesdeFecha as Datetime, @HastaFecha as Datetime,
>>>> @DesdeAgente as Int, @HastaAgente as Int,
>>>> @DesdeCliente as Int, @HastaCliente as Int,
>>>> @DesdeGerencia as Int, @HastaGerencia as int,
>>>> @DesdeZona as Int, @HastaZona as int,
>>>> @DesdeDelegacion as int, @HastaDelegacion as int,
>>>> @DesdeEquipo as int, @HastaEquipo as int
>>>> AS
>>>> SELECT dbo.Pedido_Cab.PcaAño AS Año, dbo.Pedido_Cab.PcaCanCodigo AS Canal, dbo.Pedido_Cab.PcaCodigo AS Pedido,
>>>> dbo.Pedido_Cab.PcaContrato AS Contrato, dbo.Pedido_Cab.PcaFecha AS Fecha, dbo.Pedido_Cab.PcaCliCodigo AS ClienteCodigo,
>>>> dbo.Cliente.CliApellido1 + ' ' + dbo.Cliente.CliApellido2 + ' ' + dbo.Cliente.CliNombre AS ClienteNombre, dbo.Cliente.CliNIF AS ClienteNIF,
>>>> dbo.Cliente.CliTelefono1 AS ClienteTelefono, dbo.Pedido_Cab.PcaAgeCodigo AS AgenteCodigo, dbo.Agente.AgenteGerenciaCodigo,
>>>> dbo.Agente.AgenteZonaCodigo, dbo.Agente.AgenteDelegacionCodigo, dbo.Agente.AgenteEquipoCodigo
>>>> FROM dbo.Pedido_Cab LEFT OUTER JOIN
>>>> dbo.Cliente ON dbo.Pedido_Cab.PcaCliCodigo = dbo.Cliente.CliCodigo LEFT OUTER JOIN
>>>> dbo.Agente ON dbo.Pedido_Cab.PcaAgeCodigo = dbo.Agente.AgeCodigo
>>>> WHERE (PcaCanCodigo BETWEEN @DesdeCanal AND @HastaCanal)
>>>> and (PcaFecha BETWEEN @DesdeFecha AND @HastaFecha)
>>>> and (PcaAgeCodigo BETWEEN @DesdeAgente AND @HastaAgente)
>>>> and (PcaCliCodigo BETWEEN @DesdeCliente AND @HastaCliente)
>>>> and (AgenteGerenciaCodigo BETWEEN @DesdeGerencia AND @HastaGerencia)
>>>> and (AgenteZonaCodigo BETWEEN @DesdeZona AND @HastaZona)
>>>> and (AgenteDelegacionCodigo BETWEEN @DesdeDelegacion AND @HastaDelegacion)
>>>> and (AgenteEquipoCodigo BETWEEN @DesdeEquipo AND @HastaEquipo)
>>>> ORDER BY PcaContrato, PcaAño, PcaCanCodigo, PcaCodigo
>>>> return
>>>>
>>>> Lo curioso es que da error cuando se ejecuta con un usuario de escritorio remoto (Terminal Server), con los usuarios locales no hay ningun problema.
>>>>
>>>> Angel Zapata
>>>> Siglhogar XXI S.L.
>>>> "Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"
>>>>
>>>> Alejandro Mesa escribió:
>>>>> Angel,
>>>>>
>>>>>> conversion de varchar a datetime al leer un procedimiento almacenado
>>>>> Pudieras postear la sentencia que da el error?
>>>>>
>>>>> No se si estaras usando alguna cadena cuyo formato es dependiente de el
>>>>> lenguaje en uso o de el formato de "set dateformat". Si quieres evitar este
>>>>> tipo de problemas, usa un formato independiente como "yyyymmdd" o
>>>>> "yyyy-mm-ddThh:mi:ss.mmm". Para mas info sobre estos formatos, chequea la
>>>>> funcion "convert" en los BOL.
>>>>>
>>>>>
>>>>> AMB
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> "Angel Zapata" wrote:
>>>>>
>>>>>> Hola a todos,
>>>>>>
>>>>>> tengo un problema con 2 usuarios concretamente y no consigo la solución, a ver si algun guru de SQL sabe donde buscar.
>>>>>>
>>>>>> Me ocurre con 2 usuarios que conectan remotamente con terminal server, si conecto yo con mi cuenta de usuario y despues me identifico en la
>>>>>> aplicación funciona perfectamente, en cambio si conecto con su cuenta de usuario, aunque en la aplicación me identifique yo me da un error de
>>>>>> conversion de varchar a datetime al leer un procedimiento almacenado, aunque la identificación a la base de datos la hace internamente la
>>>>>> aplicación como sa. Por lo que entiendo que todos tienen acceso a todo, que es la aplicación quien limita que tablas, vistas o procedimientos
>>>>>> puede ejecutar.
>>>>>>
>>>>>> Les he cambiado de todo pero no encuentro que no estoy haciendo o que no estoy haciendo bien.
>>>>>>
>>>>>> Por favor, me urge encontrar el porque, ya que deseo implementar niveles de seguridad que hasta ahora no tenía y estoy perdido.
>>>>>>
>>>>>> Muchas gracias por vuestra atención
>>>>>> Angel Zapata
>>>>>> Siglhogar XXI S.L.
>>>>>> "Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"
>>>>>>

Respuesta Responder a este mensaje
#8 Angel Zapata
11/07/2008 - 08:37 | Informe spam
Hola Alejandro,

perdona que no escribiera antes pero he estado fuera.

Gracias por la información, pero ahora mismo lo que no entiendo es porque con unos usuarios si funciona perfectamente y con otros no.

Al margen de cambiar el formato de programación, cosa inevitable, hay algo que estoy haciendo mal y no se lo que es.

Angel Zapata
Siglhogar XXI S.L.
"Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"

Alejandro Mesa escribió:
Angel,

Justo eso era lo que queria saber. Sabes que de esa forma expones tu
servidor a que sea atacado mediante el uso de "SQL Injection"?

Te recomiendo cuanto antes que cambies la aplicacion y que en vez de
concatenar todos esos valores, que uses el objero SqlCommand y que crees la
coleccion de parametros.

Using Stored Procedures with a Command
http://msdn.microsoft.com/en-us/library/yy6y35y8(VS.71).aspx

Por lo pronto te recomiendo que formatees los valores de las fechas, para
que estas sean interpretadas por SQL Server independiente de el lenguaje o el
seteo de dateformat. Creo que eso ya lo comente en un otro mensaje.

& ", '" & PedidoFiltro.FechaDesde & "', '" & PedidoFiltro.FechaHasta & "'"



Ejemplo:

Module Module1

Sub Main()
Dim thisDate As Date = #3/15/2008#
Console.WriteLine(thisDate.ToString("yyyyMMdd"))
End Sub

End Module


AMB


"Angel Zapata" wrote:

Hola Alejandro,
para ejecutar el procedimiento hago una llamada desde el codigo de la aplicacion de esta forma (VB 6)

ProcedimientoParametros = PedidoFiltro.CanalDesde & ", " & PedidoFiltro.CanalHasta _
& ", '" & PedidoFiltro.FechaDesde & "', '" & PedidoFiltro.FechaHasta & "'" _
& ", " & PedidoFiltro.AgenteDesde & ", " & PedidoFiltro.AgenteHasta _
& ", " & PedidoFiltro.ClienteDesde & ", " & PedidoFiltro.ClienteHasta _
& ", " & PedidoFiltro.GerenciaDesde & ", " & PedidoFiltro.GerenciaHasta _
& ", " & PedidoFiltro.ZonaDesde & ", " & PedidoFiltro.ZonaHasta _
& ", " & PedidoFiltro.DelegacionDesde & ", " & PedidoFiltro.DelegacionHasta _
& ", " & PedidoFiltro.EquipoDesde & ", " & PedidoFiltro.EquipoHasta _

RegistroGridPedido.Open "Execute spPedidoGeneral " & ProcedimientoParametros, Conexion, adOpenStatic, adLockReadOnly

Angel Zapata
Siglhogar XXI S.L.
"Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"

Alejandro Mesa escribió:
Angel,

Con longitud de 8?

Eso me suena raro, puesto que la definicion de datetime no necesita
especificacion de longitud, aunque SQL Server usa 8 bytes para su
almacenamiento.

Otra cosa, como estan ejecutando ese procedimiento?


AMB

"Angel Zapata" wrote:

Hola Alejandro,

el campo PcaFecha corresponde a la tabla Pedido_Cab y es de tipo datetime con longitud de 8.

Muchas gracias por tu interes

Angel Zapata
Siglhogar XXI S.L.
"Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"

Alejandro Mesa escribió:
Angel,

Me inmagino que esta fila sera la de el problema.

and (PcaFecha BETWEEN @DesdeFecha AND @HastaFecha)


Pudieras decirnos a que tabla pertence esta columna y cual es el tipo de
data de la misma?


AMB


"Angel Zapata" wrote:

Hola Alejandro,

el sp en cuestion es este

ALTER Procedure spPedidoGeneral
@DesdeCanal as Int, @HastaCanal as Int,
@DesdeFecha as Datetime, @HastaFecha as Datetime,
@DesdeAgente as Int, @HastaAgente as Int,
@DesdeCliente as Int, @HastaCliente as Int,
@DesdeGerencia as Int, @HastaGerencia as int,
@DesdeZona as Int, @HastaZona as int,
@DesdeDelegacion as int, @HastaDelegacion as int,
@DesdeEquipo as int, @HastaEquipo as int
AS
SELECT dbo.Pedido_Cab.PcaAño AS Año, dbo.Pedido_Cab.PcaCanCodigo AS Canal, dbo.Pedido_Cab.PcaCodigo AS Pedido,
dbo.Pedido_Cab.PcaContrato AS Contrato, dbo.Pedido_Cab.PcaFecha AS Fecha, dbo.Pedido_Cab.PcaCliCodigo AS ClienteCodigo,
dbo.Cliente.CliApellido1 + ' ' + dbo.Cliente.CliApellido2 + ' ' + dbo.Cliente.CliNombre AS ClienteNombre, dbo.Cliente.CliNIF AS ClienteNIF,
dbo.Cliente.CliTelefono1 AS ClienteTelefono, dbo.Pedido_Cab.PcaAgeCodigo AS AgenteCodigo, dbo.Agente.AgenteGerenciaCodigo,
dbo.Agente.AgenteZonaCodigo, dbo.Agente.AgenteDelegacionCodigo, dbo.Agente.AgenteEquipoCodigo
FROM dbo.Pedido_Cab LEFT OUTER JOIN
dbo.Cliente ON dbo.Pedido_Cab.PcaCliCodigo = dbo.Cliente.CliCodigo LEFT OUTER JOIN
dbo.Agente ON dbo.Pedido_Cab.PcaAgeCodigo = dbo.Agente.AgeCodigo
WHERE (PcaCanCodigo BETWEEN @DesdeCanal AND @HastaCanal)
and (PcaFecha BETWEEN @DesdeFecha AND @HastaFecha)
and (PcaAgeCodigo BETWEEN @DesdeAgente AND @HastaAgente)
and (PcaCliCodigo BETWEEN @DesdeCliente AND @HastaCliente)
and (AgenteGerenciaCodigo BETWEEN @DesdeGerencia AND @HastaGerencia)
and (AgenteZonaCodigo BETWEEN @DesdeZona AND @HastaZona)
and (AgenteDelegacionCodigo BETWEEN @DesdeDelegacion AND @HastaDelegacion)
and (AgenteEquipoCodigo BETWEEN @DesdeEquipo AND @HastaEquipo)
ORDER BY PcaContrato, PcaAño, PcaCanCodigo, PcaCodigo
return

Lo curioso es que da error cuando se ejecuta con un usuario de escritorio remoto (Terminal Server), con los usuarios locales no hay ningun problema.

Angel Zapata
Siglhogar XXI S.L.
"Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"

Alejandro Mesa escribió:
Angel,

conversion de varchar a datetime al leer un procedimiento almacenado


Pudieras postear la sentencia que da el error?

No se si estaras usando alguna cadena cuyo formato es dependiente de el
lenguaje en uso o de el formato de "set dateformat". Si quieres evitar este
tipo de problemas, usa un formato independiente como "yyyymmdd" o
"yyyy-mm-ddThh:mi:ss.mmm". Para mas info sobre estos formatos, chequea la
funcion "convert" en los BOL.


AMB




"Angel Zapata" wrote:

Hola a todos,

tengo un problema con 2 usuarios concretamente y no consigo la solución, a ver si algun guru de SQL sabe donde buscar.

Me ocurre con 2 usuarios que conectan remotamente con terminal server, si conecto yo con mi cuenta de usuario y despues me identifico en la
aplicación funciona perfectamente, en cambio si conecto con su cuenta de usuario, aunque en la aplicación me identifique yo me da un error de
conversion de varchar a datetime al leer un procedimiento almacenado, aunque la identificación a la base de datos la hace internamente la
aplicación como sa. Por lo que entiendo que todos tienen acceso a todo, que es la aplicación quien limita que tablas, vistas o procedimientos
puede ejecutar.

Les he cambiado de todo pero no encuentro que no estoy haciendo o que no estoy haciendo bien.

Por favor, me urge encontrar el porque, ya que deseo implementar niveles de seguridad que hasta ahora no tenía y estoy perdido.

Muchas gracias por vuestra atención
Angel Zapata
Siglhogar XXI S.L.
"Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"

Respuesta Responder a este mensaje
#9 Alejandro Mesa
11/07/2008 - 16:13 | Informe spam
Angel,

Al margen de cambiar el formato de programación, cosa inevitable, hay algo que estoy haciendo mal y no se lo que es.



Si sabes lo que es, es que no estas usando un formato de fecha que sea
independiente de el lenguaje en uso o de el seteo de dateformat. Cambialo y
veras.

AMB


"Angel Zapata" wrote:

Hola Alejandro,

perdona que no escribiera antes pero he estado fuera.

Gracias por la información, pero ahora mismo lo que no entiendo es porque con unos usuarios si funciona perfectamente y con otros no.

Al margen de cambiar el formato de programación, cosa inevitable, hay algo que estoy haciendo mal y no se lo que es.

Angel Zapata
Siglhogar XXI S.L.
"Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"

Alejandro Mesa escribió:
> Angel,
>
> Justo eso era lo que queria saber. Sabes que de esa forma expones tu
> servidor a que sea atacado mediante el uso de "SQL Injection"?
>
> Te recomiendo cuanto antes que cambies la aplicacion y que en vez de
> concatenar todos esos valores, que uses el objero SqlCommand y que crees la
> coleccion de parametros.
>
> Using Stored Procedures with a Command
> http://msdn.microsoft.com/en-us/library/yy6y35y8(VS.71).aspx
>
> Por lo pronto te recomiendo que formatees los valores de las fechas, para
> que estas sean interpretadas por SQL Server independiente de el lenguaje o el
> seteo de dateformat. Creo que eso ya lo comente en un otro mensaje.
>
>> & ", '" & PedidoFiltro.FechaDesde & "', '" & PedidoFiltro.FechaHasta & "'"
>
> Ejemplo:
>
> Module Module1
>
> Sub Main()
> Dim thisDate As Date = #3/15/2008#
> Console.WriteLine(thisDate.ToString("yyyyMMdd"))
> End Sub
>
> End Module
>
>
> AMB
>
>
> "Angel Zapata" wrote:
>
>> Hola Alejandro,
>> para ejecutar el procedimiento hago una llamada desde el codigo de la aplicacion de esta forma (VB 6)
>>
>> ProcedimientoParametros = PedidoFiltro.CanalDesde & ", " & PedidoFiltro.CanalHasta _
>> & ", '" & PedidoFiltro.FechaDesde & "', '" & PedidoFiltro.FechaHasta & "'" _
>> & ", " & PedidoFiltro.AgenteDesde & ", " & PedidoFiltro.AgenteHasta _
>> & ", " & PedidoFiltro.ClienteDesde & ", " & PedidoFiltro.ClienteHasta _
>> & ", " & PedidoFiltro.GerenciaDesde & ", " & PedidoFiltro.GerenciaHasta _
>> & ", " & PedidoFiltro.ZonaDesde & ", " & PedidoFiltro.ZonaHasta _
>> & ", " & PedidoFiltro.DelegacionDesde & ", " & PedidoFiltro.DelegacionHasta _
>> & ", " & PedidoFiltro.EquipoDesde & ", " & PedidoFiltro.EquipoHasta _
>>
>> RegistroGridPedido.Open "Execute spPedidoGeneral " & ProcedimientoParametros, Conexion, adOpenStatic, adLockReadOnly
>>
>> Angel Zapata
>> Siglhogar XXI S.L.
>> "Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"
>>
>> Alejandro Mesa escribió:
>>> Angel,
>>>
>>> Con longitud de 8?
>>>
>>> Eso me suena raro, puesto que la definicion de datetime no necesita
>>> especificacion de longitud, aunque SQL Server usa 8 bytes para su
>>> almacenamiento.
>>>
>>> Otra cosa, como estan ejecutando ese procedimiento?
>>>
>>>
>>> AMB
>>>
>>> "Angel Zapata" wrote:
>>>
>>>> Hola Alejandro,
>>>>
>>>> el campo PcaFecha corresponde a la tabla Pedido_Cab y es de tipo datetime con longitud de 8.
>>>>
>>>> Muchas gracias por tu interes
>>>>
>>>> Angel Zapata
>>>> Siglhogar XXI S.L.
>>>> "Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"
>>>>
>>>> Alejandro Mesa escribió:
>>>>> Angel,
>>>>>
>>>>> Me inmagino que esta fila sera la de el problema.
>>>>>
>>>>>> and (PcaFecha BETWEEN @DesdeFecha AND @HastaFecha)
>>>>> Pudieras decirnos a que tabla pertence esta columna y cual es el tipo de
>>>>> data de la misma?
>>>>>
>>>>>
>>>>> AMB
>>>>>
>>>>>
>>>>> "Angel Zapata" wrote:
>>>>>
>>>>>> Hola Alejandro,
>>>>>>
>>>>>> el sp en cuestion es este
>>>>>>
>>>>>> ALTER Procedure spPedidoGeneral
>>>>>> @DesdeCanal as Int, @HastaCanal as Int,
>>>>>> @DesdeFecha as Datetime, @HastaFecha as Datetime,
>>>>>> @DesdeAgente as Int, @HastaAgente as Int,
>>>>>> @DesdeCliente as Int, @HastaCliente as Int,
>>>>>> @DesdeGerencia as Int, @HastaGerencia as int,
>>>>>> @DesdeZona as Int, @HastaZona as int,
>>>>>> @DesdeDelegacion as int, @HastaDelegacion as int,
>>>>>> @DesdeEquipo as int, @HastaEquipo as int
>>>>>> AS
>>>>>> SELECT dbo.Pedido_Cab.PcaAño AS Año, dbo.Pedido_Cab.PcaCanCodigo AS Canal, dbo.Pedido_Cab.PcaCodigo AS Pedido,
>>>>>> dbo.Pedido_Cab.PcaContrato AS Contrato, dbo.Pedido_Cab.PcaFecha AS Fecha, dbo.Pedido_Cab.PcaCliCodigo AS ClienteCodigo,
>>>>>> dbo.Cliente.CliApellido1 + ' ' + dbo.Cliente.CliApellido2 + ' ' + dbo.Cliente.CliNombre AS ClienteNombre, dbo.Cliente.CliNIF AS ClienteNIF,
>>>>>> dbo.Cliente.CliTelefono1 AS ClienteTelefono, dbo.Pedido_Cab.PcaAgeCodigo AS AgenteCodigo, dbo.Agente.AgenteGerenciaCodigo,
>>>>>> dbo.Agente.AgenteZonaCodigo, dbo.Agente.AgenteDelegacionCodigo, dbo.Agente.AgenteEquipoCodigo
>>>>>> FROM dbo.Pedido_Cab LEFT OUTER JOIN
>>>>>> dbo.Cliente ON dbo.Pedido_Cab.PcaCliCodigo = dbo.Cliente.CliCodigo LEFT OUTER JOIN
>>>>>> dbo.Agente ON dbo.Pedido_Cab.PcaAgeCodigo = dbo.Agente.AgeCodigo
>>>>>> WHERE (PcaCanCodigo BETWEEN @DesdeCanal AND @HastaCanal)
>>>>>> and (PcaFecha BETWEEN @DesdeFecha AND @HastaFecha)
>>>>>> and (PcaAgeCodigo BETWEEN @DesdeAgente AND @HastaAgente)
>>>>>> and (PcaCliCodigo BETWEEN @DesdeCliente AND @HastaCliente)
>>>>>> and (AgenteGerenciaCodigo BETWEEN @DesdeGerencia AND @HastaGerencia)
>>>>>> and (AgenteZonaCodigo BETWEEN @DesdeZona AND @HastaZona)
>>>>>> and (AgenteDelegacionCodigo BETWEEN @DesdeDelegacion AND @HastaDelegacion)
>>>>>> and (AgenteEquipoCodigo BETWEEN @DesdeEquipo AND @HastaEquipo)
>>>>>> ORDER BY PcaContrato, PcaAño, PcaCanCodigo, PcaCodigo
>>>>>> return
>>>>>>
>>>>>> Lo curioso es que da error cuando se ejecuta con un usuario de escritorio remoto (Terminal Server), con los usuarios locales no hay ningun problema.
>>>>>>
>>>>>> Angel Zapata
>>>>>> Siglhogar XXI S.L.
>>>>>> "Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"
>>>>>>
>>>>>> Alejandro Mesa escribió:
>>>>>>> Angel,
>>>>>>>
>>>>>>>> conversion de varchar a datetime al leer un procedimiento almacenado
>>>>>>> Pudieras postear la sentencia que da el error?
>>>>>>>
>>>>>>> No se si estaras usando alguna cadena cuyo formato es dependiente de el
>>>>>>> lenguaje en uso o de el formato de "set dateformat". Si quieres evitar este
>>>>>>> tipo de problemas, usa un formato independiente como "yyyymmdd" o
>>>>>>> "yyyy-mm-ddThh:mi:ss.mmm". Para mas info sobre estos formatos, chequea la
>>>>>>> funcion "convert" en los BOL.
>>>>>>>
>>>>>>>
>>>>>>> AMB
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> "Angel Zapata" wrote:
>>>>>>>
>>>>>>>> Hola a todos,
>>>>>>>>
>>>>>>>> tengo un problema con 2 usuarios concretamente y no consigo la solución, a ver si algun guru de SQL sabe donde buscar.
>>>>>>>>
>>>>>>>> Me ocurre con 2 usuarios que conectan remotamente con terminal server, si conecto yo con mi cuenta de usuario y despues me identifico en la
>>>>>>>> aplicación funciona perfectamente, en cambio si conecto con su cuenta de usuario, aunque en la aplicación me identifique yo me da un error de
>>>>>>>> conversion de varchar a datetime al leer un procedimiento almacenado, aunque la identificación a la base de datos la hace internamente la
>>>>>>>> aplicación como sa. Por lo que entiendo que todos tienen acceso a todo, que es la aplicación quien limita que tablas, vistas o procedimientos
>>>>>>>> puede ejecutar.
>>>>>>>>
>>>>>>>> Les he cambiado de todo pero no encuentro que no estoy haciendo o que no estoy haciendo bien.
>>>>>>>>
>>>>>>>> Por favor, me urge encontrar el porque, ya que deseo implementar niveles de seguridad que hasta ahora no tenía y estoy perdido.
>>>>>>>>
>>>>>>>> Muchas gracias por vuestra atención
>>>>>>>> Angel Zapata
>>>>>>>> Siglhogar XXI S.L.
>>>>>>>> "Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"
>>>>>>>>

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida