sql >> Databáze >  >> RDS >> Mysql

MySql:Udělit možnosti pouze pro čtení?

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.



  1. Uložte data do PHP / Mysql s inline editací v CKEditoru

  2. Jak se připojit k Oracle pomocí JRuby &JDBC

  3. Změňte jazyk pro aktuální relaci na serveru SQL Server

  4. Jak vytvořit novou databázi MySQL pomocí go-sql-driver