У меня есть пользователь, которому я хочу предоставить все права 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
привилегией. Что вы имеете в виду под «сгруппировать все операции чтения в грант»?