Blog članak

Kako napraviti MySQL korisnika i dodijeliti dozvole u AWS RDS-u

Napravite MySQL korisnika i dodijelite database dozvole u AWS RDS-u iz Linux command linea.

Kako napraviti novog MySQL korisnika i dodijeliti mu dozvole u AWS RDS cloud servisu iz Linux command linea?

MySQL je besplatna open-source baza podataka. Mnoge web stranice na internetu koriste MySQL zajedno s Pythonom, Perlom, PHP-om i drugim server-side jezicima. AWS nudi managed MySQL uslugu s opcijama visoke dostupnosti, uključujući backupove, restore i patching. Ovaj kratki vodič objašnjava kako izraditi MySQL korisničke račune i dodijeliti privilegije u AWS RDS-u pomoću Linux naredbi.

Preduvjet

Potreban vam je AWS račun zajedno s MySQL ili MariaDB RDS instancom i pokrenutom EC2 ili Lightsail instancom. Također pretpostavljam da na EC2 ili Lightsail Linux serveru već imate instaliran MySQL klijent. Na primjer, možete ga instalirati ovako.

Najprije se prijavite SSH naredbom:

ssh -i ~/.ssh/EC2-keypem.pem ec2-user@ec2-54-161-60-164.compute-1.amazonaws.com

Zatim instalirajte MySQL klijent ovisno o Linux distribuciji:

sudo apt install mysql-client

Testirajte povezivost s AWS RDS-om kroz CLI. Sada se možete spojiti na AWS RDS MySQL server pomoću MySQL naredbe:

mysql -u {USER_NAME} -h {AWS_RDS_HOST_NAME} -P {MYSQL_PORT} -p

Na primjer:

mysql -u masteruser -h mysql - instance1.134342.us-west-1.rds.amazonaws.com -P 3306 -p

Kako kreirati MySQL korisničke račune i dodijeliti privilegije

Prvo ću se prijaviti kao korisnik dbmasteruser:

mysql -u dbmasteruser -h ls-gdgdg6585684767gdgjdg.eetg96lp.us-east-1.rds.amazonaws.com -P 3306 -p

Korak 1: napravite novu bazu podataka

U većini slučajeva trebate najprije napraviti novu bazu. No ovaj korak možete preskočiti ako već imate postojeće MySQL baze na RDS-u. Napravimo novu MySQL bazu pod nazivom blog:

CREATE DATABASE blog;

Korak 2: napravite novi MySQL račun na AWS RDS-u

Napravit ću novog korisnika pod imenom goran za bazu podataka goran_blog:

CREATE USER 'goran'@'%' IDENTIFIED BY 'my_Super_Secret_Password';

Iz sigurnosnih razloga, pri stvaranju korisnika možete prisiliti i SSL vezu:

CREATE USER 'goran'@'%' IDENTIFIED BY 'password' REQUIRE SSL;

Svaki client/server korisnik može se povezati na AWS RDS kada je host dio postavljen na %. Zato je radi veće sigurnosti bolje % zamijeniti stvarnom IP adresom EC2 ili Lightsail servera ili VPC subnetom. Na primjer:

CREATE USER 'goran'@'172.26.9.11' IDENTIFIED BY 'password';
CREATE USER 'goran'@'172.26.0.0/255.255.240.0' IDENTIFIED BY 'passwd';

SSL vezu za postojeći račun možete prisiliti ovako:

ALTER USER 'user_name'@'client_ip' REQUIRE SSL;
ALTER USER 'goran'@'%' REQUIRE SSL;

Prema zadanim postavkama, AWS RDS račun dobiva određeni skup privilegija. Pokrenimo SHOW GRANTS SQL naredbu za korisnika goran:

SHOW GRANTS for userName;
SHOW GRANTS for goran;

Korak 3: dodijelite privilegije MySQL računu

Ipak, MySQL račun obično dolazi s minimalnim ili nikakvim dozvolama nad bazom. Evo popisa standardnih privilegija:

USAGE data privilegije uključuju: SELECT, INSERT, UPDATE, DELETE i FILE

Structure privilegije uključuju: CREATE, ALTER, INDEX, DROP, CREATE TEMPORARY TABLES, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EXECUTE, CREATE VIEW, EVENT i TRIGGER

Administrator privilegije uključuju: GRANT, SUPER, PROCESS, RELOAD, SHUTDOWN, SHOW DATABASES, LOCK TABLES, REFERENCES, REPLICATION CLIENT, REPLICATION SLAVE i CREATE USER

