sql >> Databasteknik >  >> RDS >> Mysql

MySql :Bevilja skrivskyddade alternativ?

Det beror på hur du definierar "allt läst."

"Läsning" från tabeller och vyer är SELECT privilegium. Om det är vad du menar med "alla lästa" så ja:

GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';

Det låter dock som att du menar en förmåga att "se" allt, att "titta men inte röra". Så här är de andra typerna av läsning som kommer att tänka på:

Att "läsa" definitionen av vyer är SHOW VIEW privilegium.

Att "läsa" listan över för närvarande körda frågor från andra användare är PROCESS privilegium.

"Läser" det aktuella replikeringsläget är REPLICATION CLIENT privilegium.

Observera att någon eller alla av dessa kan exponera mer information än du avser att exponera, beroende på vilken typ av användare det gäller.

Om det är den läsning du vill göra kan du kombinera någon av dessa (eller någon annan av de tillgängliga privilegierna ) i en enda GRANT uttalande.

GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...

Det finns dock inget enskilt privilegium som ger någon delmängd av andra privilegier, vilket är vad det låter som du frågar om.

Om du gör saker manuellt och letar efter ett enklare sätt att gå tillväga utan att behöva komma ihåg det exakta bidraget du vanligtvis ger för en viss klass av användare, kan du slå upp uttalandet för att återskapa en jämförbar användares anslag och ändra det runt för att skapa en ny användare med liknande privilegier:

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)

Om du ändrar "not_leet" och "localhost" så att de matchar den nya användaren du vill lägga till, tillsammans med lösenordet, kommer det att resultera i en återanvändbar GRANT uttalande för att skapa en ny användare.

Om du vill ha en enda operation för att ställa in och bevilja den begränsade uppsättningen privilegier till användare, och kanske ta bort eventuella obehöriga privilegier, kan det göras genom att skapa en lagrad procedur som kapslar in allt du vill göra. I huvuddelen av proceduren skulle du bygga GRANT sats med dynamisk SQL och/eller direkt manipulera själva beviljandetabellerna.

I denna senaste fråga om databasadministratörer , affischen ville ha möjligheten för en oprivilegierad användare att modifiera andra användare, vilket naturligtvis inte är något som normalt kan göras -- en användare som kan modifiera andra användare är, i stort sett per definition, inte en oprivilegierad användare -- dock - - lagrade procedurer var en bra lösning i det fallet, eftersom de körs med säkerhetskontexten för deras DEFINER användare, vilket tillåter vem som helst med EXECUTE privilegium på proceduren att tillfälligt anta eskalerade privilegier för att tillåta dem att göra de specifika saker som proceduren åstadkommer.



  1. Vad är MySQL-motsvarigheten till PostgreSQL:s EXPLAIN ANALYZE

  2. Hur får man ASCII-värde i Oracle?

  3. SQL Server – Dissekera internerna i sp_spaceused

  4. SQL Server på Linux