sql >> Database teknologi >  >> RDS >> Mysql

Sådan administrerer du brugere og godkendelse i MySQL


Introduktion

Brugeradministration er et af de vigtigste ansvarsområder for enhver, der håber at kunne administrere et MySQL-databasesystem. Oprettelse, ændring og sletning af brugerkonti, så de bedst repræsenterer brugerne og tjenesterne i dit miljø, hjælper med at lægge grunden til at låse adgang, begrænse mulighederne for ændringer og implementere revision og ansvarlighed for ændringer.

I denne guide vil vi tale om, hvordan man administrerer brugerkonti i MySQL. Først vil vi diskutere, hvad en gyldig bruger er i MySQL og vise dig, hvordan du tilføjer yderligere brugere til systemet. Dette fører til en diskussion om, hvordan man konfigurerer godkendelse for hver bruger, og hvordan systemet vælger en godkendelsesindstilling fra en liste over muligheder. Vi vil fortsætte med at tale om at foretage ændringer af eksisterende brugere, hvordan du logger ind med de konti, du har oprettet, og hvordan du sletter brugere, du ikke længere har brug for.



Forudsætninger

For at følge denne vejledning skal du have en konto på en MySQL-server med de relevante privilegier.


Kommandoer vi vil bruge

For at oprette, ændre og slette brugere i MySQL er de kernekommandoer, du har brug for:

  • OPRET BRUGER :opret en ny brugerkonto
  • ÆNDRE BRUGER :foretag ændringer af en eksisterende brugerkonto
  • SLIP BRUGER :fjern en eksisterende brugerkonto


Påkrævede rettigheder

For at udføre kommandoerne ovenfor skal du logge ind på MySQL med en konto med CREATE USER privilegier. CREATE USER privilegium giver dig mulighed for at oprette, ændre, slette og omdøbe brugere blandt andre handlinger. Vi skal også bruge SELECT privilegium på mysql database for at se oplysninger om eksisterende brugere.

I den ønskede rækkefølge skal du logge ind med:

  • En begrænset konto, der har CREATE USER privilegiet og SELECT privilegium på mysql database
  • roden eller administrativ bruger, der har fulde rettigheder i MySQL



Forstå, hvordan MySQL definerer og fortolker brugerkonti

Før vi begynder at oprette nye konti, er det nyttigt at bruge lidt tid på at blive fortrolig med de forskellige, som MySQL bruger til at oprette og henvise til brugere. Du skal også være fortrolig med MySQL's godkendelsesalgoritme for at forstå, hvilken brugerkonto den vil bruge til at godkende forbindelser.


Hvad er MySQL's syntaks for brugerkonti?

I MySQL er brugerkonti sammensat af to separate oplysninger, der er forbundet med et at-tegn (@):

  • Brugernavnet
  • Værten, som brugeren opretter forbindelse fra

Generelt vil brugerkonti på systemet se således ud:

'<user>'@'<host>'

Enkelte anførselstegn kan bruges som ovenfor til individuelt at indpakke bruger- og værtskomponenterne på brugerkontoen. De er nogle gange nødvendige, hvis en af ​​komponenterne indeholder tegn, der ellers ville blive misfortolket. Generelt er det altid en god idé at tilføje dem for at være eksplicit.

Så i stedet for bare at have en konto kaldet 'john' , i MySQL ville det fulde kontonavn kræve en slags vært, såsom 'john'@'localhost' . Det betyder, at der kan være flere 'john' konti på systemet og MySQL vil se hver af dem som en unik konto, så længe de kommer fra et andet domæne.

Når alt dette er sagt, er det muligt at definere brugerkonti, der ikke har en bruger- eller værtskomponent, men der er vigtige implikationer, som du skal være opmærksom på.

Du kan definere en brugerkonto uden en brugerværdi ved at bruge en tom streng:

''@'<host>'

For eksempel kan du oprette en bruger som ''@'localhost' . Denne bruger ville matche enhver brugernavn, der forbinder fra den lokale computer.

Ligeledes kan du have en brugerkonto, der matcher fra enhver vært. I stedet for at bruge en tom streng til værtsværdier ville du bruge % jokertegn, som dette:

'<user>'@'%'

For eksempel, hvis du opretter 'john'@'%' , ville den konto matche en 'john' bruger, der opretter forbindelse fra hvilken som helst vært.



Hvordan godkender MySQL brugere?

At forstå, hvordan MySQL faktisk behandler hver godkendelsesanmodning, er meget vigtig for at undgå en fælles klasse af godkendelsesproblemer, der skyldes rimelige, men forkerte antagelser. Dette blev diskuteret i nogen dybde i vores introduktion til godkendelse og godkendelse i MySQL-artiklen.

Ved godkendelse af en forbindelsesanmodning bruger MySQL en række felter inden for bruger tabel over dens interne mysql database for at beslutte, om forbindelsen skal tillades. MySQL vil bruge højst én brugerkontopost for at forsøge at godkende en forbindelse. Dette betyder, at MySQL har brug for en måde at beslutte, hvilken brugerkonto der skal bruges, hvis der er mere end én konto, der kan matche en forbindelse.

MySQL's algoritme til autentificering af brugere begynder, når serveren starter op. Ved opstart indlæser MySQL hele mysql.user tabel ind i hukommelsen. Det gør det også, når der oprettes brugerkonti ved hjælp af de almindelige MySQL-kommandoer. Når den indlæser tabellen, sorterer den posterne fra højeste prioritet til laveste.

MySQL bruger Host kolonne som det primære sorteringsfelt og prioriterer resultater med mere specifikke værdier. Så bogstavelige værdier er sorteret til toppen som den højeste prioritet og dem, der bruger jokertegn, såsom % , er sorteret i bunden. De sidste poster er dem, der kun indeholder % uden andre tegn, efterfulgt af poster, der har en fuldstændig tom vært.

Bruger kolonne bruges som et sekundært sorteringsfelt for alle poster, der har den samme Host værdi. Endnu en gang prioriteres de mere præcise matches. Siden Brugeren kolonne kan ikke bruge jokertegn, alle indgange er ligestillede undtagen dem med en tom Bruger værdi. De er sorteret til bunden. Hvis en post med en tom Bruger værdi er valgt, vil brugeren blive godkendt som en "anonym bruger", hvilket normalt svarer til ingen privilegier.

Nu, når der foretages en forbindelsesanmodning, gennemgår MySQL sin sorterede tabel i hukommelsen fra toppen til bunden. Den bruger den første post den finder for at godkende brugeren, uanset om der er andre poster, der også ville matche. Hvis klienten ikke kan godkendes ved hjælp af den metode, der er defineret af denne post, vil forbindelsen mislykkes, og ingen andre poster vil blive kontrolleret.



Hvad er implikationer af ikke at inkludere en bruger eller vært i en MySQL-brugerkontodefinition?

På grund af MySQL's autentificeringsalgoritme kan der opstå problemer, hvis du ikke er forsigtig, når du opretter brugerkonti uden en bruger- eller værtskomponent. Dette skyldes, at den måde, MySQL beslutter, hvilken post der skal bruges til at godkende, kan være uintuitiv og overraskende.

For eksempel, hvis en bruger autentificerer til MySQL med brugerdelen som en tom streng, vil MySQL betragte dem som en "anonym bruger" i resten af ​​sessionen. Som regel har anonyme brugere næsten ingen strøm og kan gøre meget lidt, når de først er tilsluttet. Det er muligt endda ved et uheld at godkende som en anonym bruger, når du forsøger at godkende ved hjælp af en anden brugerkonto.

Udfordringen med at bruge jokertegn værter for brugerkonti er, at andre brugerkonti, der inkluderer en værtsværdi kan nemt maskere eller gøre den brugerkonto, der bruger jokertegnet, utilgængelig.

For eksempel, hvis du har en brugerkonto defineret som 'emily'@'%' , kan du forvente at være i stand til at godkende til 'emily' fra enhver vært. Men hvis du har en brugerkonto med en tom bruger, men en værtsværdi, der matcher værten 'emily' opretter forbindelse fra, vil MySQL godkende ved at bruge denne konto i stedet (hvilket fører til et anonymt brugerlogin som beskrevet ovenfor).

Så som et eksempel vil MySQL sortere følgende konti i følgende rækkefølge:

Prioritet MySQL-konto Kommentarer
1 'emily'@'localhost' og 'emily'@'example.com' Disse har samme prioritet, hvilket er okay, fordi det kun er muligt for én af dem at matche en forbindelse.
2 ''@'localhost' og ''@'example.com' Disse to poster har igen samme prioritet. Da de ikke har en brugerkomponent, men de gør har en bogstavelig værtskomponent, placeres de i bunden af ​​de indgange, der har nøjagtige værtsværdier.
3 'emily'@'%.example.com' Denne post har et jokertegn i værtskomponenten, så den har lavere prioritet end poster med nøjagtige værtsværdier.
4 ''@'%.example.com' Denne post er grupperet med de poster, der har et jokertegn i deres værtsværdi. Da den ikke har nogen brugerkomponent, er den nederst i denne gruppe.
5 'emily'@'%' Denne post har en værtsværdi, der kun består af et jokertegn. Da det matcher enhver vært, har det en meget lav prioritet.
7 ''@'%' Denne post kan bruges til at autentificere enhver bruger fra enhver vært som en anonym bruger. Det har ekstremt lav prioritet, da det matcher enhver forbindelse.
6 'emily'@'' Denne post har en helt tom værtsværdi, som har endnu lavere prioritet end en vært, der kun indeholder en jokertegnsvært.
8 ''@'' Dette er den lavest mulige prioritet bruger. Den indeholder ingen værtsinformation, så den er placeret i slutningen under værtssortering. Da den også indeholder en tom bruger, er den placeret under andre poster i denne gruppe. Som alle poster uden en bruger, vil forbindelser, der er godkendt med denne post, blive logget ind som en anonym bruger.



Hvordan opretter du brugere?

Nu hvor du har en fornemmelse for den måde, MySQL håndterer brugerkonti på, kan vi begynde at oprette nogle nye brugere. Husk at logge ind med en bruger med de rettigheder, der er beskrevet i forudsætningerne.


Grundlæggende syntaks

Den grundlæggende syntaks for at oprette en ny bruger er relativt enkel. Du bruger CREATE USER kommando, og angiv derefter brugeren og værten for den nye konto:

CREATE USER '<user>'@'<host>';

Dette vil oprette en grundlæggende konto uden at konfigurere nogen detaljer ud over dens bruger og vært ved oprettelsen.



Hvordan opretter du en bruger med en adgangskode?

Ofte vil du konfigurere godkendelse, mens du opretter brugeren. Du kan gøre dette ved at tilføje den valgfrie IDENTIFICERET AF klausul til OPRET BRUGER erklæring:

CREATE USER '<user>'@'<host>' IDENTIFED BY '<password>';

Dette opretter en ny brugerkonto, som før, og tildeler samtidig en adgangskode til kontoen. Vi vil dække, hvordan man tildeler en adgangskode senere, eller hvordan man ændrer en brugers adgangskode senere.



Hvordan opretter du en bruger med Unix-socket-godkendelse?

Mens adgangskodegodkendelse er den mest almindelige godkendelsesmetode for de fleste brugere, er det ikke den eneste mulighed. MySQL giver mange forskellige interne og eksterne godkendelsesmekanismer, som du kan konfigurere til dine brugerkonti til at bruge. Som et eksempel vil vi konfigurere en ny konto ved hjælp af Unix-socket-godkendelse.

Unix socket-godkendelse kan bruges i Linux eller Unix-lignende miljøer, så en konto på operativsystemet får adgang til det samme kontonavn i MySQL uden yderligere godkendelse. I denne konfiguration ved MySQL-administratoren, at brugerkonti på operativsystemet er stramt kontrolleret.

Så hvis der er en mary brugere på operativsystemet, vil de være i stand til at logge ind på 'mary'@'localhost' konto i MySQL, hvis Unix-socket-godkendelse er den definerede godkendelsesmekanisme. Lad os konfigurere dette nu.

Socket-godkendelse kræver auth_socket plugin, så indlæs først plugin'et ved at skrive:

INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';

Opret derefter en brugerkonto, der matcher en brugerkonto, du har på dit operativsystem. Til dette eksempel bruger vi mary konto, vi diskuterede ovenfor. Hvis du ikke bruger et navn, der matcher et af dine operativsystemnavne, vil du ikke være i stand til at godkende ved hjælp af denne bruger.

For at oprette brugeren med socket-godkendelse skal vi bruge IDENTIFIED WITH klausul (anderledes end IDENTIFIED BY klausul brugt tidligere) for at angive det godkendelsesplugin, der skal bruges:

CREATE USER 'mary'@'localhost' IDENTIFIED WITH auth_socket;

Nu skulle du være i stand til at godkende til 'mary'@'localhost' MySQL-bruger fra mary bruger på dit operativsystem. Når du er logget ind som mary , opret forbindelse til databasen uden at angive brugernavn eller adgangskode:

mysql

Du skal automatisk logges på via den Unix-socket-godkendelse, du har konfigureret.




Hvordan viser du eksisterende brugere?

Lad os derefter tage et kig på, hvordan man finder information om de eksisterende brugere.

For at vise alle de eksisterende MySQL-brugere, bestående af deres bruger- og værtskomponent, samt det autentificerings-plugin, de bruger i øjeblikket, kan du SELECT disse felter fra mysql.user database:

SELECT user,host,plugin FROM mysql.user
+------------------+-----------+-----------------------+  user             | host      | plugin                |+------------------+-----------+-----------------------+  mary             | localhost | auth_socket           |  mysql.infoschema | localhost | caching_sha2_password |  mysql.session    | localhost | caching_sha2_password |  mysql.sys        | localhost | caching_sha2_password |  root             | localhost | caching_sha2_password |  useradmin        | localhost | caching_sha2_password |+------------------+-----------+-----------------------+6 rows in set (0.00 sec)

Her kan vi se, at der er defineret seks brugere på systemet, som alle kun kan logge ind lokalt. Fem af konti er konfigureret til at bruge adgangskodegodkendelse. 'mary'@'localhost' konto er konfigureret til at bruge Unix-socket-godkendelse.

Vi kan finde yderligere oplysninger om brugeregenskaber ved at bruge SHOW CREATE USER kommando. På trods af navnet viser det alle de aktuelle egenskaber for en brugerkonto, ikke nødvendigvis dem, der blev brugt under den første kontooprettelse.

VIS OPRET BRUGER kommandoen tager et kontonavn som et argument:

SHOW CREATE USER '<user>'@'<host>'\G

Det er normalt bedst at afslutte kommandoen med \G sætningsterminator i stedet for det sædvanlige kolon (; ), så du kan se resultaterne lidt tydeligere.

For at vise egenskaberne for 'useradmin'@'localhost' konto, skal du skrive:

SHOW CREATE USER 'useradmin'@'localhost'\G
*************************** 1. row ***************************CREATE USER for useradmin@localhost: CREATE USER 'useradmin'@'localhost' IDENTIFIED WITH 'caching_sha2_password' AS '$A$005$O                                              Rl7lM;@Gt{roB4EWchqDdYM142Lq7pfzcCNiK4yUxnRBlrAgr0sE3' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT1 row in set (0.00 sec)


Hvordan ændrer du eksisterende MySQL-brugere?

Du kan ændre eksisterende brugere i MySQL ved at bruge ALTER USER kommando. Dette kan bruges til at ændre de fleste af de brugerrelaterede egenskaber for en konto, med undtagelse af kontorettigheder, som styres af GRANT og REVOKE kommandoer.

Den grundlæggende syntaks for ALTER USER ser sådan ud:

ALTER USER <user> <properties_to_change>;

Hvordan ændrer du adgangskoden for en MySQL-bruger?

For de fleste mennesker er den mest almindelige brug af ALTER USER er at ændre adgangskoder.

For eksempel kan du ændre adgangskoden til 'kamal'@'localhost' ved at skrive:

ALTER USER 'kamal'@'localhost' IDENTIFIED BY '<new_password>';

Hvis du vil indstille en midlertidig adgangskode for en bruger, som de skal erstatte med det samme, kan du indstille og udløbe en adgangskode på samme tid:

ALTER USER 'kamal'@'localhost' IDENTIFIED BY '<new_password>' PASSWORD EXPIRE;

Du kan altid ændre din egen adgangskode, selv uden CREATE USER privilegium. Det er nemmest at bruge USER() funktion til automatisk at udfylde dit eget brugernavn:

ALTER USER USER() IDENTIFIED BY '<new_password>';


Hvordan ændrer du godkendelsesplugins for en MySQL-bruger?

Du kan også ændre den mekanisme eller plugin, der bruges til at godkende en konto.

I et tidligere eksempel konfigurerede vi en konto kaldet 'mary'@'localhost' at bruge Unix-socket-godkendelse. Hvis vi senere vil ændre den konto til at bruge konventionel adgangskodegodkendelse, kan vi bruge ALTER USER kommando igen.

Først skal du identificere standardgodkendelsesplugin'et til din server. Hvis det er en adgangskodebaseret godkendelsesmetode, er det sandsynligvis bedst at genbruge standardvalget:

SHOW VARIABLES LIKE 'default_authentication_plugin';

I dette tilfælde er standardgodkendelsesplugin'et caching_sha2_password , så det bruger vi, når vi skifter til adgangskodegodkendelse.

Skift nu 'mary'@'localhost' at bruge caching_sha2_password plugin med en ny adgangskode:

ALTER USER 'mary'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY '<marys_password>';

'mary'@'localhost' brugeren vil ikke længere være i stand til at logge på ved hjælp af Unix-socket-godkendelse, men de kan logge ind med den angivne adgangskode.




Hvordan logger du på MySQL?

Vi har diskuteret, hvordan man opretter og ændrer MySQL-brugerkonti, inklusive godkendelse. Vi har dog ikke talt om, hvordan man rent faktisk logger på ved hjælp af disse godkendelsesmetoder.

mysql client er en kraftfuld kommandolinjeklient, der kan bruges til at oprette forbindelse til lokale og eksterne databaser. Vi vil bruge det til at tale om, hvordan man godkender ved hjælp af de metoder, vi konfigurerede ovenfor.


Hvordan logger du på en lokal database med en adgangskode?

For at logge ind på en lokalt hostet MySQL-database ved hjælp af en brugerkonto med en adgangskode, ser den grundlæggende syntaks sådan ud:

mysql --user=<username> --password <dbname>

Så hvis 'kamal'@'localhost' brugeren ønsker at logge ind på MySQL og oprette forbindelse til testen database fra den computer, hvor systemet er hostet, kan de skrive:

mysql --user=kamal --password testing

mysql klienten vil bede om adgangskoden til 'kamal'@'localhost' . Hvis du angiver de korrekte legitimationsoplysninger, bliver du forbundet til testen database.

Det er valgfrit at angive en database på kommandolinjen. Hvis ingen er angivet, vil du oprette forbindelse til serveren, men ikke til en bestemt database.



Hvordan logger du på en lokal database med Unix-socket-godkendelse?

For at logge på en lokal MySQL-server ved hjælp af Unix-socket-godkendelse, skal du være logget ind på dit operativsystem som det kontonavn, der matcher. Så hvis vi ønsker at godkende til 'mary'@'localhost' ved at bruge Unix-socket-godkendelse, skal vi først logge ind på vores computer med et brugernavn kaldet mary .

Når du har brugt den korrekte operativsystemkonto, kan du oprette forbindelse direkte til den lokale database ved at køre klienten uden valgmuligheder.

mysql

Som før kan du eventuelt tilføje et databasenavn for at oprette forbindelse til en bestemt database, du ønsker.



Hvordan logger du på en ekstern database med en adgangskode?

Hvis din MySQL-server ikke kører på din lokale server, skal du angive den vært, som klienten skal forsøge at oprette forbindelse til. Du kan gøre det ved at tilføje --værten mulighed.

Det meste af tiden vil du autentificere med en adgangskode til eksterne MySQL-servere, så kommandoen ville se nogenlunde sådan ud:

mysql --user=<username> --password --host=<host> <dbname>

'tanya'@'' kunne oprette forbindelse til en MySQL-server placeret på example.com ved at skrive:

mysql --user='tanya' --password --host='example.com' 



Hvordan sletter du MySQL-brugere?

At beholde brugerkonti, der ikke længere tjener et formål, er en sikkerhedsrisiko. Du kan nemt fjerne konti med DROP USER kommando.

Den grundlæggende syntaks ser således ud:

DROP USER '<user>'@'<host>';

Så for at slette 'mary'@'localhost' bruger, skal du skrive:

DROP USER 'mary'@'localhost';

Hvis du forsøger at slette en bruger, der ikke eksisterer, vil du modtage en fejlmeddelelse:

ERROR 1396 (HY000): Operation DROP USER failed for 'mary'@'localhost'

For at undgå dette kan du tilføje koden HVIS EKSISTERER klausul før kontonavnet. Hvis brugeren eksisterer, slettes den. Hvis den ikke gør det, vil der kun blive givet en advarsel:

Query OK, 0 rows affected, 1 warning (0.00 sec)


Konklusion

MySQL's brugerkontostyring og godkendelseskonfiguration er meget fleksibel. At lære, hvordan du opretter, ændrer og får information om brugere i MySQL, vil hjælpe dig med at administrere dine databasesystemer mere effektivt.

Bedste praksis for sikkerhed dikterer, at du skal oprette konti for hvert unikt brugstilfælde, kun givet det adgangsniveau, der kræves for at udføre deres omfang. Kontooprettelse og godkendelse er de første trin i denne proces. I en anden guide vil vi tale om tildeling og tilbagekaldelse af privilegier for at opfylde den anden del af denne strategi.




  1. Installer webserver i Windows XP med Apache2, PHP5 og MySQL4 – del 4

  2. Hvordan current_timestamp() virker i PostgreSQL

  3. Sådan overvåger du PostgreSQL, der kører inde i en Docker-container:Anden del

  4. Rumbibliotek kan kopiere db fra aktivmappen?