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 запросы будет сложно.