@evilelf
Тупой, руки из жопы, кодю за зп и т.п. и т.д.

Как в yii 1.1.16 заблокировать таблицу mysql на чтение и запись?

Как в yii 1.1.16 заблокировать таблицу mysql на чтение и запись?

движок: innobd
  • Вопрос задан
  • 373 просмотра
Пригласить эксперта
Ответы на вопрос 3
@dmitryKovalskiy
программист средней руки
Постановка вашего вопроса слегка пугает. Такие вопросы решаются задолго до backend-а. Выдачей и отзывом прав на таблицы. Читайте документацию по MySQL в разделе синтаксиса запроса GRANT
Ответ написан
copist
@copist
Empower people to give
1. Права на запись пользовалем MySQL
REVOKE *.* ON <database>.<table> FROM <username>@localhost;
GRANT SELECT, REFERENCE ON <database>.<table> TO <username-readonly>@localhost; -- только SELECT c JOIN

Из Yii подключаешься к базе пользователем <username-readonly>. Такой способ запретит создавать/изменять/удалять записи таблиц, на которые не были выданы права через GRANT пользователю <username-readonly>
Не очень гибко. Админ наверное хотел бы писать во все таблицы.

2. Права текущего пользователя Yii через ACL или RBAC
www.yiiframework.com/wiki/346/acl-and-rbac
Не очень надёжно. Можно забыть про проверку в каком-нибудь месте.

3. Можно поковыряться с CActiveRecord или CMysqlCommandBuilder, чтобы на запросы, содержащие INSERT/UPDATE/DELETE в некоторые таблицы выдавался false или бросалось исключение, если текущий пользователь - не админ.
Уже лучше, но парсить SQL запросы будет сложно.
Ответ написан
@evilelf Автор вопроса
Тупой, руки из жопы, кодю за зп и т.п. и т.д.
Вангуя большое наличие "умников" выше, склоняюсь к этому варианту.
Yii::app()->db->createCommand('LOCK TABLES table READ, table AS t WRITE');
....
Yii::app()->db->createCommand('UNLOCK TABLES');
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы