Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

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

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

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

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

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

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

icq: 436815515
skype: RandomClear
По умолчанию

Есть аж 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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как программно узнать адресс путь к папке мои документы и рабочий стол 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 12:31
Как ограничить доступ к папке с помощью реестра. rv9whu Безопасность, Шифрование 1 31.05.2009 20:26


19:10.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru