Read-only для некоторых пользователей

Автор rogi, 10 апреля 2024, 10:31

0 Пользователи и 1 гость просматривают эту тему.

rogi

Всем привет!
Я когда-то сделал маленькую базу данных HSQLDB, откуда берутся данные для расчётов в Calc.
Подключил её в многопользовательском режиме внутри нашей локальной сетки.
Всё нормально работает. Но все пользователи имеют равную возможность по доступу, в том числе для редактирования данных этой базы.
Как можно ограничить права для некоторых?
Роюсь сейчас на https://hsqldb.org, но пока ничего подходящего не нашёл :(

sokol92

Это подробно описано в разделе "Chapter 8. Access Control" документации по Вашей ссылке.
Владимир.

economist

Редко, но бывает что хватает полумер:
- флаг ReadOnly на файле ODB (Запросы работают, Insert/Update/Delete - проверяйте, зависит от движка)
- Basic макрос при открытии с If Environ("USERNAME") = "sveta" then DBReadOnly=True Результат можно использовать в коде, который что-то меняет или не дает что-то менять.

Но лучше, конечно, модель безопасности на основе Ролей. Если строки из таблиц должны быть видны не всем и не целиком, то тогда и Ролей м.б. недостаточно. Тогда кого-то стоит вообще не пускать в Базу ODB, а дать Отчеты, например, в web, где появляется жирная прослойка с кучей простых и дюже эффективных методов по запрету и шифрованию, изобретать которые самому неподъемно.
   
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

rogi

Цитата: sokol92 от 10 апреля 2024, 14:20Это подробно описано в разделе "Chapter 8. Access Control" документации по Вашей ссылке.
Чувствую себя тупым, но прочитав этот раздел, я так и не нашёл решения своей проблемы  :(
Там везде рассказывается, как управлять пользователями и их ролями. Но мне непонятно, как менять уровни доступа этих ролей.
То есть, например, создал я роль "capibara" и назначил на эту роль нескольких пользователей. А как сделать для этой роли разрешение "read-only" для всех таблиц?

sokol92

#4
Примеры приведены в разделе "Simple Access Control" документации.
Вот один из них:
GRANT SELECT ON ALL TABLES IN SCHEMA mySchema TO auditUserТут пользователю auditUser разрешается выбирать данные из всех таблиц схемы mySchema. Замените auditUser на название соответствующей роли.
Для права на изменения данных нужны привилегии, отличные от SELECT, а именно UPDATE, INSERT, DELETE.

Все привилегии сразу (на изменение данных и на чтение) можно выдать с помощью конструкции GRANT ALL.

HSQLDB имеет развитую систему привилегий, включая возможность задания привилегий для отдельных столбцов таблицы.
Владимир.

rogi

Теперь я нашёл свой затык :o
почему-то если использовать аргумент ALL TABLES возвращается ошибка:
"Unexpected token: ALL in statement [GRANT SELECT ON ALL]"
Если же указать конкретное имя одной таблицы - всё срабатывает.

sokol92

Цитата: rogi от 15 апреля 2024, 06:47почему-то если использовать аргумент ALL TABLES возвращается ошибка
Возможно, версия Вашей базы данных отлична от версии указанной выше документации.
Владимир.