none
Особенности работы xp_fileexist на MS SQL Server 2005 RRS feed

  • Вопрос

  • Приветствую уважаемый Форум!

    Имеется MS SQL Server 2005 EE, 9.0.3159 и возникла проблема с использованием xp_fileexist.
    Хочется сразу отметить два момента:
    1. Похоже, что теперь (в отличие от 2000), сия функция ПРАВИЛЬНО работает только из под роли sysadmin. Если же ее запустит пользователь, не имеющий счастья принадлежать к ней, то функция не выругается и не выдаст ошибку - она просто вернет результат, что файл не существует, хотя на самом деле он есть и права на него - Everyone full control.
    2. Работа этой функции никак не связана с настройками прокси-аккаунта для xp_cmdshell. Есть аккаунт, нет аккаунта - результат одинаков, см выше.
    Хочется знать, этот так и правильно, или я просто не все знаю?

    26 августа 2007 г. 20:15

Ответы

  •  

    1. Да

    2. Да

     

    xp_fileexist - недокументированная процедура. Следовательно, удивляться, что её поведение изменяется от версии к версии (а возможно от сервиспака до сервиспака или даже между хотфиксами), не стоит. Моё личное мнение - выносить проверку на существование файла на уровень приложения всегда, когда это возможно.
    27 августа 2007 г. 6:26

Все ответы

  •  

    1. Да

    2. Да

     

    xp_fileexist - недокументированная процедура. Следовательно, удивляться, что её поведение изменяется от версии к версии (а возможно от сервиспака до сервиспака или даже между хотфиксами), не стоит. Моё личное мнение - выносить проверку на существование файла на уровень приложения всегда, когда это возможно.
    27 августа 2007 г. 6:26
  •  Andrey Kudievskiy написано:

    xp_fileexist - недокументированная процедура. Следовательно, удивляться, что её поведение изменяется от версии к версии (а возможно от сервиспака до сервиспака или даже между хотфиксами), не стоит. Моё личное мнение - выносить проверку на существование файла на уровень приложения всегда, когда это возможно.

     

    Это верно, я и не удивляюсь, не скандалю, а просто констатирую факт. Авось кому пригодится Smile

     

     Andrey Kudievskiy написано:

    Моё личное мнение - выносить проверку на существование файла на уровень приложения всегда, когда это возможно.

     

    Или пользоваться тупым, но "штатным", гарантированно работающим средством:

    Code Snippet

    create table #tfn(FileName varchar(max));


    insert into #tfn

    exec xp_cmdshell 'dir \\server\share\file.jpg /b';


    if exists(select * from #tfn where FileName='file.jpg')
    select 'Exists';
    else
    select 'Not Exists';


    drop table #tfn;

     

     

    27 августа 2007 г. 8:14
  • Ох и не люблю я на продакшене xp_cmdshell разрешать... Как только, не дай Бог, самым случайным образом некий "злоумышленник" получит доступ к Вашему SQL Server'y, считайте, что и ОС у него в руках. Не зря в 2k5 по умолчанию отключено.

    27 августа 2007 г. 8:32
  • Это не злоумышленники, а глубоко проверенные люди Smile, которым таблицы из файлов заливать разрешено Smile О разрешении xp_cmdshell всем и речи нет.

    27 августа 2007 г. 10:47