sql >> Database >  >> RDS >> Mysql

MySql:alleen-lezen opties verlenen?

Het hangt af van hoe je "alles gelezen" definieert.

"Lezen" van tabellen en weergaven is de SELECT voorrecht. Als dat is wat je bedoelt met "allemaal gelezen", dan ja:

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

Het klinkt echter alsof je een vermogen bedoelt om alles te 'zien', om te 'kijken maar niet aan te raken'. Dus, hier zijn de andere soorten lezen die in je opkomen:

"Lezen" is de definitie van views de SHOW VIEW voorrecht.

Het "lezen" van de lijst met query's die momenteel door andere gebruikers worden uitgevoerd, is het PROCESS voorrecht.

De huidige replicatiestatus "lezen" is de REPLICATION CLIENT voorrecht.

Houd er rekening mee dat een of al deze meer informatie kunnen onthullen dan u van plan bent vrij te geven, afhankelijk van de aard van de gebruiker in kwestie.

Als dat de lezing is die u wilt doen, kunt u een van deze combineren (of een van de andere de beschikbare privileges ) in een enkele GRANT verklaring.

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

Er is echter geen enkel privilege dat een subset van andere privileges verleent, en dat is wat het klinkt alsof u erom vraagt.

Als u dingen handmatig doet en op zoek bent naar een eenvoudigere manier om dit te doen zonder dat u de exacte toekenning hoeft te onthouden die u gewoonlijk voor een bepaalde gebruikersklasse geeft, kunt u de verklaring opzoeken om de toekenningen van een vergelijkbare gebruiker opnieuw te genereren en deze om te draaien om een ​​nieuwe gebruiker met vergelijkbare rechten aan te maken:

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)

Als u 'not_leet' en 'localhost' wijzigt zodat ze overeenkomen met de nieuwe gebruiker die u wilt toevoegen, samen met het wachtwoord, resulteert dit in een herbruikbare GRANT statement om een ​​nieuwe gebruiker aan te maken.

Of, als u een enkele handeling wilt om de beperkte set privileges in te stellen en toe te kennen aan gebruikers, en misschien onverdiende privileges te verwijderen, dat kan worden gedaan door een opgeslagen procedure te maken die alles inkapselt wat u wilt doen. Binnen de hoofdtekst van de procedure bouwt u de GRANT statement met dynamische SQL en/of manipuleer rechtstreeks de toekenningstabellen zelf.

In deze recente vraag over databasebeheerders , de poster wilde de mogelijkheid voor een niet-bevoorrechte gebruiker om andere gebruikers te wijzigen, wat natuurlijk niet iets is dat normaal kan worden gedaan - een gebruiker die andere gebruikers kan wijzigen, is vrijwel per definitie geen onbevoegde gebruiker - echter - - opgeslagen procedures boden in dat geval een goede oplossing, omdat ze draaien met de beveiligingscontext van hun DEFINER gebruiker, waardoor iedereen met EXECUTE privilege op de procedure om tijdelijk verhoogde privileges over te nemen zodat ze de specifieke dingen kunnen doen die de procedure bereikt.



  1. PostgreSQL-index niet gebruikt voor query's op IP-bereiken

  2. Hoe synchroniseer ik met de lokale database en ontleden?

  3. SESSIONTIMEZONE Functie in Oracle

  4. Homestead - Verbinding maken met mijn database