Страница: 1 |
|
Вопрос: Сертификат. Вопрос о доверенных издателях
|
Добавлено: 14.06.06 23:43
|
|
Автор вопроса: Vilor
|
Чтобы не появлялись лишние вопросы к пользователя по поводу включения макросов, содержащихся в книге Excel z создал с помощью cert.exe цифровой сертификат. Подписал им код VBA и проверил: при открытии файла есть возможность добавить издателя "VBACode" в список доверенных. На другом компе даная опция неактивна. Проверил - нужно создавать сертификат именно на том компе, на котором будет открываться файл с макросом, чтобы можно было добавить издателя в список доверенных. :-( ...не подходит...
Вопрос: Как не снижая уровня безопасности ("средний") создать и подписать код в книге Excel цифровым сертификатом, чтобы владельца сертификата можно было один раз при запуске книги добавить к группу оверенных издателей и вопросы по поводу отключения макросов, содержащихся в книге перестали доставать пользователей?
Ответить
|
Номер ответа: 2 Автор ответа: Незнайка
Вопросов: 7 Ответов: 188
|
Профиль | | #2
|
Добавлено: 15.06.06 09:53
|
перестали доставать пользователей?
1. Можно записать все функции либо в personal.xls
2. А лучше сделать надстройку (xla).
В обеих случаях вопросы относительно запуска макросов доставать не будут.
Ответить
|
Номер ответа: 4 Автор ответа: Незнайка
Вопросов: 7 Ответов: 188
|
Профиль | | #4
|
Добавлено: 16.06.06 09:32
|
Несогласен со всем.
Надстройки самое лучшее - что ты можешь сделать в твоем варианте.
1. Создай в сети папку куда будут иметь доступ "только чтенике" все пользователи которые работают с приложением.
2. Себе к этой папке естественно полный доступ.
3. Положи в эту папку файл надстроек. В нем должны содержаться все функции тобой написанные и процедура создания меню запуска этих функций (можешь написать для каждого пользователя или для групп пользователей свое меню - проверять будешь по сетевому имени пользователя и если захочешь по сетевому имени компьютера).
4. ОДИН раз рассылаешь пользователям файл .xls со следующим кодом:
Sub Установка()
Dim Надстройка As AddIn, НадстройкаНайдена As Boolean
For Each Надстройка In AddIns
If Надстройка.Name = "ИмяНадстройки.xla" Then
НадстройкаНайдена = True
If Надстройка.Installed = False Then
Надстройка.Installed = True
MsgBox "Надстройка активирована."
Exit For
End If
End If
Next Надстройка
If НадстройкаНайдена = False Then
Set Надстройка = AddIns.Add("ПолныйСетевойПуть\ИмяНадстройки.xla", False)
Надстройка.Installed = True
MsgBox "Надстройка установлена."
End If
End Sub 5. Потльзователь на своем компьютере запускает этот файл ЕДИНОЖДЫ.
6. Всё. После этого ты можешь дописывать в единственный файл надстройки все функции + раздавать права пользователей на те или иные функции. Запрешать им временно пользоваться файлом - разгонять их когда захочешь - и твоя защита на уровне виндоус - доступа к папкам. Впринципе - ты перекладываешь зашиту файла надстройки от изменений на администраторов сети - что не самое плохое.
Ответить
|
Номер ответа: 5 Автор ответа: Vilor
Вопросов: 5 Ответов: 28
|
Профиль | | #5
|
Добавлено: 16.06.06 21:15
|
Спасибо, буду пробовать. Если можно одно уточнение: надстройка "ПолныйСетевойПуть\ИмяНадстройки.xla" при AddIns.Add не копируется на машину пользователя, а лишь подключается к Excel?
И вопрос:
+ раздавать права пользователей на те или иные функции Я так понимаю, что если надстройка установлена, то все функции могут быть доступны. Разве можно разрешать пользователю пользователям одну функцию разрешать использовать, а другую запрещать????
Ответить
|
Номер ответа: 6 Автор ответа: Незнайка
Вопросов: 7 Ответов: 188
|
Профиль | | #6
|
Добавлено: 17.06.06 17:55
|
Set Надстройка = AddIns.Add("ПолныйСетевойПуть\ИмяНадстройки.xla", [B] False[/B] Если False, то копироваться на компьютер пользователя не будет.
2. Просто делаешь:
Sub ИмяФункции()
If ПроверкаРазрешения("ИмяФункции" = False Then Exit Sub
'код функции
End Sub
Public Function ПроверкаРазрешения( ByVal ИмяФункции As String) As Boolean
'выполняешь проверку
End Function Соответственно создай маленький .ini файл типа:
[Права]
Менеджер=
Аналитик=
Бухгалтер=
...
А проверяй по сетевым именам машин:
Public Declare Function GetComputerName Lib "KERNEL32" Alias "GetComputerNameA" _
  ByVal lpBuffer As String, nSize As Long) As Long ...или таким же образом для пользователей
Ответить
|
Номер ответа: 7 Автор ответа: Vilor
Вопросов: 5 Ответов: 28
|
Профиль | | #7
|
Добавлено: 18.06.06 01:42
|
еще раз спасибо...
А у тебя есть опыт организации доступа без использования GetComputerName или GetUserName? Дело в том что на одном компе, используя однй учетную запись, работают несколько пользователей, а уровень доступа у них разный. Я использовал *.xls файл но на старых машинах дополнительное открытие, чтение, фильтр данных пользователей занимает столько времени (конечно, возможно и код не оптимизирован как следует), что решил от этого варианта отказаться.
Вариант с *.ini файлом мне кажется стоящим рассмотрения. Но ведь в этом случае, как мне кажется тяжело организовать изменение данных пользователя... Подскажи, может есть API функции для работы с ini файлами? Если есть, то какие? Также рассматриваю как альтернативу вариант организации пользовательской базы на InterBase (но недостаток опыта и времени, постоянные "пинки" от руководства не дают возможности заняться вплотную). Посоветуй, пожалуйста, какими инструментами воспользоваться для организации авторизации пользователей и разграничения доступа к функциям VBA Excel. Пользователей не более 100 человек. Пользовательские даные стандарные: ФИО. пароль, адрес, телефоны, e-mail-ы, пароль, даты рождения. таб.номера, и т.п.
И, если у тебя ранее стояли подобные задачи и есть какие-то наработки, то я буду простосчастлив, если ты поможешь мне сэкономить время и вышлешь на мой e-mail
Ответить
|
Номер ответа: 9 Автор ответа: Незнайка
Вопросов: 7 Ответов: 188
|
Профиль | | #9
|
Добавлено: 18.06.06 20:10
|
пример практического использования ini файлов... Тут достаточно хорошо расписано как с использованием API работать с .ini http://www.vbnet.ru/articles/showarticle.aspx?id=24 На счет того как огранизавать структуру .ini и ваще по теме:
1. Код на VBA - тайна 1 секунды. Существует множество утилит вскрытия защищенного проекта - прменить не составит труда даже самому неопытному пользователю. Соответственно "защищать" код от "подсматривания" в него бессмымсленно. Другое дело защищать код от изменения - чтобы ты был уверен что в твои функции никто невлезет и "случайно" не исправит. Тут как уже говорилось - защита на уровне виндоус - доступ к директориям - это веьма надежно.
2. Соответственно даже если ты делаешь надстройку - ее можно скопировать - "поламать" - открыть модуль - и убить процедуры проверки любых паролей, соответственно нет смысла возлагать надежду на авторизацию доступа (то бишь шифрование, использование прав с помощью ini, и т.д. и т.п.).
3. Если нужна база данных то она не Excel. Лично я большой сторонник 1С.
4. Большинству и не нужно "ломать" твои процедуры - им нужно ими пользоваться, а тут я советую просто создать текстовый файлик (log) в который писать при помощи VBA: время запуска каким пользователем, с какого компьютера, каких процедур - чтобы тебе можно было смотреть динамику кто чем пользуется.
5. Реально даже если много людей работают за одним компьютером - а на Excel возлагаются хоть какие-то надежды по распределению доступа (что есть криво - но имеет право на жизнь - иначе ваще не писал бы это) - то ВАЖНО ЧТОБЫ ОНИ ИМЕЛИ КАЖДЫЙ СВОЙ ЛОГИН - НЕДОПУСТИМО РАБОТАТЬ ПОД ОДНИМ ЛОГИНОМ.
6. Так что даже если ты напишешь:UsersPwd_001="ПароЛЬиВаноВа" И даже зещифруешь не мудря XOR (с красивыми сдвигами) и в .ini у тебя никогда не будет паролей - а только хеши - все равно "ломать" будут VBA - зачем что-то подбирать.
7. Я лично использую .ini для разделения прав доступа, больше для того чтобы не засорять людям ненужными командами их рабочие панели инструментов. Понимая, что это не защита от тех кому "захочется"... И у меня все пользователи имеют свои логины!!!!!
8. Возможно налил воды - просто хотел поделиться некоторыми соображениями...а ваще ЛУЩШАЯ ЗАЩИТА - это постоянное обновление своей надстройки - ведь она у тебя будет живая - - постоянно появляются новые задачи и ты пишешь и снова дописываешь код ...
9. Вот так. INI у меня огранизован как:
[Права]
ФункцияДелатьЧтоТО=Иванов/Петров
ФункцияДелатьТОТО=Сидоров
[СпециальныеПрава]
РазрешитьВсе=МоеСетевоеИмя
ЗапретитьВсе=ЧерныйСписок
10. Вот так...
Ответить
|
Страница: 1 |
Поиск по форуму