MySql: предоставить опции только для чтения?
У меня есть пользователь, которому я хочу предоставить все права на чтение схемы БД.
один из способов-это :
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
есть ли способ сгруппировать все операции чтения в grant ?
6 ответов:
если есть какая-либо одна привилегия, которая означает все операции чтения в базе данных.
это зависит от того, как вы определяете "все читали."
"чтение" таблиц и представлений является
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
заявление для создания нового пользователя.Of, если вы хотите, чтобы одна операция настроила и предоставила ограниченный набор привилегий пользователям и, возможно, удалила любые незаслуженные привилегии, это можно сделать, создав сохраненный процедура, которая инкапсулирует все, что вы хотите сделать. В теле процедуры, вы бы построить
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
чтобы предоставить конкретному пользователю разрешение, вы можете использовать эту структуру:
субсидия [разрешения] на [имя базы данных].[имя таблицы] в ‘[имя пользователя] ' @ ' 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 или локальным файлом hosts. В командной строке mysql введите следующая команда:
flush privileges;
тип
quit
.ниже приведен список примеров команд и сообщений подтверждение:
mysql> grant select on dbname.* to 'readonlyuser'@'%' identified by 'pogo'; 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';
Примечание: здесь требуется выполнить, чтобы пользователь мог читать данные, если есть хранимая процедура, которая создает отчет (есть несколько операторов select).
заменить localhost на определенный IP от какой пользователь будет подключаться к БД.
дополнительные разрешения на чтение-
- показать представление: если вы хотите показать схему представления.
- клиент репликации: если пользователю необходимо проверить состояние репликации/ведомого устройства. Но нужно дать разрешение на все БД.
- процесс: если потребителю нужно проверить идущий процесс. Будем работать со всеми Только БД.