SSL privilegije uključuju: REQUIRE NONE, REQUIRE SSL, REQUIRE X509

ALL PRIVILEGES je prečac za dodjelu svih MySQL privilegija korisničkom računu.

Sintaksa za dodjelu različitih dozvola izgleda ovako:

GRANT permission ON DB_NAME.TABLE_NAME TO 'userNameHere'@'client_ip';
GRANT permission1,permission2 ON DB.TABLE TO 'userNameHere'@'client_vpc_sub_net';

Na primjer:

GRANT SELECT, INSERT, UPDATE, DELETE ON blog.* TO 'goran'@'%';

Još jedan primjer za VPC subnet:

GRANT SELECT, INSERT, UPDATE, DELETE ON blog.* TO 'goran'@'172.26.0.0/255.255.240.0';

U ovom primjeru dodjeljujemo različite structure privilegije:

GRANT CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, CREATE VIEW, EVENT, TRIGGER, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON `blog`.* TO 'goran'@'%';

Naravno, možemo dodijeliti i ALL PRIVILEGES za bazu blog korisniku goran:

GRANT ALL PRIVILEGES ON `blog`.* TO 'goran'@'%';

Recimo da trebate napraviti novu bazu naziva salesstats s korisnikom ivan i dodijeliti mu sve privilegije:

CREATE DATABASE salesstats;
CREATE USER 'ivan'@'%' IDENTIFIED BY 'PASSWORD_HERE';
GRANT ALL PRIVILEGES ON `salesstats`.* TO 'ivan'@'%';
SHOW GRANTS for ivan;
SHOW GRANTS for 'ivan'@'%';

Napomena: FLUSH PRIVILEGES; trebate koristiti samo kada izravno mijenjate assignment tablice pomoću naredbi poput INSERT, UPDATE ili DELETE:

FLUSH PRIVILEGES;

Korak 4: testiranje

Jednostavno pokrenite sljedeću naredbu iz druge EC2 instance:

mysql -u sai -h mysql - instance1.134342.us-west-1.rds.amazonaws.com -P 3306 -p salesstats

Šifrirana veza prema RDS instanci:

Najprije preuzmite paket certifikata koji sadrži intermediate i root certifikate pomoću wget naredbe:

wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

Sada se spojite ovako:

mysql -h mysql - instance1.134342.us-west-1.rds.amazonaws.com --ssl-ca=rds-combined-ca-bundle.pem --ssl-mode=VERIFY_IDENTITY -u ivan -P 3306 -p salesstats

Ostatak vodiča objašnjava kako poništiti sve ove korake. Drugim riječima, naučit ćete kako ukloniti bazu, korisnika i grant odnosno permission koristeći MySQL CLI.

Korak 5: opoziv privilegija AWS RDS MySQL računu

REVOKE SQL naredba omogućuje sysadminima oduzimanje privilegija i uloga. Sintaksa je:

REVOKE ALL PRIVILEGE1,PRIVILEGE2 ON database.* FROM 'user'@'client_ip';
REVOKE ALL PRIVILEGES ON database.* FROM 'user'@'vpc_sub_net';
REVOKE INSERT, DELETE ON `salesstats`.* FROM 'ivan'@'%';
REVOKE ALL PRIVILEGES ON `salesstats`.* FROM 'ivan'@'%';

Korak 6: obrišite AWS RDS MySQL račun

Za uklanjanje AWS RDS MySQL računa koristite DROP SQL naredbu:

DROP USER 'user'@'client_ip';
DROP USER 'sai'@'%';

Korak 7: uklonite postojeću AWS RDS MySQL bazu

SQL naredba DROP DATABASE briše sve tablice u bazi i uklanja samu bazu. Zato budite vrlo oprezni s ovom naredbom:

DROP DATABASE db_name_here;
DROP DATABASE salesstats;

Provjera:

SHOW DATABASES;

Napomena: kada se baza ukloni iz RDS-a, privilegije dodijeljene baš toj bazi neće se automatski obrisati. Morate ih ručno ukloniti kako je opisano iznad.

Povezane usluge

Ove su usluge usklađene s temom članka i daju čišći prijelaz od edukativnog sadržaja do konkretne implementacije.

Nastavite čitati

Prvo po zajedničkim kategorijama, a zatim po najjačem preklapanju u tagovima.