Привилегия - SHOW VIEWнет SHOW_VIEW, но вам не нужно предоставлять ее пользователю, если вы не хотите, чтобы он мог работать с SHOW CREATE VIEWпредставлениями ... они могут выбирать из представлений с единственной SELECTпривилегией. Что вы имеете в виду под «сгруппировать все операции чтения в грант»?
Майкл - sqlbot
Если есть какая-либо одна привилегия, которая обозначает ВСЕ операции чтения в базе данных. Я понимаю, что они предоставляют мелкозернистый доступ, но удобная абстракция высокого уровня нам бы помогла.
Ajeet Ganga
Ответы:
167
Если есть какая-либо одна привилегия, которая обозначает ВСЕ операции чтения в базе данных.
Это зависит от того, как вы определяете «все читают».
«Чтение» из таблиц и представлений - это SELECTпривилегия. Если это то, что вы подразумеваете под "все прочитано", тогда да:
Однако, похоже, вы имеете в виду способность «все видеть», «смотреть, но не трогать». Итак, вот другие виды чтения, которые приходят на ум:
«Читать» определение взглядов - это SHOW VIEWпривилегия.
«Чтение» списка запросов, выполняемых в данный момент другими пользователями, является PROCESSпривилегией.
«Чтение» текущего состояния репликации является REPLICATION CLIENTпривилегией.
Обратите внимание, что любой из них или все они могут раскрыть больше информации, чем вы собираетесь раскрыть, в зависимости от характера рассматриваемого пользователя.
Если это то чтение, которое вы хотите сделать, вы можете объединить любые из них (или любые другие доступные привилегии ) в одном GRANTоператоре.
GRANTSELECT, SHOWVIEW, PROCESS, REPLICATIONCLIENTON *.* TO ...
Однако не существует единой привилегии, которая предоставляла бы некоторое подмножество других привилегий, о чем, похоже, вы спрашиваете.
Если вы делаете что-то вручную и ищете более простой способ сделать это без необходимости помнить точное разрешение, которое вы обычно предоставляете для определенного класса пользователей, вы можете найти оператор, чтобы восстановить сопоставимые гранты пользователя и изменить его. чтобы создать нового пользователя с аналогичными привилегиями:
Изменение not_leet и localhost для соответствия новому пользователю, которого вы хотите добавить, вместе с паролем, приведет к многократному использованию GRANTоператора для создания нового пользователя.
Кроме того, если вы хотите с помощью одной операции настроить и предоставить ограниченный набор привилегий пользователям и, возможно, удалить любые незаслуженные привилегии, это можно сделать, создав хранимую процедуру, которая инкапсулирует все, что вы хотите сделать. В теле процедуры вы должны построить GRANTоператор с помощью динамического SQL и / или напрямую управлять самими таблицами предоставления.
В этом недавнем вопросе об администраторах баз данных постер хотел, чтобы непривилегированный пользователь мог изменять других пользователей, что, конечно, не является чем-то, что обычно можно сделать - пользователь, который может изменять других пользователей, в значительной степени по определению не однако для непривилегированного пользователя хранимые процедуры предоставили хорошее решение в этом случае, потому что они запускаются с контекстом безопасности своего DEFINERпользователя, позволяя любому, кто имеет EXECUTEпривилегии в процедуре, временно принимать расширенные привилегии, чтобы позволить им делать определенные вещи процедура завершается.
Спасибо. Помимо отличного ответа мне также понравился ваш пароль. :)
Аджит Ганга
2
Стоит отметить: PROCESS и REPLICATION CLIENT являются «глобальными» типами привилегий, поэтому синтаксис завершится ошибкой при определении с исключением «для каждой базы данных». GRANT PROCESS ON mydb. * Будет недопустимым, но GRANT PROCESS ON *. * Будет в порядке.
Bee Kay
GRANT SELECT ON db_name. * TO 'demo' @ '%' WITH GRANT OPTION;
Различные разрешения, которые вы можете предоставить пользователю:
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 tocreatenewtablesordatabasesDROP- allows them to them todeletetablesordatabasesDELETE- allows them todeleterowsfromtablesINSERT- allows them toinsertrowsintotablesSELECT- allows them touse the Select command toreadthroughdatabasesUPDATE- allow them toupdatetablerowsGRANTOPTION- allows them tograntor remove other users' privileges
Чтобы предоставить конкретному пользователю разрешение, вы можете использовать эту структуру:
GRANT [typeof permission] ON [databasename].[tablename] TO ‘[username]’@'localhost’;
Эта команда дает пользователю доступ к базе данных только для чтения с локального хоста. Если вы знаете имя или IP-адрес хоста, на котором будет установлен сборщик, введите следующую команду:
grantselecton database_name.* to'read-only_user_name'@'host_name or IP_address'identifiedby'password';
Имя хоста должно быть разрешено DNS или файлом локальных хостов. В командной строке mysql введите следующую команду:
flushprivileges;
Тип quit.
Ниже приводится список примеров команд и подтверждающих сообщений:
Даже у пользователя есть ответ и @Michael - sqlbot в основном очень хорошо осветил в своем сообщении, но одного пункта не хватает, поэтому просто пытаюсь его осветить.
Если вы хотите предоставить разрешение на чтение простому пользователю (не как администратор) -
Примечание. Здесь требуется EXECUTE, чтобы пользователь мог читать данные, если есть хранимая процедура, которая создает отчет (имеет несколько операторов выбора).
Замените localhost на конкретный IP-адрес, с которого пользователь будет подключаться к БД.
Дополнительные разрешения на чтение:
ПОКАЗАТЬ ВИД: если вы хотите показать схему просмотра.
КЛИЕНТ РЕПЛИКАЦИИ: Если пользователю необходимо проверить статус репликации / ведомого устройства. Но нужно дать разрешение на всю БД.
ПРОЦЕСС: Если пользователю необходимо проверить запущенный процесс. Будет работать только со всей БД.
Это единственное решение, которое у меня сработало. Похоже, что другие решения, как вы сказали, устарели. Спасибо за предоставление этого обновленного решения.
Кайл Брайденстайн,
0
Если вы хотите, чтобы представление было доступно для чтения только после предоставления разрешения на чтение, вы можете использовать ALGORITHM = TEMPTABLE при просмотре определения DDL.
SHOW VIEW
нетSHOW_VIEW
, но вам не нужно предоставлять ее пользователю, если вы не хотите, чтобы он мог работать сSHOW CREATE VIEW
представлениями ... они могут выбирать из представлений с единственнойSELECT
привилегией. Что вы имеете в виду под «сгруппировать все операции чтения в грант»?Ответы:
Это зависит от того, как вы определяете «все читают».
«Чтение» из таблиц и представлений - это
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 и войдите в систему как администратор, введя следующую команду:
Введите пароль для учетной записи 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.
источник