Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 xp_dirtree  [new]
italiy555
Member

Откуда:
Сообщений: 36
Добрый день,
у меня в процедуре строка :
INSERT INTO #dir1 EXECUTE master.dbo.xp_dirtree @otkuda, 1,1
отрабатывает под админом, а под простым пользователем нет. Не ругается, просто остается пустая таблица и всё. Права на dbo.xp_dirtree группе в которую входит этот пользователь дали:
use [master]
GO
GRANT EXECUTE ON dbo.xp_dirtree TO [Домен\Группа]
GO
Подскажите пожалуйста, как то можно сделать чтобы была возможность запускать простым пользователем.
15 июн 11, 13:30    [10815741]     Ответить | Цитировать Сообщить модератору
 Re: xp_dirtree  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Функция недокументирванная, так что ответить на ваш вопрос сложно будет.
Напишите сборку или ESP, делов на полдня.
15 июн 11, 13:56    [10815909]     Ответить | Цитировать Сообщить модератору
 Re: xp_dirtree  [new]
italiy555
Member

Откуда:
Сообщений: 36
Гавриленко Сергей Алексеевич,

может есть какая то возможность запустить процедуру под пользователем у кот. есть права, пока не нашла как. что то типа EXECUTE AS login='adm'?
15 июн 11, 14:08    [10816004]     Ответить | Цитировать Сообщить модератору
 Re: xp_dirtree  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
italiy555
Гавриленко Сергей Алексеевич,

может есть какая то возможность запустить процедуру под пользователем у кот. есть права, пока не нашла как. что то типа EXECUTE AS login='adm'?
Есть execute as, да.
15 июн 11, 14:09    [10816017]     Ответить | Цитировать Сообщить модератору
 Re: xp_dirtree  [new]
italiy555
Member

Откуда:
Сообщений: 36
Сергей Алексеевич,

не подскажете , в синтаксисе плаваю
15 июн 11, 14:29    [10816189]     Ответить | Цитировать Сообщить модератору
 Re: xp_dirtree  [new]
invm
Member

Откуда: Москва
Сообщений: 9842
execute as login = 'All-powerful'
exec MyProc
revert
15 июн 11, 15:11    [10816537]     Ответить | Цитировать Сообщить модератору
 Re: xp_dirtree  [new]
italiy555
Member

Откуда:
Сообщений: 36
invm,
ругается что нет такого пользователя(кот. у меня с админовскими правами).
15 июн 11, 15:28    [10816688]     Ответить | Цитировать Сообщить модератору
 Re: xp_dirtree  [new]
invm
Member

Откуда: Москва
Сообщений: 9842
Ну если ругается, значит действительно нету.
15 июн 11, 15:36    [10816780]     Ответить | Цитировать Сообщить модератору
 Re: xp_dirtree  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Вы код ваш покажите и точное сообщение об ошибке.
15 июн 11, 15:44    [10816844]     Ответить | Цитировать Сообщить модератору
 Re: xp_dirtree  [new]
italiy555
Member

Откуда:
Сообщений: 36
invm, есть точно,
просто видимо как то синтаксис не тот, нада думать. Самое обидное что все остальные части программы используют xp_cmdshell, тоже под админом только отрабатывает, так что проблема глобальная.
15 июн 11, 15:45    [10816862]     Ответить | Цитировать Сообщить модератору
 Re: xp_dirtree  [new]
italiy555
Member

Откуда:
Сообщений: 36
код такой :
execute as login = 'FL\sql'
INSERT INTO #dir1 EXECUTE master.dbo.xp_dirtree @otkuda, 1,1
revert

Ошибку не могу точно показать, потому что приходится перезагружаться под польз. другим чтоб проверить, кстати под админом не ругается. тогда выходит синтаксис ни при чем.
15 июн 11, 15:54    [10816936]     Ответить | Цитировать Сообщить модератору
 Re: xp_dirtree  [new]
italiy555
Member

Откуда:
Сообщений: 36
ошибка:Не удалось выполнить в качестве сервера-участника, поскольку участник "FL\sql" не существует, этот тип участника не может проходить олицетворение, или отсутствует разрешение.
15 июн 11, 16:17    [10817155]     Ответить | Цитировать Сообщить модератору
 Re: xp_dirtree  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
italiy555,

Вы вы брали порочный путь. Огласите задачу, а не выбранные Вами способ ее решения.
15 июн 11, 16:23    [10817204]     Ответить | Цитировать Сообщить модератору
 Re: xp_dirtree  [new]
