У меня есть пользователь, которому я хочу предоставить все права READ для схемы db.
Один из способов это:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
Есть ли способ сгруппировать все операции чтения в гранте?
У меня есть пользователь, которому я хочу предоставить все права READ для схемы db.
Один из способов это:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
Есть ли способ сгруппировать все операции чтения в гранте?
Ответы:
Если есть какая-либо одна привилегия, которая обозначает ВСЕ операции чтения в базе данных.
Это зависит от того, как вы определяете «все читают».
«Чтение» из таблиц и представлений - это 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 not_leet@localhost |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Изменение not_leet и localhost для соответствия новому пользователю, которого вы хотите добавить, вместе с паролем, приведет к многократному использованию GRANTоператора для создания нового пользователя.
Кроме того, если вы хотите с помощью одной операции настроить и предоставить ограниченный набор привилегий пользователям и, возможно, удалить любые незаслуженные привилегии, это можно сделать, создав хранимую процедуру, которая инкапсулирует все, что вы хотите сделать. В теле процедуры вы должны построить GRANTоператор с помощью динамического SQL и / или напрямую управлять самими таблицами предоставления.
В этом недавнем вопросе об администраторах баз данных постер хотел, чтобы непривилегированный пользователь мог изменять других пользователей, что, конечно, не является чем-то, что обычно можно сделать - пользователь, который может изменять других пользователей, в значительной степени по определению не однако для непривилегированного пользователя хранимые процедуры предоставили хорошее решение в этом случае, потому что они запускаются с контекстом безопасности своего DEFINERпользователя, позволяя любому, кто имеет EXECUTEпривилегии в процедуре, временно принимать расширенные привилегии, чтобы позволить им делать определенные вещи процедура завершается.
GRANT SELECT ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Это создаст пользователя с SELECTпривилегиями для всей базы данных, включая представления.
Различные разрешения, которые вы можете предоставить пользователю:
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’;
Я нашел эту статью очень полезной
Пошаговое руководство я нашел здесь .
Чтобы создать учетную запись пользователя базы данных только для чтения для 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
Даже у пользователя есть ответ и @Michael - sqlbot в основном очень хорошо осветил в своем сообщении, но одного пункта не хватает, поэтому просто пытаюсь его осветить.
Если вы хотите предоставить разрешение на чтение простому пользователю (не как администратор) -
GRANT SELECT, EXECUTE ON DB_NAME.* TO 'user'@'localhost' IDENTIFIED BY 'PASSWORD';
Примечание. Здесь требуется EXECUTE, чтобы пользователь мог читать данные, если есть хранимая процедура, которая создает отчет (имеет несколько операторов выбора).
Замените localhost на конкретный IP-адрес, с которого пользователь будет подключаться к БД.
Дополнительные разрешения на чтение:
Примечание для MySQL 8 это другое
Сделать это нужно в два этапа:
CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'some_strong_password';
GRANT SELECT, SHOW VIEW ON *.* TO 'readonly_user'@'localhost';
flush privileges;
Если вы хотите, чтобы представление было доступно для чтения только после предоставления разрешения на чтение, вы можете использовать ALGORITHM = TEMPTABLE при просмотре определения DDL.
SHOW VIEWнетSHOW_VIEW, но вам не нужно предоставлять ее пользователю, если вы не хотите, чтобы он мог работать сSHOW CREATE VIEWпредставлениями ... они могут выбирать из представлений с единственнойSELECTпривилегией. Что вы имеете в виду под «сгруппировать все операции чтения в грант»?