SQL OLE Automation, предоставляющая доступ к A Linux Share - PullRequest
0 голосов
/ 22 марта 2020

Я довольно отчаянно нуждаюсь в некоторых рекомендациях по этому вопросу.

Я годами запускаю 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
...