Подтвердить что ты не робот

Предоставить пользователю доступ к ограниченному числу таблиц в MySQL

Я запускаю некоторые тесты, и я пытаюсь выяснить, могу ли я создать пользователя с доступом только к 1 или 2 таблицам в моем db. Кто-нибудь знает, как это делается? Мой код ниже не работает:

GRANT SELECT ON testdb.fruits, testdb.sports TO [email protected] IDENTIFIED BY 'pass';

Ошибка говорит, что у меня ошибка в синтаксисе.

4b9b3361

Ответ 1

Запустите их как два отдельных оператора GRANT:

GRANT SELECT ON testdb.fruits TO [email protected] IDENTIFIED BY 'pass';
GRANT SELECT ON testdb.sports TO [email protected] IDENTIFIED BY 'pass';

Синтаксис MySQL GRANT разрешает только один объект в позиции priv_level: хотя он может использовать * в качестве подстановочного знака:

GRANT
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user_specification [, user_specification] ...
    [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
    [WITH with_option ...]

object_type:
    TABLE
  | FUNCTION
  | PROCEDURE

priv_level:
    *
  | *.*
  | db_name.*
  | db_name.tbl_name
  | tbl_name
  | db_name.routine_name

Часть ниже не работает на MySQL 5.5. Как "вычесть" привилегии в MySQL объясняет почему.

Чтобы предоставить SELECT на всех таблицах, затем выборочно отменить, вы можете сделать:

GRANT SELECT ON testdb.* TO [email protected] IDENTIFIED BY 'pass';
REVOKE ALL PRIVILEGES ON testdb.tblname FROM [email protected];

Это, кажется, нечетный метод, хотя, и я думаю, что я буду отдельно GRANT, а не отдельно REVOKE. Забастовкa >

Ответ 2

Вы можете напрямую использовать таблицу mysql.tables_priv:

INSERT INTO mysql.tables_priv (`Host`, `Db`, `User`, `Table_name`, `Grantor`, `Table_priv`)
VALUES
('%', DATABASE(), 'someuser', 'mytable1', CURRENT_USER, 'Select,Insert,Update,Delete'),
('%', DATABASE(), 'someuser', 'mytable2', CURRENT_USER, 'Select,Insert,Update,Delete')

После ручного обновления этих таблиц вам нужно будет явно запустить запрос FLUSH PRIVILEGES, чтобы сообщить MySQL об обновлении кеша разрешений (не требуется при использовании GRANT)