sp_OAMethod
Publicado por Darío (2 intervenciones) el 25/08/2023 01:29:04
Tengo una aplicación que utiliza SQL Server Express. Entre otras cosas necesitamos guardar fotos en el servidor en gran cantidad. Inicialmente la guardábamos en forma binaria en tablas usando varias bases de datos independientes por el tema del límite de 10GB de SQL Server, pero aún así se nos complica ese límite.
Por otro lado, guardarlas en forma de archivo en una carpeta del servidor requiere que cada usuario remoto esté registrado en el servidor y en una carpeta compartida, lo que complica el agregado de nuevos usuarios.
Buscando en internet encontré que con el siguiente código puedo subir una foto a un campo binario de una tabla y luego hacer que ese campo se transforme en un archivo físico dentro del servidor, sin que el usuario de Windows remoto esté registrado en el servidor. (Aclaro que el sistema para conectarse a SQL Server usa un usuario fijo que los usuarios de la aplicación desconocen).
Lo implemento con el siguiente código
EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
EXEC sp_OASetProperty @ObjectToken, 'Type', 1
EXEC sp_OAMethod @ObjectToken, 'Open'
EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @IMG_PATH
EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @Destino, 2
EXEC sp_OAMethod @ObjectToken, 'Close'
EXEC sp_OADestroy @ObjectToken
y funciona perfecto. Solo que en la carpeta del servidor tuve que configurarla como compartida con todos los usuarios del servidor (aunque repito que el usuario de windows remoto no esté registrado como usuario en el servidor).
Sin embargo quisiera reducir mas el acceso a esa carpeta pero no se cual es el usuario específico que usa SQL Server para realizar la operación.
Desde ya, agradezco cualquier ayuda
Darío
Por otro lado, guardarlas en forma de archivo en una carpeta del servidor requiere que cada usuario remoto esté registrado en el servidor y en una carpeta compartida, lo que complica el agregado de nuevos usuarios.
Buscando en internet encontré que con el siguiente código puedo subir una foto a un campo binario de una tabla y luego hacer que ese campo se transforme en un archivo físico dentro del servidor, sin que el usuario de Windows remoto esté registrado en el servidor. (Aclaro que el sistema para conectarse a SQL Server usa un usuario fijo que los usuarios de la aplicación desconocen).
Lo implemento con el siguiente código
EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
EXEC sp_OASetProperty @ObjectToken, 'Type', 1
EXEC sp_OAMethod @ObjectToken, 'Open'
EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @IMG_PATH
EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @Destino, 2
EXEC sp_OAMethod @ObjectToken, 'Close'
EXEC sp_OADestroy @ObjectToken
y funciona perfecto. Solo que en la carpeta del servidor tuve que configurarla como compartida con todos los usuarios del servidor (aunque repito que el usuario de windows remoto no esté registrado como usuario en el servidor).
Sin embargo quisiera reducir mas el acceso a esa carpeta pero no se cual es el usuario específico que usa SQL Server para realizar la operación.
Desde ya, agradezco cualquier ayuda
Darío
Valora esta pregunta


0