Mam użytkownika, któremu chcę udzielić wszystkich uprawnień do odczytu w schemacie bazy danych.
Oto jeden sposób:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
Czy istnieje sposób na pogrupowanie wszystkich operacji odczytu w grant?
Mam użytkownika, któremu chcę udzielić wszystkich uprawnień do odczytu w schemacie bazy danych.
Oto jeden sposób:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
Czy istnieje sposób na pogrupowanie wszystkich operacji odczytu w grant?
Odpowiedzi:
Jeśli istnieje jedno uprawnienie, które oznacza wszystkie operacje odczytu w bazie danych.
To zależy od tego, jak zdefiniujesz „wszystko przeczytane”.
„Czytanie” z tabel i widoków to SELECT
przywilej. Jeśli to właśnie masz na myśli, mówiąc „wszystko przeczytane”, to tak:
GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';
Jednak brzmi to tak, jakbyś miał na myśli zdolność „widzenia” wszystkiego, „patrzenia, ale nie dotykania”. Oto inne rodzaje czytania, które przychodzą mi do głowy:
„Czytanie” definicji poglądów jest SHOW VIEW
przywilejem.
PROCESS
Przywilejem jest „czytanie” listy aktualnie wykonywanych zapytań przez innych użytkowników .
REPLICATION CLIENT
Przywilejem jest „Odczytywanie” bieżącego stanu replikacji .
Zwróć uwagę, że niektóre lub wszystkie z nich mogą ujawnić więcej informacji niż zamierzasz ujawnić, w zależności od charakteru danego użytkownika.
Jeśli chcesz tego dokonać, możesz połączyć dowolne z tych (lub inne dostępne uprawnienia ) w jednej GRANT
instrukcji.
GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...
Jednak nie ma jednego przywileju, który przyznaje podzbiór innych uprawnień, a to brzmi tak, jakbyś o to prosił.
Jeśli robisz rzeczy ręcznie i szukasz łatwiejszego sposobu, aby to zrobić, bez konieczności pamiętania dokładnego dotacji, którą zwykle udzielasz dla określonej klasy użytkowników, możesz sprawdzić instrukcję, aby ponownie wygenerować dotacje dla porównywalnego użytkownika i zmienić ją aby utworzyć nowego użytkownika z podobnymi uprawnieniami:
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)
Zmiana „not_leet” i „localhost” w celu dopasowania do nowego użytkownika, którego chcesz dodać, wraz z hasłem, spowoduje utworzenie GRANT
instrukcji wielokrotnego użytku w celu utworzenia nowego użytkownika.
Jeśli chcesz, aby pojedyncza operacja skonfigurowała i przyznała ograniczony zestaw uprawnień użytkownikom, a może usunąć wszelkie niezasłużone uprawnienia, możesz to zrobić, tworząc procedurę składowaną, która zawiera wszystko, co chcesz zrobić. W treści procedury budowałbyś GRANT
instrukcję z dynamicznym SQL i / lub bezpośrednio manipulowałbyś tabelami grantów.
W ostatnim pytaniu dotyczącym administratorów baz danych , plakat chciał mieć możliwość modyfikowania innych użytkowników przez nieuprzywilejowanego użytkownika, co oczywiście nie jest czymś, co normalnie można zrobić - użytkownik, który może modyfikować innych użytkowników, jest, prawie z definicji, nie nieuprzywilejowany użytkownik - jednak - procedury składowane stanowiły dobre rozwiązanie w tym przypadku, ponieważ działają w kontekście bezpieczeństwa ich DEFINER
użytkownika, umożliwiając każdemu, kto ma EXECUTE
uprawnienia do procedury, tymczasowe przyjęcie eskalowanych uprawnień, aby umożliwić im wykonywanie określonych czynności procedura zakończona.
GRANT SELECT ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Spowoduje to utworzenie użytkownika z SELECT
uprawnieniami do całej bazy danych, w tym widoków.
Różne uprawnienia, które możesz przyznać użytkownikowi to
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
Aby nadać konkretnemu użytkownikowi uprawnienia, możesz użyć tej struktury:
GRANT [type of permission] ON [database name].[table name] TO ‘[username]’@'localhost’;
Uważam, że ten artykuł jest bardzo pomocny
Przewodnik krok po kroku, który znalazłem tutaj .
Aby utworzyć konto użytkownika bazy danych tylko do odczytu dla MySQL
W wierszu poleceń systemu UNIX uruchom program wiersza poleceń MySQL i zaloguj się jako administrator, wpisując następujące polecenie:
mysql -u root -p
Wpisz hasło do konta root. W wierszu polecenia mysql wykonaj jedną z następujących czynności:
Aby dać użytkownikowi dostęp do bazy danych z dowolnego hosta, wpisz następujące polecenie:
grant select on database_name.* to 'read-only_user_name'@'%' identified by 'password';
Jeśli kolektor zostanie zainstalowany na tym samym hoście co baza danych, wpisz następujące polecenie:
grant select on database_name.* to 'read-only_user_name' identified by 'password';
To polecenie zapewnia użytkownikowi dostęp tylko do odczytu do bazy danych z lokalnego hosta. Jeśli znasz nazwę hosta lub adres IP hosta, na którym zostanie zainstalowany moduł zbierający, wpisz następujące polecenie:
grant select on database_name.* to 'read-only_user_name'@'host_name or IP_address' identified by 'password';
Nazwa hosta musi być rozpoznawalna przez DNS lub przez lokalny plik hostów. W wierszu polecenia mysql wpisz następujące polecenie:
flush privileges;
Wpisz quit
.
Poniżej znajduje się lista przykładowych poleceń i komunikatów potwierdzających:
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
Nawet użytkownik dostał odpowiedź, a @Michael - sqlbot bardzo dobrze opisał większość punktów w swoim poście, ale brakuje jednego punktu, więc po prostu próbuję go opisać.
Jeśli chcesz przyznać uprawnienia do odczytu prostemu użytkownikowi (nie w rodzaju administratora) -
GRANT SELECT, EXECUTE ON DB_NAME.* TO 'user'@'localhost' IDENTIFIED BY 'PASSWORD';
Uwaga: tutaj wymagane jest wykonanie EXECUTE, aby użytkownik mógł odczytać dane, jeśli istnieje procedura składowana, która generuje raport (ma kilka instrukcji wyboru).
Zastąp localhost konkretnym adresem IP, z którego użytkownik będzie łączył się z DB.
Dodatkowe uprawnienia do odczytu to:
Uwaga dotycząca MySQL 8 jest inna
Musisz to zrobić w dwóch krokach:
CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'some_strong_password';
GRANT SELECT, SHOW VIEW ON *.* TO 'readonly_user'@'localhost';
flush privileges;
Jeśli chcesz, aby widok był tylko do odczytu po udzieleniu uprawnień do odczytu, możesz użyć ALGORITHM = TEMPTABLE w definicji DDL widoku.
SHOW VIEW
nie jestSHOW_VIEW
, ale nie musisz nadawać tego użytkownikowi, chyba że chcesz, aby mógłSHOW CREATE VIEW
on mieć dostęp do widoków ... może wybierać spośród widoków z jedynymSELECT
uprawnieniem. Co rozumiesz przez „zgrupuj wszystkie operacje odczytu w przyznaniu”?