Я довольно отчаянно нуждаюсь в некоторых рекомендациях по этому вопросу.
Я годами запускаю SQL функцию , которая использует OLE Automation для извлечения статистики файлов в важном рабочем процессе. ,
Недавно поставщик NAS, я изменил их прошивку, ломая "Гостевой доступ". NAS теперь выдает ошибки «Отказано в доступе». После устранения неполадок поставщик сопротивляется, исправляя это, инструктируя меня «заставить мою программу передавать учетные данные».
У меня есть windows установка учетных данных, но, очевидно, именно это сейчас используется здесь под капотом.
Как я могу передавать учетные данные из моего linux nas при использовании OLE Automation?
Код ниже для справки.
CREATE FUNCTION [dbo].[ufn_fileOperation]
(
@filPath VARCHAR (500),
@flg TINYINT = 1 -- 1 Select, 2 Stream, 3 Delete
)
RETURNS
@var TABLE
(
[FileName] varchar (500)
, [Type] varchar (200)
, [CreatedDate] datetime
, [LastAsscessedDate] datetime
, [LastModifiedDate] datetime
, [FullPath] varchar (500)
, [ShortPath] varchar (500)
, [Attribute] int
, [Operation] varchar(10)
, [FileText] varchar(max)
)
AS
BEGIN
DECLARE @init INT,
@fso INT,
@objFile INT,
@errObj INT,
@errMsg VARCHAR (500),
@fullPath VARCHAR (500),
@shortPath VARCHAR (500),
@objType VARCHAR (500),
@dateCreated datetime,
@dateLastAccessed datetime,
@dateLastModified datetime,
@attribute INT,
@objSize INT,
@fileName varchar (500),
@operation varchar(10),
@objStream INT,
@string varchar(max) = '',
@stringChunk varchar(8000),
@qBreak INT
SELECT
@init = 0,
@errMsg = 'Step01: File Open'
EXEC @init = sp_OACreate 'Scripting.FileSystemObject',
@fso OUT
IF @init = 0 SELECT
@errMsg = 'Step02: File Access '''
+ @filPath + '''',
@errObj = @fso
IF @init = 0 EXEC @init = sp_OAMethod @fso,
'GetFile',
@objFile OUT,
@filPath
IF @init = 0
SELECT
@errMsg = 'Step03: Access Attributes'''
+ @filPath + '''',
@errObj = @objFile
IF @init = 0 EXEC @init = sp_OAGetProperty @objFile,
'Name',
@fileName OUT
IF @init = 0 EXEC @init = sp_OAGetProperty @objFile,
'Type',
@objType OUT
IF @init = 0 EXEC @init = sp_OAGetProperty @objFile,
'DateCreated',
@dateCreated OUT
IF @init = 0 EXEC @init = sp_OAGetProperty @objFile,
'DateLastAccessed',
@dateLastAccessed OUT
IF @init = 0 EXEC @init = sp_OAGetProperty @objFile,
'DateLastModified',
@dateLastModified OUT
IF @init = 0 EXEC @init = sp_OAGetProperty @objFile,
'Attributes',
@attribute OUT
IF @init = 0 EXEC @init = sp_OAGetProperty @objFile,
'size',
@objSize OUT
IF @init = 0 EXEC @init = sp_OAGetProperty @objFile,
'Path',
@fullPath OUT
IF @init = 0 EXEC @init = sp_OAGetProperty @objFile,
'ShortPath',
@shortPath OUT
EXEC sp_OADestroy @fso
EXEC sp_OADestroy @objFile
SELECT @fso = NULL, @objFile = NULL, @operation = 'Selected'
IF @flg = 2
BEGIN
EXECUTE @init = sp_OACreate 'Scripting.FileSystemObject' , @fso OUT
IF @init=0 EXECUTE @init = sp_OAMethod @fso,
'OpenTextFile',
@objStream OUT,
@fullPath,
1,
false,
0
WHILE @init = 0
BEGIN
IF @init = 0 EXECUTE @init = sp_OAGetProperty @objStream, 'AtEndOfStream', @qBreak OUTPUT
IF @qBreak <> 0 BREAK
IF @init = 0 EXECUTE @init = sp_OAMethod @objStream, 'Read', @stringChunk OUTPUT,4000
SELECT @String=@string+@stringChunk
END
IF @init=0 EXECUTE @init = sp_OAMethod @objStream, 'Close'
EXECUTE sp_OADestroy @objStream
EXEC sp_OADestroy @fso
SET @operation = 'Stream'
END
SELECT @fso = NULL, @objFile = NULL
IF @flg = 3
BEGIN
EXEC @init = sp_OACreate 'Scripting.FileSystemObject', @fso OUTPUT
EXEC @init = sp_OAMethod @fso, 'DeleteFile', NULL, @fullPath
EXEC @init = sp_OADestroy @fso
SELECT @operation = 'Deleted'
END
INSERT INTO @var
VALUES (@fileName, @objType, @dateCreated, @dateLastAccessed, @dateLastModified, @fullPath, @shortPath, @attribute, @operation, @string)
RETURN
END