У мене є користувач, якому я хочу надати всі дозволи на читання на схемі db.
Один із способів такий:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
Чи є спосіб групувати всі операції з читання в гранті?
У мене є користувач, якому я хочу надати всі дозволи на читання на схемі 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
Введіть пароль для кореневого облікового запису. У запиті 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';
Примітка: ВИКОНАННЯ тут потрібно, щоб користувач міг читати дані, якщо є збережена процедура, яка створює звіт (має декілька вибраних операторів).
Замініть localhost конкретним IP-адресою, з якої користувач підключиться до БД.
Додаткові дозволи на читання -
Якщо ви хочете, щоб подання читалося лише після надання дозволу на читання, ви можете використовувати ALGORITHM = TEMPTABLE у визначенні DDL визначення.
Примітка для MySQL 8 це інше
Це потрібно зробити в два етапи:
CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'some_strong_password';
GRANT SELECT, SHOW VIEW ON *.* TO 'readonly_user'@'localhost';
flush privileges;
SHOW VIEW
, ніSHOW_VIEW
, але вам не потрібно надавати це користувачеві, якщо ви не хочете, щоб вони мали змогуSHOW CREATE VIEW
переглядати перегляди ... вони можуть вибирати з представлень єдинийSELECT
привілей. Що ви маєте на увазі під "згрупувати всі операції читання в грант"?