Можно ли ограничить доступ пользователя MySQL к просмотру определенных колонок в таблице?

В мануалах указано, что это возможно, но у меня возникают трудности. <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 только для определённых столбцов, он, тем не менее, не получил доступ к таблице в целом. В чем может быть проблема?
  • 22 января 2025 г. 2:33
Ответы на вопрос 3
Да, в 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 по умолчанию делает так и при входе в таблицу выдает некрасивую ошибку
Похожие вопросы