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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2012, 19:41   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
Вопрос Как предоставить доступ к папке определенному пользователю программно?

Добрый вечер! Мне нужно программно предоставить доступ к определенной папке конкретному пользователю. Чтобы только пользователь с определенной учеткой мог иметь доступ к этой папке. Чтобы я мог указать для папки "Чтение" или "Чтение и запись". Моя программа работает от имени администратора, который может делать все что угодно разумеется. Вообщем, мне надо реализовать что-то подобное (как во вложении):
Изображения
Тип файла: jpg Права.jpg (30.0 Кб, 151 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 19.06.2012, 20:07   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
нужно программно
Точно? Может оставить это на усмотрение админа?
Не я не против твоей затеи, но это скажем так дырка в безопасности - что будет если твоя прога окажется зараженной?
Впрочем... Могу сказать следующее: Нужно изучать ACL (модули aclapi, accctrl)
Так же не поленись почитать о GetAclInformation, GetAce, LookupAccountSid (тоже пригодится)
Пожалуй это все, что я когда-то пытался изучить. Получать список прав получалось. Давать... не очень

P.S. Фленов пытался в своей книге писать о правах... Однако мне его книга никак не помогла.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.06.2012, 20:18   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Не, оно я понимаю это. Просто хотелось, чтобы админ мог делать это через мою программу, для удобства. Если уж совсем не получится, то будет делать средствами винды. Разве через FieSetAttr нельзя установить "только чтение" определенной учетке? Мне впринципе это и надо. Средствами винды получается без проблем сделать, чтобы пользователь мог заходить в папку, к которой может обращаться только его учетка и работать со своими и не мог заходить в папки других пользователей.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 19.06.2012, 22:00   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Разве через FieSetAttr нельзя установить "только чтение" определенной учетке?
Да ну... Она еще Деда ДОСа видала ) какие там пользователи...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.06.2012, 06:37   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Значит, придется отказаться от этой затеи и делать средствами винды
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.06.2012, 08:31   #6
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

В свое время интересовался темой и накопал по этому поводу примерчик. Глянь, может поможет
Вложения
Тип файла: zip ObjSec.zip (256.0 Кб, 45 просмотров)
Баламут вне форума Ответить с цитированием
Старый 21.06.2012, 01:51   #7
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Есть аж 4 варианта.

1. Юзать API винды для NT+. Это сложно и крайне низкоуровнево. Замучаешься. Ключевые термины для поиска: AddAccessAllowedAce(Ex), AddAccessDeniedAce(Ex), InitializeAcl, SetSecurityDescriptorDacl и др.
2. Можно юзать SDDL (Win2000+). Это крайне просто и няшно, но нужно изучать язык SDDL. Ключевые термины для поиска: ConvertStringSecurityDescriptorToSe curityDescriptor, ConvertSecurityDescriptorToStringSe curityDescriptor, ConvertSidToStringSid, ConvertStringSidToSid.
3. Работа с API системы напрямую - это всегда сложно и чревато ошибками. Особенно, если с API сильно много не работал и не понимаешь базовых принципов его дизайна. Поэтому лучше использовать объектные обёртки для API. В качестве таковой рекомендую JEDI Windows Securiry Code Library (JWSCL). В комплекте также есть демки использования.
4. Можно юзать sacls.exe, входящий в комплект любой современной (и даже не очень) Windows. Это консольная утилита по отображению/изменению прав доступа. Начиная с Vista появляется более мощная icacls.exe. Соответственно, надо её вызвать, передать параметры, прочитать вывод. Утилиты работают по SDDL, так что учить его всё равно придётся, но зато кода не надо писать.

Референс:
- Функции
- Мат-часть

Вообще, безопасность - тема крайне сложная. Я не рекомендую делать что-либо в Windows связанное с безопасность, пока ты не прочитаешь книгу Writing Secure Code (на русском: Защищённый код) от Майкла Ховарда и Девида ЛеБланка. Упомянутая выше мат-часть может служить лишь кратким введением.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как программно узнать адресс путь к папке мои документы и рабочий стол VIR1435 Общие вопросы Delphi 11 08.06.2012 08:24
Доступ к определенному элементу (при Edit Template) coNsept Общие вопросы .NET 4 09.03.2012 19:21
А как программно запретить доступ к файлу Стелс Общие вопросы Delphi 11 02.10.2011 13:51
закрыть доступ одному пользователю mars56 Безопасность, Шифрование 3 11.12.2009 11:31
Как ограничить доступ к папке с помощью реестра. rv9whu Безопасность, Шифрование 1 31.05.2009 20:26