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

MySql: доступны только для чтения?

У меня есть пользователь, которому я хочу предоставить все READ-разрешения для схемы db.

Один из способов:

GRANT SELECT, SHOW_VIEW  ON test.* TO 'readuser'@'%';

Есть ли способ группировать все операции чтения в гранте?

4b9b3361

Ответ 1

Если есть какая-либо единственная привилегия, которая обозначает ВСЕ операции READ в базе данных.

Это зависит от того, как вы определяете "все прочитанные".

"Чтение" из таблиц и представлений - это привилегия SELECT. Если это то, что вы подразумеваете под "всем прочитанным", тогда да:

GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';

Однако, похоже, вы имеете в виду способность "видеть" все, "смотреть, но не трогать". Итак, вот другие виды чтения, которые приходят на ум:

"Чтение" определения представлений - это привилегия SHOW VIEW.

"Чтение" списка выполняемых в настоящее время запросов другими пользователями - это привилегия PROCESS.

"Чтение" текущего состояния репликации является привилегией REPLICATION CLIENT.

Обратите внимание, что любой или все из них могут отображать больше информации, чем вы собираетесь выставлять, в зависимости от характера данного пользователя.

Если это чтение вы хотите сделать, вы можете объединить любой из них (или любой другой доступные привилегии) в одном GRANT.

GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...

Однако нет единой привилегии, которая предоставляет некоторое подмножество других привилегий, что и похоже на то, что вы просите.

Если вы делаете что-то вручную и ищете более простой способ обойти это без необходимости помнить точный грант, который вы обычно делаете для определенного класса пользователей, вы можете найти выражение для восстановления сопоставимых пользовательских грантов и измените его, чтобы создать нового пользователя с аналогичными привилегиями:

mysql> SHOW GRANTS FOR 'not_leet'@'localhost';
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                                      |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Изменение "not_leet" и "localhost" в соответствии с новым пользователем, которое вы хотите добавить вместе с паролем, приведет к повторному использованию инструкции GRANT для создания нового пользователя.

Of, если вы хотите, чтобы одна операция настраивала и предоставляла ограниченный набор привилегий для пользователей и, возможно, удаляла любые незаслуженные привилегии, это можно сделать, создав хранимая процедура, которая инкапсулирует все, что вы хотите сделать. Внутри процедуры процедуры вы должны построить инструкцию GRANT с динамическим SQL и/или непосредственно манипулировать самими таблицами предоставления.

В этом недавнем вопросе о администраторах баз данных плакат хотел, чтобы непривилегированный пользователь мог изменять других пользователей, что, конечно же, не является чем-то, что обычно можно сделать - пользователь, который может модифицировать других пользователей, в значительной степени по определению, а не непривилегированный пользователь, - однако - хранимые процедуры обеспечили хорошее решение в этом случае, поскольку они выполняются с контекстом безопасности их пользователя DEFINER, что позволяет кто-либо с привилегией EXECUTE в процедуре, чтобы временно принять эскалированные привилегии, чтобы позволить им выполнять конкретные действия, выполняемые процедурой.

Ответ 2

GRANT SELECT ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Это создаст пользователя с привилегией SELECT для всей базы данных, включая Views.

Ответ 3

Различные разрешения, которые вы можете предоставить пользователю:

ALL PRIVILEGES- This would allow a MySQL user all access to a designated database (or if no database is selected, across the system)
CREATE- allows them to create new tables or databases
DROP- allows them to them to delete tables or databases
DELETE- allows them to delete rows from tables
INSERT- allows them to insert rows into tables
SELECT- allows them to use the Select command to read through databases
UPDATE- allow them to update table rows
GRANT OPTION- allows them to grant or remove other users' privileges

Чтобы предоставить конкретному пользователю разрешение, вы можете использовать эту платформу:

GRANT [type of permission] ON [database name].[table name] TO ‘[username]@'localhost;

Я нашел эту статью очень полезной

Ответ 4

Пошаговое руководство я нашел здесь.

Чтобы создать учетную запись пользователя базы данных только для чтения для MySQL

В командной строке UNIX запустите программу командной строки MySQL и войдите в систему как администратор, введя следующую команду:

mysql -u root -p

Введите пароль для учетной записи root. В командной строке mysql выполните одно из следующих действий:

Чтобы предоставить пользователю доступ к базе данных с любого хоста, введите следующую команду:

grant select on database_name.* to 'read-only_user_name'@'%' identified by 'password';

Если сборщик будет установлен на том же хосте, что и база данных, введите следующую команду:

grant select on database_name.* to 'read-only_user_name' identified by 'password';

Эта команда дает пользователю доступ только для чтения к базе данных только с локального хоста. Если вы знаете имя хоста или IP-адрес хоста, на котором будет установлен сборщик, введите следующую команду:

grant select on database_name.* to 'read-only_user_name'@'host_name or IP_address' identified by 'password';

Имя хоста должно быть разрешено DNS или файлом локальных хостов. В командной строке mysql введите следующую команду:

flush privileges;

Введите quit.

Ниже приведен список примеров команд и подтверждающих сообщений:

mysql> grant select on dbname.* to 'readonlyuser'@'%' identified 
by 'pogo$23';
Query OK, 0 rows affected (0.11 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit

Ответ 5

Даже у пользователя есть ответ, а @Michael - sqlbot почти полностью набрал очки в своем посте, но один пункт отсутствует, поэтому просто пытаюсь его покрыть.

Если вы хотите предоставить разрешение на чтение для простого пользователя (не для администратора) -

GRANT SELECT, EXECUTE ON DB_NAME.* TO 'user'@'localhost' IDENTIFIED BY 'PASSWORD';

Примечание: здесь требуется EXECUTE, чтобы пользователь мог читать данные, если есть хранимая процедура, которая создает отчет (имеет несколько операторов выбора).

Замените localhost на определенный IP-адрес, с которого пользователь подключится к DB.

Дополнительные разрешения для чтения -

  • SHOW VIEW: Если вы хотите показать схему отображения.
  • REPLICATION CLIENT: Если пользователю необходимо проверить статус репликации/подчиненного устройства. Но нужно давать разрешение на все БД.
  • ПРОЦЕСС: Если пользователю необходимо проверить текущий процесс. Будет работать со всеми Только DB.

Ответ 6

Если вы хотите, чтобы представление читалось только после предоставления разрешения на чтение, вы можете использовать ALGORITHM = TEMPTABLE в представлении определения DDL.

Ответ 7

Примечание для MySQL 8 это разные

Вам нужно сделать это в два этапа:

CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'some_strong_password';
GRANT SELECT, SHOW VIEW ON *.* TO 'readonly_user'@'localhost';
flush privileges;