Модуль openpyxl
поддерживает защиту книги и рабочего листа от модификации. Для создания хешированных значений пароля используется алгоритм: open XML "Legacy Password Hash Algorithm", если явно не настроен другой алгоритм.
Предупреждение. Защита книги или листа паролем обеспечивает лишь базовый уровень безопасности. Данные не зашифрованы, поэтому их можно изменить с помощью свободно доступных инструментов. На самом деле спецификация гласит: "Защиту листа или элемента книги не следует путать с безопасностью файла. Он предназначен для защиты книги от непреднамеренных изменений и не может защитить ее от злонамеренных изменений".
Чтобы другие пользователи не могли просматривать скрытые рабочие листы, добавлять, перемещать, удалять или скрывать рабочие листы, а также переименовывать рабочие листы, можно защитить структуру своей рабочей книги паролем. Пароль можно установить с помощью свойства Workbook.security.workbookPassword
.
>>> wb.security.workbookPassword = '********' >>> wb.security.lockStructure = True
Аналогичным образом, удаление отслеживания изменений и истории изменений из общей книги можно предотвратить, установив другой пароль. Этот пароль можно установить с помощью Workbook.security.revisionsPassword
>>> wb.security.revisionsPassword = '********'
Другие свойства объекта openpyxl.workbook.protection.WorkbookProtection
точно определяют, какие ограничения действуют, но они будут применяться только в том случае, если установлен соответствующий пароль.
Предусмотрена специальная функция установки необработанного значения пароля, без использования алгоритма хеширования по умолчанию:
hashed_password = '.........' wb.security.set_workbook_password(hashed_password, already_hashed=True)
Различные аспекты рабочего листа также можно заблокировать, установив атрибуты в объекте openpyxl.worksheet.protection.SheetProtection
. В отличие от защиты рабочей книги, защиту листа можно включить с использованием пароля или без него. Защита листа включается с помощью атрибута WorkSheet.protection.sheet
или вызовом методов .enable()
или .disable()
:
>>> ws = wb.active >>> ws.protection.sheet = True >>> ws.protection.enable() >>> ws.protection.disable()
Если пароль не указан, то пользователи могут отключить настроенную защиту листа без указания пароля. В противном случае они должны предоставить пароль для изменения настроенной защиты. Пароль задается с помощью свойства WorkSheet.protection.password
.
>>> ws = wb.active >>> ws.protection.password = '...'