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 от какой пользователь будет подключаться к БД.
дополнительные разрешения на чтение-
- показать представление: если вы хотите показать схему представления.
- клиент репликации: если пользователю необходимо проверить состояние репликации/ведомого устройства. Но нужно дать разрешение на все БД.
- процесс: если потребителю нужно проверить идущий процесс. Будем работать со всеми Только БД.