Почему пользователь домена получает UnauthorizedAccessException с разрешениями на чтение и запись, предоставленными всем?

Наше приложение позволяет пользователям читать и записывать файлы в папке \\foo\bar$. Администратор предоставил "Всем" разрешения на чтение и запись на обеих вкладках Разрешения общего доступа и Безопасность. Когда пользователь домена пытается записать в этот общий ресурс, наше приложение регистрирует следующее:

TYPE: System.UnauthorizedAccessException
MSG: Access to the path '\\foo\bar$\00074458_00076402.tif' is denied.
SOURCE: mscorlib

SITE: WinIOError
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite)
   at     Ceoimage.Basecamp.DocumentServers.DirectAccessServer._TryCommitQueueFile(IDocQueueFile file)
   at Ceoimage.Basecamp.DocumentServers.DirectAccessServer.SendQueuedFiles(Int32 queueId, Int32 userId, IDocQueueFile[] queueFiles)
   at Ceoimage.Basecamp.ScanDocuments.DataModule.CommitDocumentToQueue(QueuedDocumentModelWithCollections queuedDocument, IDocQueueFile[] files)

У меня нет учетной записи домена, поэтому я не могу проверить действующие разрешения этого пользователя, но распространяется ли «Все» на пользователей домена? Должны ли пользователи домена аутентифицироваться на сервере в дополнение к Active Directory, если «Все» считаются локальными участниками? Считается ли это местным принципалом?

Наше приложение представляет собой приложение .NET WinForms, работающее на клиенте Windows 7 в домене Windows, пытающееся получить доступ к файловому серверу под управлением Windows Server 2008 R2 Standard SP 1. Если вы не можете сказать, я немного не в себе здесь.


person flipdoubt    schedule 13.09.2012    source источник
comment
Группа Everyone содержит всех пользователей групп Domain Users и Authenticated Users. Вы уверены, что этот конкретный пользователь является пользователем домена? Может быть, они запускают его как локальный администратор на этой рабочей станции или что-то подобное.   -  person Marcel N.    schedule 14.09.2012
comment
У вас почти полный ответ, Джим Юпитер, но я не знаю ответа на ваш дополнительный вопрос. Спросите сейчас у их администратора.   -  person flipdoubt    schedule 14.09.2012
comment
Может быть. Я также думаю, что права доступа к файлам могут не наследоваться. Таким образом, вы можете попросить их также проверить это (для этого есть настройка).   -  person Marcel N.    schedule 14.09.2012
comment
Мы не можем это проверить, потому что файл не существует, т. е. это будет новый файл. Если только я неправильно понимаю, что вы просите нас проверить. Вы хотите, чтобы я проверил разрешение на определенный файл, верно? Это то, чего не существует.   -  person flipdoubt    schedule 14.09.2012
comment
Нет, я имел в виду, что для этого общего ресурса не включено наследование разрешений на файлы. Практически то, что говорит этот парень (он также дает несколько инструкций, как это проверить): social.technet.microsoft.com/Forums/en-US/winserverDS/thread/. Это более вероятно, чем учетная запись без домена, на которой запущено приложение. Не беспокойтесь, что это для 2003 года. Это все еще применимо.   -  person Marcel N.    schedule 14.09.2012
comment
Неа. Оба флажка Заменить все разрешения дочернего объекта... и Наследовать от родительского... отмечены флажками. Я заметил, что группа DOMAIN\Users имеет доступ на чтение, но не запрещает доступ на запись в каталог NTFS. Другие общие ресурсы, в которые ДОМЕН\Пользователи могут записывать, разрешают чтение и запись в ДОМЕН\Пользователи, как если бы Все не распространяются на ДОМЕН\Пользователи.   -  person flipdoubt    schedule 14.09.2012
comment
Невозможно сказать из вашего сообщения (вы не включили никакого кода), но если ваше приложение представляет собой веб-страницу, вы должны явно установить для FileMode значение Write при открытии файла. Многие перегрузки для открытия файла в .Net не требуют этого. Вы должны использовать тот, который делает. - Это может относиться или не относиться, в зависимости от типа приложения, просто подумал, что выброшу это туда.   -  person Kevin    schedule 14.09.2012
comment
В последнем абзаце моего вопроса говорится (и всегда говорилось), что наше приложение является приложением .NET WinForms... так что это не веб-приложение. Трассировка стека показывает System.IO.File.InternalCopy, который является частным помощником File.Copy, поэтому режим FileMode не используется и в этом нет необходимости.   -  person flipdoubt    schedule 14.09.2012
comment
Вы нашли проблему в конце концов?   -  person Marcel N.    schedule 19.09.2012
comment
Может быть, вы запускаете программу с сетевого ресурса? Иногда возникают проблемы с ограниченными правами для приложения .Net.   -  person Daniel Bişar    schedule 17.03.2013
comment
Возможно ли, что в файле есть запретный ACL, который не позволяет пользователю получить доступ к файлу? Запрет отменяет любой доступ, предоставленный пользователю.   -  person Doug Seelinger    schedule 03.05.2013


Ответы (1)


Ах, хитрая авторизация...

Мне пришлось довольно долго заниматься этим вопросом. Вот причина проблемы: LDAP работает в GUID. Группа администраторов, скорее всего, будет иметь другой guid, чем тот, который в настоящее время присутствует в домене.

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

Есть исправление!

Я бы добавил уловку, и внутри я бы стал владельцем файлов и заново применил политику домена с нуля.

Я сделал это недавно, если вам нужна дополнительная информация, дайте мне знать.

person WickedFan    schedule 02.05.2013
comment
Указатели на URL-адрес о том, как программно повторно применить политику домена? - person flipdoubt; 05.05.2013
comment
Ах, ну, программно... .NET был бы довольно простым. 'foreach(files in directory.enumeratefiles(..)') Мне не приходилось делать это лично, так как у меня был только один компьютер. Щелкните правой кнопкой мыши диск c: и получите права собственности, а также распространите и назначьте правильные настройки безопасности. Проверьте здесь ссылка. Вот как получить ссылку; требуется немного прочитать ссылка @flipdoubt - person WickedFan; 16.05.2013
comment
Похоже, что первая ссылка почему-то не работает. Найти здесь - person WickedFan; 16.05.2013