none
Перенос списка (библиотеки) с правами RRS feed

  • Вопрос

  • Здравствуйте!

    Есть следующая проблема. Есть сайт, который находится на MOSS 2007 Enterprise. На этом сайте есть библиотеки, в которых на каждой папке и иногда на подпапках розданы уникальные права. Необходимо все это дело перенести на SharePoint 2010 Standart.

    Соответственно загвоздка в том, как при переносе с SharePoint 2010 Enterprise перенести контент на Standart.

    Я пытался переносить утилитами stsadm и PowerShell, используя следующие команды:

    stsadm -o export -url "http://testsp:30000/DocLib9" -filename "C:\(ARC)\Test.cmp" -includeusersecurity

    stsadm -o import -url "http://testsp" -filename "C:\(ARC)\Test.cmp" -includeusersecurity

    import-spweb "http://testsp:30000" -IncludeUserSecurity -path "C:\(ARC)\test.cmp"

    export-spweb "http://testsp:30000" -ItemUrl "DocLib9" -IncludeUserSecurity -path "C:\(ARC)\test.cmp"

    В этой библиотеке снято наследование разрешений в самой библиотеке, а так же на каждой папке первого уровня розданы права совершенно различным пользователям сайта.

    При переносе как через stsadm так и PowerShell наследование не сохраняется.

    В логе при экспорте/импорте 3 предупреждения о том, что пользователь не найден (он вообще отсутствует в домене).


    Подскажите, каким образом можно перенести права внутри библиотеки или списка?

    Еще интересует вопрос, можно ли получить запросом в БД список разрешений на объекты, если да, то где искать?

    Масштабы бедствия более полутора тысяч папок, досталось в наследство:(


    • Изменено Max_y 3 апреля 2012 г. 8:18
    3 апреля 2012 г. 8:03

Ответы

  • В общем со второй попытки (была до этого еще первая) удалось получить необходимый список и понять масштабы бедствия. Запрос выглядит примерно так:

     SELECT d.LeafName,u.[tp_Login]
          ,u.[tp_Title],l.tp_Title,r.Title,r.RoleId
     FROM docs as d
     INNER JOIN RoleAssignment AS ra on ra.scopeid = d.scopeid
     INNER JOIN UserInfo as u ON u.tp_ID = ra.PrincipalId
     INNER JOIN AllLists AS l ON l.tp_ID = d.ListID
     INNER JOIN Roles AS r ON r.RoleId = ra.RoleId
     WHERE l.tp_WebId = '31DAC917-D924-43BE-AC0C-2F82170260A5'
     AND l.tp_ServerTemplate = 101 AND d.Type =1 

    d.Type  - тип документа

    l.ServerTemplate - шаблон библиотеки (101- документы, 107 - задачи и пр.)

    за раздачу уникальных прав отвечает поле scopeId

    В итоге - уникальных прав 30 тысяч, из них без огранниченого доступа 8 тысяч... печально. Надо теперь выяснить, почему при импорте/экспорте PS и stsadm не сохраняют права.

    • Помечено в качестве ответа Max_y 8 апреля 2012 г. 15:51
    8 апреля 2012 г. 15:51

Все ответы

  • SELECT 
    W.FullUrl as 'АДрес узла'
    ,W.Title as 'Название узла'
    ,AL.tp_Title as 'Название библиотеки'
    ,R.Title as 'Уровень разрешений'
    ,UI.tp_Login  as 'Пользователь'
    FROM 
    RoleAssignment as RA join Roles as R on RA.RoleId = R.RoleId
    inner join UserInfo as UI on RA.PrincipalId = UI.tp_ID --and UI.tp_ID = '316'
    inner join AllLists as AL on RA.ScopeId = AL.tp_ScopeId 
    inner join Webs as W on W.Id = AL.tp_WebId
    --where R.SiteId ='B166B0A1-825B-4B5E-89C3-AA0B726D9E2A' 
    order by W.FullUrl
    
    ну примерно так... 
    4 апреля 2012 г. 4:46
  • За ответ спасибо, но он не решает проблему распределения прав внутри библиотек.

    4 апреля 2012 г. 8:09
  • ага, это только можно права посмотреть.

    а "внутри библиотеки" что имеется ввиду?

    4 апреля 2012 г. 9:20
  • Есть библиотека, в которая предназначена для региона, например Сибирь.

    В ней находится папки с названиями филиалов. Так вот на каждой папке розданы права тем сотрудникам, которые должны к ней иметь доступ. Т.е. фин. аналитик, имеющий права на первую папку не имеет их на вторую и прочие.

    Как я уже писал, при архивировании (и восстановлении) библиотек stsadm и PowerShell с указанием параметра includeusersecurity права не сохраняются. Пробовал через админку - аналогично.

    Я уже даже пробовал заархивировать библиотеку и восстановить на том же сайте (предварительно убив существующую) - все равно права не сохраняются, библиотека полностью наследует их от узла.

    При этом всем, у кого были вопросы по переносу библиотек с сохранением пользовательской безопасности советовали использовать для stsadm и PS параметр includeusersecurity. Я пробовал с ним и без - эффект один и тот же.

    4 апреля 2012 г. 9:33
  • ну для документов и папок из базы эти данные тоже можно посмотреть..

    есть там таблица alluserdata вроде.

    то даже если получится найти...это плохой вариант вставлять данные напрямую в базу.

    • Изменено _-DFS-_ 4 апреля 2012 г. 9:59
    4 апреля 2012 г. 9:55
  • В общем со второй попытки (была до этого еще первая) удалось получить необходимый список и понять масштабы бедствия. Запрос выглядит примерно так:

     SELECT d.LeafName,u.[tp_Login]
          ,u.[tp_Title],l.tp_Title,r.Title,r.RoleId
     FROM docs as d
     INNER JOIN RoleAssignment AS ra on ra.scopeid = d.scopeid
     INNER JOIN UserInfo as u ON u.tp_ID = ra.PrincipalId
     INNER JOIN AllLists AS l ON l.tp_ID = d.ListID
     INNER JOIN Roles AS r ON r.RoleId = ra.RoleId
     WHERE l.tp_WebId = '31DAC917-D924-43BE-AC0C-2F82170260A5'
     AND l.tp_ServerTemplate = 101 AND d.Type =1 

    d.Type  - тип документа

    l.ServerTemplate - шаблон библиотеки (101- документы, 107 - задачи и пр.)

    за раздачу уникальных прав отвечает поле scopeId

    В итоге - уникальных прав 30 тысяч, из них без огранниченого доступа 8 тысяч... печально. Надо теперь выяснить, почему при импорте/экспорте PS и stsadm не сохраняют права.

    • Помечено в качестве ответа Max_y 8 апреля 2012 г. 15:51
    8 апреля 2012 г. 15:51