В мануалах указано, что это возможно, но у меня возникают трудности. <br/> Можете ли вы уточнить, возможно ли реализовать это таким образом? <br/> <br/> <pre><code class="sql">GRANT SELECT ON admin.users TO 'test'@'localhost'; REVOKE SELECT(email, phone) ON admin.users FROM 'test'@'localhost';</code></pre> <br/> <br/> Когда я предоставлял пользователю права SELECT только для определённых столбцов, он, тем не менее, не получил доступ к таблице в целом. В чем может быть проблема?
Да, в MySQL возможно ограничить доступ пользователя к определённым колонкам в таблице, но нужно понимать, как правильно настраивать права доступа. Ваша команда `GRANT` предоставляет пользователю `test` права на выборку из таблицы `admin.users`, однако команда `REVOKE` не будет работать так, как вы это ожидаете. В MySQL нельзя управлять правами доступа на уровне колонок через команды `GRANT` и `REVOKE` в том виде, в котором вы это делаете. Для предоставления доступа к определенным колонкам вам нужно использовать `GRANT` следующим образом: 1. Сначала предоставьте доступ к таблице без указания колонок (это необходимо). 2. Затем откажите доступ к определённым колонкам с помощью параметра `REVOKE`. Однако в MySQL может быть немного сложнее, так как нет встроенной поддержки для ограничения доступа к колонкам. Некоторые администраторы решают эту проблему, создав представления (views), в которых исключены чувствительные данные. Тогда пользователю можно предоставить доступ только к этому представлению. Вот пример подхода с использованием представления: 1. Создайте представление, которое включает только те колонки, доступ к которым вы хотите предоставить: ```sql CREATE VIEW admin.users_view AS SELECT id, name FROM admin.users; ``` 2. Затем предоставьте доступ пользователю к этому представлению: ```sql GRANT SELECT ON admin.users_view TO 'test'@'localhost'; ``` Теперь пользователь `test` сможет выполнять SELECT-запросы только к колонкам `id` и `name` в представлении `admin.users_view`, и не будет иметь доступа к другим колонкам в таблице `admin.users`. Таким образом, если вам необходимо ограничить доступ к определённым колонкам, рекомендуется использовать представления в качестве решения.
Может, попробовать через View ?
Создать view на таблицу, содержащий только доступные поля. На таблицу доступ не давать. На View дать полностью.
Вообщем можно, вопрос закрыт, делается как обычно через дать права и потом забрать, но нельзя использовать звездочки.
GRANT SELECT(_id, id, time, email, phone, data) ON test.users TO 'test'@'localhost'; REVOKE SELECT(phone,email) ON test.users FROM 'test'@'localhost';
Но, и делать select потом нельзя со звездочкой, phpmyadmin по умолчанию делает так и при входе в таблицу выдает некрасивую ошибку