Оглавление
1. Как настроить права доступа на отдельные столбцы в MySQL (MariaDB)
2. Как разрешить пользователю добавлять записи в колонку
3. Как разрешить пользователю просматривать записи в колонке
4. Как разрешить пользователю обновлять записи в колонке
5. Как разрешить пользователю создавать foreign key для колонки
6. Как назначить различные привилегии для разных колонок в одном запросе
7. Как разрешить пользователю передавать привилегии управления столбцами другому пользователю
8. Как проверить текущие привилегии пользователя
Как настроить права доступа на отдельные столбцы в MySQL (MariaDB)
Можно ли в MySQL (MariaDB) разрешить доступ пользователя только к определённым столбцам, которые принадлежат конкретной таблице в указанной базе данных? Можно ли настроить различные права доступа для столбцов таблиц в базах данных? Ответ на все эти вопросы — да, можно. Именно этому посвящена данная статья — настройке прав доступа к столбцам в MySQL (MariaDB).
В MySQL (MariaDB) права доступа можно настроить следующим образом:
- глобально (применяются ко всем базам данных и их содержимому)
- на уровне баз данных (применяются к указанным базам данных и их содержимому)
- на уровне таблиц (применяются к указанным таблицам и их содержимому)
- на уровне колонок (применяются к указанным колонкам и их содержимому)
Данная стать посвящена настройке доступа на уровне колонок в MySQL (MariaDB).
Все запросы в данной статье будут иметь следующий вид:
GRANT _PRIVILEGE_ (_COLUMN_) ON _TestDB_._TestTABLE_ TO '_USERNAME_'@'localhost';
В этом запросе:
- _PRIVILEGE_ — привилегия (право доступа), которую вы хотите предоставить пользователю. Одновременно можно указать несколько привилегий, в этом случае их нужно перечислить через запятую
- _COLUMN_ — колонка, для которой предоставляется привилегия. Обратите внимание, что колонки перечислены в скобках после привилегии
- _TestDB_ — база данных, в которой находится таблица с указанной колонкой, на которую вы хотите предоставить привилегии пользователю
- _TestTABLE_ — таблица, в которой находится колонка, на которую вы хотите предоставить привилегии пользователю
- _USERNAME_ — имя пользователя, которому предоставляются привилегии
Примечание: помните, что предоставление одной привилегии может повлечь за собой автоматическое предоставление других привилегий.
При предоставлении пользователю любой привилегии на колонку, содержащая её база данных становится видимой для пользователя при выполнении запроса
SHOW DATABASES;
Также при предоставлении любой привилегии пользователю по доступу или управлению колонкой, он может выполнять запросы с оператором «USE» в отношении базы данных, в которой находится таблица с этой колонкой.
Также предоставление привилегий на колонку разрешает использование запроса:
SHOW TABLES;
Но в этом случае будут показаны только таблицы, в которых имеются колонки, на которые пользователь имеет какие-либо привилегии.
Смотрите также:
- Как разрешить пользователю доступ только к определённым базам данных в MySQL (MariaDB)
- Как разрешить доступ пользователю только к определённым таблицам в MySQL (MariaDB)
Как разрешить пользователю добавлять записи в колонку
INSERT — разрешает пользователю вставлять новые данные в колонки.
Итак, чтобы разрешить пользователю _USERNAME_ вставлять новые записи в колонку _COLUMN_ таблицы _TestTABLE_ которая находится в базе данных _TestDB_ нужно выполнить следующий запрос:
GRANT INSERT (_COLUMN_) ON _TestDB_._TestTABLE_ TO '_USERNAME_'@'localhost';
Как разрешить пользователю просматривать записи в колонке
SELECT — разрешает пользователю читать записи в колонке.
Чтобы разрешить пользователю _USERNAME_ просматривать записи в колонке _COLUMN_ таблицы _TestTABLE_ базы данных _TestDB_ нужно выполнить следующий запрос:
GRANT SELECT (_COLUMN_) ON _TestDB_._TestTABLE_ TO '_USERNAME_'@'localhost';
Как разрешить пользователю обновлять записи в колонке
UPDATE — разрешает пользователю обновлять существующие строки указанной колонки.
Чтобы разрешить пользователю _USERNAME_ обновлять записи в колонке _COLUMN_ таблицы _TestTABLE_ которая находится в базе данных _TestDB_ нужно выполнить следующий запрос:
GRANT UPDATE (_COLUMN_) ON _TestDB_._TestTABLE_ TO '_USERNAME_'@'localhost';
Как разрешить пользователю создавать foreign key для колонки
REFERENCES — разрешает пользователю создавать foreign key.
Чтобы разрешить пользователю _USERNAME_ создавать foreign key для колонки _COLUMN_ таблицы _TestTABLE_ которая находится в базе данных _TestDB_ нужно выполнить следующий запрос:
GRANT REFERENCES (_COLUMN_) ON _TestDB_._TestTABLE_ TO '_USERNAME_'@'localhost';
Как назначить различные привилегии для разных колонок в одном запросе
Если вы хотите назначить разные привилегии для одной колонки, то после каждой привилегии в скобках нужно указывать колонку, даже если это одна и та же колонка. Сами привилегии перечисляются через запятую. Например:
GRANT INSERT (_COLUMN_), SELECT (_COLUMN_) ON _TestDB_._TestTABLE_ TO '_USERNAME_'@'localhost';
Если вы хотите назначить привилегию на управления несколькими колонками, то колонки также должны быть указаны в скобках и перечислены через запятую. Например:
GRANT INSERT (_COLUMN_), SELECT (_COLUMN_, _COLUMN2_) ON _TestDB_._TestTABLE_ TO '_USERNAME_'@'localhost';
К примеру, следующий запрос даёт привилегию INSERT на колонку test_column, а также даёт привилегию SELECT на колонки id и test_column:
GRANT INSERT (test_column), SELECT (id, test_column) ON TestDB.TestTABLE TO 'mial'@'localhost';
Как разрешить пользователю передавать привилегии управления столбцами другому пользователю
Если вы хотите дать пользователю возможность передавать его привилегии другим пользователям, то добавьте к запросу «WITH GRANT OPTION».
Например, следующий запрос даёт привилегию SELECT (просмотр) на столбец _COLUMN_ таблицы _TestTABLE_ в базе данных _TestDB_ пользователю _USERNAME_ с правом передачи любому другому пользователю:
GRANT SELECT (_COLUMN_) ON _TestDB_._TestTABLE_ TO '_USERNAME_'@'localhost'; WITH GRANT OPTION;
Как проверить текущие привилегии пользователя
Чтобы проверить, какими привилегиями на чтение и изменение баз данных, таблиц и колонок обладает пользователь выполните следующий запрос (замените _USERNAME_ на имя пользователя):
SHOW GRANTS FOR '_USERNAME_'@'localhost';
Связанные статьи:
- Ошибка при использовании выражений USE в MySQL (MariaDB): «ERROR 1044 (42000): Access denied for user» (РЕШЕНО) (100%)
- Как разрешить пользователю доступ только к определённым базам данных в MySQL (MariaDB) (100%)
- Как разрешить доступ пользователю только к определённым таблицам в MySQL (MariaDB) (100%)
- Как создать нового пользователя MySQL (MariaDB) и настроить его статус и права (100%)
- Ошибка «ERROR 1046 (3D000): No database selected» в MySQL и MariaDB (РЕШЕНО) (84.1%)
- Ошибка «ERROR 1143 (42000)»: command denied to user for column in table в MySQL (MariaDB) (РЕШЕНО) (RANDOM - 58.4%)