Záleží na tom, jak definujete "vše přečteno."
"Čtení" z tabulek a pohledů je SELECT
privilegium. Pokud je to to, co máte na mysli "vše přečteno", pak ano:
GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';
Zdá se však, že máte na mysli schopnost „vidět“ vše, „dívat se, ale nedotýkat se“. Takže zde jsou další druhy čtení, které vás napadnou:
"Čtením" definice pohledů je SHOW VIEW
privilegium.
"Čtení" seznamu aktuálně prováděných dotazů ostatními uživateli je PROCESS
privilegium.
"Čtení" aktuálního stavu replikace je REPLICATION CLIENT
privilegium.
Všimněte si, že některé nebo všechny z nich mohou odhalit více informací, než máte v úmyslu prozradit, v závislosti na povaze daného uživatele.
Pokud je to čtení, které chcete dělat, můžete zkombinovat kterékoli z nich (nebo jakékoli jiné z dostupná oprávnění
) v jediném GRANT
prohlášení.
GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...
Neexistuje však jediné privilegium, které by udělovalo nějakou podmnožinu dalších privilegií, což zní, jako byste se ptali.
Pokud děláte věci ručně a hledáte snadnější způsob, jak toho dosáhnout, aniž byste si museli pamatovat přesný grant, který obvykle udělujete pro určitou třídu uživatelů, můžete vyhledat příkaz, abyste znovu vytvořili granty srovnatelného uživatele a změnit jej pro vytvoření nového uživatele s podobnými oprávněními:
mysql> SHOW GRANTS FOR 'not_leet'@'localhost';
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Změna 'not_leet' a 'localhost' tak, aby odpovídaly novému uživateli, kterého chcete přidat, spolu s heslem, bude mít za následek znovu použitelný GRANT
příkaz k vytvoření nového uživatele.
Pokud chcete jedinou operací nastavit a udělit omezenou sadu oprávnění uživatelům a případně odstranit všechna nezasloužená oprávnění, lze to provést vytvořením uložené procedury, která zapouzdří vše, co chcete udělat. V těle procedury byste vytvořili GRANT
pomocí dynamického SQL a/nebo přímo manipulovat se samotnými tabulkami grantů.
V této nedávné otázce na správce databází
, plakát chtěl možnost pro neprivilegovaného uživatele upravovat ostatní uživatele, což samozřejmě není něco, co by se normálně dalo udělat - uživatel, který může upravovat ostatní uživatele, není v podstatě z definice neprivilegovaný uživatel - nicméně - - uložené procedury byly v tomto případě dobrým řešením, protože běží s bezpečnostním kontextem jejich DEFINER
uživatel, což umožňuje komukoli s EXECUTE
oprávnění k proceduře dočasně převzít eskalovaná oprávnění, která jim umožní dělat konkrétní věci, kterých procedura dosahuje.