To uprawnienie SHOW VIEWnie jest SHOW_VIEW, ale nie musisz nadawać tego użytkownikowi, chyba że chcesz, aby mógł SHOW CREATE VIEWon mieć dostęp do widoków ... może wybierać spośród widoków z jedynym SELECTuprawnieniem. Co rozumiesz przez „zgrupuj wszystkie operacje odczytu w przyznaniu”?
Michael - sqlbot
Jeśli istnieje jedno uprawnienie, które oznacza wszystkie operacje odczytu w bazie danych. Rozumiem, że zapewniają precyzyjny dostęp, ale wygodna abstrakcja na wysokim poziomie pomogłaby nam.
Ajeet Ganga
Odpowiedzi:
165
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 SELECTprzywilej. Jeśli to właśnie masz na myśli, mówiąc „wszystko przeczytane”, to tak:
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 VIEWprzywilejem.
PROCESSPrzywilejem jest „czytanie” listy aktualnie wykonywanych zapytań przez innych użytkowników .
REPLICATION CLIENTPrzywilejem 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 GRANTinstrukcji.
GRANTSELECT, SHOWVIEW, PROCESS, REPLICATIONCLIENTON *.* 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:
Zmiana „not_leet” i „localhost” w celu dopasowania do nowego użytkownika, którego chcesz dodać, wraz z hasłem, spowoduje utworzenie GRANTinstrukcji 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ś GRANTinstrukcję 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 DEFINERużytkownika, umożliwiając każdemu, kto ma EXECUTEuprawnienia do procedury, tymczasowe przyjęcie eskalowanych uprawnień, aby umożliwić im wykonywanie określonych czynności procedura zakończona.
Dzięki. Oprócz świetnej odpowiedzi spodobało mi się również Twoje hasło. :)
Ajeet Ganga
2
Warto zauważyć: KLIENT PROCESOWY i KLIENT REPLIKACJI są „globalnymi” typami uprawnień, więc składnia nie powiedzie się, gdy zostanie zdefiniowana z wykluczeniem „na bazę danych”. GRANT PROCESS ON mydb. * Byłoby nieprawidłowe, ale GRANT PROCESS ON *. * Byłoby OK.
Bee Kay
GRANT SELECT ON db_name. * TO 'demo' @ '%' Z opcją GRANT;
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 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
Aby nadać konkretnemu użytkownikowi uprawnienia, możesz użyć tej struktury:
GRANT [typeof permission] ON [databasename].[tablename] TO ‘[username]’@'localhost’;
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:
grantselecton database_name.* to'read-only_user_name'@'host_name or IP_address'identifiedby'password';
Nazwa hosta musi być rozpoznawalna przez DNS lub przez lokalny plik hostów. W wierszu polecenia mysql wpisz następujące polecenie:
flushprivileges;
Wpisz quit.
Poniżej znajduje się lista przykładowych poleceń i komunikatów potwierdzających:
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) -
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:
POKAŻ WIDOK: Jeśli chcesz pokazać schemat widoku.
KLIENT REPLIKACJI: Jeśli użytkownik musi sprawdzić status replikacji / slave. Ale trzeba dać pozwolenie na wszystkie DB.
PROCES: Jeśli użytkownik chce sprawdzić działający proces. Działa tylko ze wszystkimi DB.
To jedyne rozwiązanie, które u mnie zadziałało. Wygląda na to, że inne rozwiązania są przestarzałe, jak powiedziałeś. Dziękujemy za udostępnienie tego zaktualizowanego rozwiązania.
Kyle Bridenstine
0
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”?Odpowiedzi:
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 maEXECUTE
uprawnienia do procedury, tymczasowe przyjęcie eskalowanych uprawnień, aby umożliwić im wykonywanie określonych czynności procedura zakończona.źródło
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ódło
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
źródło
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:
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
źródło
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:
źródło
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;
źródło
Jeśli chcesz, aby widok był tylko do odczytu po udzieleniu uprawnień do odczytu, możesz użyć ALGORITHM = TEMPTABLE w definicji DDL widoku.
źródło