Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2009, 14:55   #1
vladtr
Форумчанин
 
Регистрация: 28.07.2008
Сообщений: 119
Сообщение Как прочитать объекты безопасности папки?

Стоит задача - получить для текущего каталога список пользователей с их правами для этой папки? Может кто подскажет с какой стороны подойти. Если папка содержит вложенные папки, то прочитать и составить списки для вложенных тоже. При этом необходимо использовать VBA.
vladtr вне форума Ответить с цитированием
Старый 29.04.2009, 15:55   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
При этом необходимо использовать VBA.
Что за необходимость, если не секрет?

Цитата:
Если папка содержит вложенные папки, то прочитать и составить списки для вложенных тоже
Считать список файлов и папок (в т.ч. и вложенных) проблем не составит (это легко реализуется средствами VBA и/или библиотеки типа Microsoft Scripting Runtime)

А считать права доступа для каждого из объектов проще всего средствами WMI.
Вот пример кода:
Код:
Sub WMI()
    'On Error Resume Next
    Set wmiFileSecSetting = GetObject("winmgmts:Win32_LogicalFileSecuritySetting.path='C:\windows'")
    Dim wmiSecurityDescriptor
    RetVal = wmiFileSecSetting.GetSecurityDescriptor(wmiSecurityDescriptor)

    If Err.Number <> 0 Then
        Debug.Print "GetSecurityDescriptor failed" & vbCrLf & Err.Number & vbCrLf & Err.Description: Exit Sub
    Else
        Debug.Print "GetSecurityDescriptor succeeded" & vbCrLf
    End If
    For Each wmiAce In wmiSecurityDescriptor.DACL
        Dim strsid As String
        s = s & "Access Mask: " & wmiAce.AccessMask & vbCrLf
        s = s & "ACE Type: " & wmiAce.AceType & vbCrLf    '& vbCrLf

        ' Get Win32_Trustee object from ACE
        Set Trustee = wmiAce.Trustee
        s = s & "Trustee Domain: " & Trustee.Domain & vbCrLf
        s = s & "Trustee Name: " & Trustee.Name & vbCrLf    '& vbCrLf

        ' Get SID as array from Trustee
        SID = Trustee.SID:        strsid = Join(SID, ",")
        s = s & "Trustee SID: {" & strsid & "}" & vbCrLf & vbCrLf
    Next
    MsgBox s, vbInformation
End Sub
На выходе имеем что-то вроде этого:
Цитата:
GetSecurityDescriptor succeeded

Access Mask: 1179817
ACE Type: 0
Trustee Domain: BUILTIN
Trustee Name: Пользователи
Trustee SID: {1,2,0,0,0,0,0,5,32,0,0,0,33,2,0,0}

Access Mask: -1610612736
ACE Type: 0
Trustee Domain: BUILTIN
Trustee Name: Пользователи
Trustee SID: {1,2,0,0,0,0,0,5,32,0,0,0,33,2,0,0}

Access Mask: 1245631
ACE Type: 0
Trustee Domain: BUILTIN
Trustee Name: Опытные пользователи
Trustee SID: {1,2,0,0,0,0,0,5,32,0,0,0,35,2,0,0}

Access Mask: -536805376
ACE Type: 0
Trustee Domain: BUILTIN
Trustee Name: Опытные пользователи
Trustee SID: {1,2,0,0,0,0,0,5,32,0,0,0,35,2,0,0}

Access Mask: 2032127
ACE Type: 0
Trustee Domain: BUILTIN
Trustee Name: Администраторы
Trustee SID: {1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0}

Access Mask: 268435456
ACE Type: 0
Trustee Domain: BUILTIN
Trustee Name: Администраторы
Trustee SID: {1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0}

Access Mask: 2032127
ACE Type: 0
Trustee Domain: NT AUTHORITY
Trustee Name: SYSTEM
Trustee SID: {1,1,0,0,0,0,0,5,18,0,0,0}

Access Mask: 268435456
ACE Type: 0
Trustee Domain: NT AUTHORITY
Trustee Name: SYSTEM
Trustee SID: {1,1,0,0,0,0,0,5,18,0,0,0}

Access Mask: 268435456
ACE Type: 0
Trustee Domain:
Trustee Name: СОЗДАТЕЛЬ-ВЛАДЕЛЕЦ
Trustee SID: {1,1,0,0,0,0,0,3,0,0,0,0}
EducatedFool вне форума Ответить с цитированием
Старый 30.04.2009, 07:35   #3
vladtr
Форумчанин
 
Регистрация: 28.07.2008
Сообщений: 119
Хорошо Не секрет.

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Что за необходимость, если не секрет?
Нет не секрет. Поручили сделать эту задачу на нашем портале (организовать учет доступа к ресурсам файлового сервера, с возможностью обновления и печатью отчета). Из опыта скажу, что пользователю необходимо сделать что-то удобное. Единственный способ (который я могу сделать) это создать офисное приложение например EXCEL-файл, который будет связан со списком на портале. Работу со списком сделать в этом файле.

За помощь большое спасибо. Возможно еще будут вопросы, но как без них...

А как прочитать кто входит в Trustee Name: Администраторы. Посоветуйте источники информации...

Последний раз редактировалось vladtr; 30.04.2009 в 08:11. Причина: появился вопрос...
vladtr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как прочитать архив? BuT@JL Общие вопросы Delphi 1 24.03.2009 09:08
Как вписывать объекты в свои процедуры? schveine Помощь студентам 4 02.10.2007 13:46
Как стирать объекты? tolyan_baraban Общие вопросы Delphi 4 23.09.2007 15:17
как прочитать файл бодяга Общие вопросы Delphi 1 09.09.2007 20:37
Как правильно программно создавать объекты на форме Format C: Общие вопросы Delphi 16 05.07.2007 09:08