Как предоставить привилегию «только вставка» для роли в Кассандре? - PullRequest
2 голосов
/ 04 июня 2019

Я создаю пространство ключей в Cassandra, и я хотел бы предоставить различные разрешения, такие как Только вставка и обновление, Только удаление и т. Д. Кассандра предоставляет привилегию MODIFY в целом. Но я не смог найти никаких ресурсов относительно того, как это можно сделать, чтобы удовлетворить мои требования.

На данный момент, например, если роль «клерк» может только вставить, я планирую предоставить привилегию MODIFY «клерку» и написать триггер, чтобы избежать удаления из этой роли.

Это похоже на обходной тур. Это хороший способ? Можно ли сделать это лучше или проще?

1 Ответ

1 голос
/ 04 июня 2019

Есть фундаментальная причина, почему это невозможно.Одна из претензий на известность Кассандры - ее очень эффективные записи, даже на медленно вращающихся дисках.Это достигается тем, что записывает просто пишет в смежные файлы на диске - без предварительного чтения предыдущей версии данных.Одним из последствий этого является то, что в Cassandra операции INSERT и UPDATE абсолютно одинаковы (на самом деле есть одно различие в отношении пустых строк, но это не интересно для этого обсуждения).Обе операции могут создать новый элемент, или , изменить существующий элемент, и Кассандра не узнает, что именно во время записи, - это выяснит это гораздо позже, в то время как сжатие * 1004.* старые и новые данные вместе.

В частности, это означает, что вы не можете иметь отдельные разрешения для добавлять новые данные против изменять существующие данные , потому что во времяПисать Кассандра не может выяснить, есть ли уже существующие данные или нет, не жертвуя при этом производительностью.Помимо производительности, существует также вопрос правильности в распределенной настройке - что вы ожидаете, если два клиента одновременно будут записывать новые данные в одну строку, и обоим разрешено только записывать новые данные, но не перезаписывать старые данные?

По той же причине также довольно бессмысленно иметь отдельные разрешения для операции DELETE для строк или разделов.Дело в том, что можно также удалить данные с помощью операций UPDATE или INSERT: можно обновить данные до нуля, или обновить их, чтобы иметь TTL (время истечения) 0, или перезаписать данные другими данными.Поэтому запрещение только самой операции «УДАЛИТЬ» вряд ли является защитой от чего-либо.

...