invm
Member

Откуда: Москва
Сообщений: 9842
BOL
Указание пользователя или имени входа
Имя пользователя или имя входа, указанные в инструкции EXECUTE AS <context_specification>, должно быть участником в базе данных sys.server_principals или sys.server_principals соответственно, в противном случае инструкция EXECUTE AS будет завершена с ошибкой. Кроме того, этому участнику должны быть предоставлены разрешения IMPERSONATE. Если процедура вызывается не владельцем базы данных и не членом предопределенной роли сервера sysadmin, указанный участник должен существовать даже в том случае, если пользователь производит доступ к базе данных или экземпляру SQL Server в качестве члена группы Windows. Для примера рассмотрим следующие условия.

  • Группа CompanyDomain\SQLUsers имеет доступ к базе данных Sales.
  • Пользователь CompanyDomain\SqlUser1 является членом группы SQLUsers и, таким образом, неявно имеет доступ к базе данных Sales.

    Хотя CompanyDomain\SqlUser1 имеет доступ к базе данных с помощью членства в группе SQLUsers, инструкция EXECUTE AS USER = 'CompanyDomain\SqlUser1' завершается с ошибкой, поскольку CompanyDomain\SqlUser1 не является участником в базе данных.

    Если пользователь утратил связь с учетной записью (соответствующее имя входа больше не существует), а пользователь не был создан с параметром WITHOUT LOGIN, попытка этого пользователя выполнить команду EXECUTE AS завершится неудачно.
  • 15 июн 11, 16:28    [10817250]     Ответить | Цитировать Сообщить модератору
     Re: xp_dirtree  [new]
    italiy555
    Member

    Откуда:
    Сообщений: 36
    pkarklin,

    Добрый день, постараюсь описать, я написала программу, кот. работает с файлами на сервере. На первом шаге считывает список файлов в папке, использую master.dbo.xp_dirtree. Дальше читаю файлы попорядку, обрабатываю их, переношу в архив , здесь уже использую xp_cmdshell. Всё работает, когда под админом, а когда запускает обычный пользователь(входящий в группу обычных пользователей), то проблема уже на первом шаге, т.е не читает файл. Не хватает прав я думаю пользоваться master.dbo.xp_dirtree и xp_cmdshell. Когда этого пользователя добавляешь в группу овнер, то отрабатывает. Но такой подход не подходит. Должен же быть какой то способ. Найти не могу, Есть пользователь у кот. много прав, от него все джобы запускаем. С раздачей прав плаваю, в справке читала, но мне бы попроще , в смысле, не попроще сделать, а попроще объяснить. Я не поняла. Конкретного ничего не нашла, какие то общие фразы для посвященных.
    16 июн 11, 07:12    [10819406]     Ответить | Цитировать Сообщить модератору
     Re: xp_dirtree  [new]
    italiy555
    Member

    Откуда:
    Сообщений: 36
    invm,

    Добрый день, у меня есть пользователь sql FL\Sql с правали админа. Есть группа sql FL\Бух с правали обычными. Т.е я правильно поняла, что я не могу написать в программе "execute as login = 'FL\Sql' " для пользователя который входит в группу FL\Бух, т.к его нет как пользователя в sql ? Неужели нет способа запустить master.dbo.xp_dirtree от обычного пользователя?
    16 июн 11, 07:30    [10819417]     Ответить | Цитировать Сообщить модератору
     Re: xp_dirtree  [new]
    HandKot
    Member

    Откуда: Sergiev Posad
    Сообщений: 3058
    учитывая
    BOL
    Учетная запись-посредник для процедуры xp_cmdshell
    Когда ее вызывает пользователь, не являющийся членом предопределенной роли сервера sysadmin, процедура xp_cmdshell подключается к Windows с помощью имени учетной записи и пароля, которые хранятся в учетных данных с именем ##xp_cmdshell_proxy_account##. Если эти посреднические учетные данные не существуют, то процедура xp_cmdshell завершит выполнение с ошибкой.


    то, возможно, xp_dirtree использует тот же механизм

    решение - настроить прокси или дать соответствующие права
    16 июн 11, 08:32    [10819502]     Ответить | Цитировать Сообщить модератору
     Re: xp_dirtree  [new]
    italiy555
    Member

    Откуда:
    Сообщений: 36
    HandKot,

    добрый день, права этой группе не могу дать админовские.
    а как настроить прокси?, это общая фраза , я читала такой на форуме, но не поняла как это конкретно сделать, может подскажете попроще.
    16 июн 11, 08:44    [10819566]     Ответить | Цитировать Сообщить модератору
     Re: xp_dirtree  [new]
    HandKot
    Member

    Откуда: Sergiev Posad
    Сообщений: 3058
    BOL
    sp_xp_cmdshell_proxy_account [ NULL | { 'account_name' , 'password' } ]

    NULL
    Указывает, что учетные данные учетной записи-посредника должны быть удалены.

    account_name
    Указывает имя входа Windows, которое будет использовано как учетная запись-посредник.

    password
    Указывает пароль для учетной записи Windows.

    16 июн 11, 08:54    [10819610]     Ответить | Цитировать Сообщить модератору
     Re: xp_dirtree  [new]
    italiy555
    Member

    Откуда:
    Сообщений: 36
    HandKot,

    т.е sp_xp_cmdshell_proxy_account [ NULL | { 'FL\Sql' , 'password_FL\Sql' } ] так?
    это прописать при каждом запуске процедуры? или это настраивается раз и навсегда.
    Не понятно фраза:"NULL
    Указывает, что учетные данные учетной записи-посредника должны быть удалены." что это значит, что обычный польз. запускает процедуру под админом и потом эти права на запуск под админом удаляются? Простите за глупые вопросы.
    16 июн 11, 09:08    [10819643]     Ответить | Цитировать Сообщить модератору
     Re: xp_dirtree  [new]
    HandKot
    Member

    Откуда: Sergiev Posad
    Сообщений: 3058
    давайте так
    автор
    отрабатывает под админом, а под простым пользователем нет. Не ругается, просто остается пустая таблица и всё


    1.
    если не важно под кем запускается процедура, то просто укажите в процедуре
    CREATE PROCEDURE myStoredProcedure
    WITH EXECUTE AS OWNER 
    ...
    GO

    и тогда не надо больше ничего делать: давать разрешения ни на ХП, ни на папки


    2. если необходимо выполнять процедуру от имени пользователя
    тогда проверьте есть ли права на ту папку, к которой обращаетесь
    16 июн 11, 09:42    [10819785]     Ответить | Цитировать Сообщить модератору
     Re: xp_dirtree  [new]
    italiy555
    Member

    Откуда:
    Сообщений: 36
    HandKot,

    мне не важно под кем запускается процедура, указала WITH EXECUTE AS OWNER
    Не помогло. теперь пропала возможность у меня под своими админовскими правами пользоваться dbo.xp_dirtree. сама процедура запускается под FL\SQl я проверила, а dbo.xp_dirtree теперь всех посылает.
    права на папку, к которой обращаюсь есть у всех.
    16 июн 11, 10:21    [10820051]     Ответить | Цитировать Сообщить модератору
     Re: xp_dirtree  [new]
    invm
    Member

    Откуда: Москва
    Сообщений: 9842
    italiy555
    INSERT INTO #dir1 EXECUTE master.dbo.xp_dirtree @otkuda, 1,1
    отрабатывает под админом, а под простым пользователем нет. Не ругается, просто остается пустая таблица и всё. Права на dbo.xp_dirtree группе в которую входит этот пользователь дали

    Есть ли у виндовой группы FL\Бух необходимые разрешения на @otkuda?
    Выполнять xp_dirtree разрешено роли public, так что явно давать разрешение не обязательно.
    16 июн 11, 10:22    [10820060]     Ответить | Цитировать Сообщить модератору
     Re: xp_dirtree  [new]
    italiy555
    Member

    Откуда:
    Сообщений: 36
    invm,

    Есть у группы FL\Бух все разрешения на @otkuda. С этого я начала копаться.

    "Выполнять xp_dirtree разрешено роли public, так что явно давать разрешение не обязательно. " ---хорошо, как тогда запустить её от public? Я от владельца сделала чтоб запускалась(WITH EXECUTE AS OWNER). Пропали права ещё и у меня. Т.е получается у владельца FL\SQL , кот. у нас имеет все права , все сложные джобы от него запускаются без проблем, тоже нет прав на эту xp_dirtree. Я в отчаяньи уже.
    16 июн 11, 10:36    [10820182]     Ответить | Цитировать Сообщить модератору
     Re: xp_dirtree  [new]
    invm
    Member

    Откуда: Москва
    Сообщений: 9842
    italiy555
    На первом шаге считывает список файлов в папке, использую master.dbo.xp_dirtree


    xp_dirtree возвращает список папок и уровень их вложенности, но никак не список файлов.
    16 июн 11, 10:59    [10820382]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить