2013-02-17 2 views
1
RECONFIGURE 
EXEC sp_configure 'xp_cmdshell',1 

declare @cmdstring varchar(1000) 

set @cmdstring = 'copy D:\\Mine\\Mine\\Icons\\1355312509_gadu.ico D:\\Mine\\Mine\\1355312509_gadu.ico' 
exec master..xp_cmdshell @cmdstring 

RECONFIGURE 
EXEC sp_configure 'xp_cmdshell',0 

Я пытаюсь выполнить это на удаленном сервере, я зарегистрирован в качестве сисадмина, хотя я не в состоянии выполнить, это ошибка я получаю, я через ранее пост, но не мог «т найти правильное решениевыполнение xp_cmdshell в удаленном сервере

output 
The device is not ready. 
NULL 

Любая помощь будет apreciated

не будет ли этот код

RECONFIGURE 
    EXEC sp_configure 'xp_cmdshell',0 

в конце кода устранить эти угрозы безопасности?

Это то, что я сделал, и его хорошо

CREATE TABLE #temp 
(
    id    INT IDENTITY(1, 1), 
    name_file  VARCHAR(500), 
    depth_tree  VARCHAR(10), 
    is_folder_files VARCHAR(10) 
) 

/* xp_dirtree selects file from specific location 
* depth_tree  : depth of the search i.e. subfolders 
* is_folder_files : selects folders only or files too 
*/ 

INSERT INTO #temp(name_file, depth_tree, is_folder_files) EXEC xp_dirtree @source_path, 0, 1 

-- Must concatenate to have permission for xp_cmdshell 
SET @concatenate_string = 'RECONFIGURE EXEC sp_configure ''xp_cmdshell'',1 EXEC MASTER..xp_cmdshell ' 


-- Generating copy string in bulk 
SELECT @cmd_string =  
    ISNULL(@cmd_string, '') + 
    CASE WHEN (LEN(REPLACE(t.name_file, @seperate_value, 1)) <> LEN(t.name_file)) -- if @seperate_value is not in image 
     THEN 
     (
      SELECT CASE 
       WHEN REPLACE(t.name_file, 'Approach', 1) <> t.name_file OR REPLACE(t.name_file, 'CloseUp', 1) <> t.name_file -- if word Approach or CloseUp is not there in image 
       THEN 
        (
        SELECT CASE 
        WHEN ((SELECT f.FaceID FROM Face f WHERE CAST(f.Notes AS VARCHAR) = SUBSTRING(t.name_file, 0, CHARINDEX(@seperate_value, t.name_file)-1)) IS NOT NULL) -- when extracted ID from image <> NotesID 
        THEN 
        (
        @concatenate_string + '''copy ' + @source_path + t.name_file + ' ' 
        + @destination_path 
        + (SELECT f.FaceID FROM Face f WHERE CAST(f.Notes AS VARCHAR) = SUBSTRING(t.name_file, 0, CHARINDEX(@seperate_value, t.name_file)-1)) -- Compares and gives the faceID 
        + (SELECT CASE 
            WHEN REPLACE(t.name_file, 'Approach', 1) <> t.name_file THEN '-AS.jpg'' ' 
            WHEN REPLACE(t.name_file, 'CloseUp', 1) <> t.name_file THEN '-BS.jpg'' ' 
            ELSE 
             'Undefined' 
           END 
         ) 
        ) 
        ELSE 
         ' ' 
        END 
       ) 
       ELSE 
        ' ' 
       END 
     )  
     ELSE 
      ' ' 
    END 

FROM #temp t 

SELECT @cmd_string + 'RECONFIGURE EXEC sp_configure ''xp_cmdshell'',0' 

EXEC (@cmd_string) 
+1

Почему вы используете сервер sql для копирования файлов значков? Я не позволю вам на какой-либо SQL Server, с которым я имею дело. Отключить доступ к xp_cmdshell –

+0

, это просто пример, я мог бы использовать файл systemobject, но при этом должен иметь условия или имена, зависящие от значения таблицы – brykneval

+0

, но не очень хорошего. Совет по-прежнему стоит: Отключить доступ к xp_cmdshell –

ответ

1

Это, скорее всего, проблема с учетными данными, служба SQL Server работает под управлением. У учетной записи может быть недостаточно доступа к папкам, которые вы пытаетесь скопировать из или из.

Одним из решений может быть попытка выполнить задачу у агента SQL Server, см. Также this discussion on the MSDN forums.

2

У меня тоже было это время. Я запустил скрипт с сервера a, где все было на сервере b. Я проверил, и единственное (помимо учетных данных, которые выглядят не проблема) было то, что филестроение не существовало на удаленном сервере.

Смежные вопросы