MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Защита на MySQL - Използване на привилегии за достъп до данни за сигурна инсталация

Сигурността при инсталиране на MySQL е нещо, което трябва да е на ум на всеки MySQL DBA. Въпреки че обсъдихме как трябва да се грижите за сигурността си на MySQL като цяло (разгледайте някои от предишните ни публикации, по-специално серията за сигурност на MySQL, част първа и част втора), ние не обсъдихме конкретни проблеми, свързани със сигурността, включително  тези въпроси, свързани с привилегиите. Ние правим това тук.

Какви са привилегиите в MySQL?

Могат да се предоставят права в MySQL на акаунти. Ако предоставите привилегии на акаунт в MySQL, вие определяте кои операции може да изпълнява акаунтът. Привилегиите могат да бъдат предоставени както на бази данни, така и на обекти на база данни (таблици, индекси, изгледи и т.н.). Привилегиите могат също да бъдат динамични или статични. Статичните привилегии са вградени в сървъра, докато динамичните привилегии могат да бъдат дефинирани по време на изпълнение.

Как да се възползвате от привилегии за  MySQL сигурност

За да използвате привилегиите в MySQL, ето какво трябва да запомните:

  • За да присвоите или отмените привилегии, трябва да имате потребител на MySQL. Потребителите могат да бъдат създадени чрез изпълнение на заявка CREATE USER:
     

    CREATE USER ‘demouser’@’localhost’ IDENTIFIED BY ‘password’;

  • За да присвоите или отмените привилегии, използвайте съответно операторите GRANT и REVOKE:
     

    GRANT ALL ON demo_db.* TO ‘demouser’@’localhost’;
    REVOKE INSERT ON *.* FROM ‘demouser’@’localhost’;

  • Можете да запазите привилегии, като стартирате FLUSH PRIVILEGES. Вижте ги, като стартирате SHOW GRANTS.

  • Изразът GRANT не може да се използва за предоставяне както на привилегии, така и на роли; изявлението трябва да предоставя или привилегии, или роли.

За да направите вашата инсталация на MySQL по-сигурна, помислете за следното:

  • Дайте на потребителите си само привилегиите, необходими за изпълнение на задачите им (напр., не използвайте GRANT ALL, ако това е не е необходимо)

  • По принцип избягвайте да изпълнявате MySQL като root потребител на Unix, защото всеки потребител с привилегия FILE може да причини сървърът да създава файлове като root.

  • Не предоставяйте привилегията FILE на потребители, които не са администратори (вижте обяснението по-горе)

  • Помислете за стартиране на mysqld като обикновен непривилегирован потребител.

  • Не предоставяйте PROCESS или SUPER привилегии на потребители, които не са администратори. Привилегията PROCESS позволява на потребителя да вижда всички процеси, изпълнявани в MySQL. Привилегията SUPER, наред с други неща, позволява промени в конфигурацията на сървъра, позволява използването на изразите CREATE SERVER, ALTER SERVER и DROP SERVER и също така позволява използването на оператора KILL, позволявайки на потребителя да убива оператори, принадлежащи на други акаунти. Имайте предвид, че MySQL запазва допълнителна връзка за потребители, които имат привилегията SUPER. Привилегията SUPER също така позволява на потребителя да контролира сървърите за репликация.

Следвайте съветите по-горе и трябва да сте на път към по-сигурна инсталация на MySQL. Въпреки това, ако използвате по-нова версия на MySQL, има още нещо, което трябва да знаете – MySQL въведе роли в MySQL 8.0.16.

Роли в защитата на MySQL

Ако никога не сте чували за роли в MySQL, не се притеснявайте. Ролите са много подобни на привилегиите, поради което ги включихме в тази публикация в блога. Всъщност ролите са точно това – те са колекции от привилегии, т.е.  когато дадена роля е присвоена на потребител, на потребителя се присвояват всички привилегии, свързани с тази роля. Роли могат да се добавят и премахват с помощта на операторите CREATE ROLE и DROP ROLE. За да използвате роли в MySQL, създайте име на роля, дайте привилегии на тази роля и след това я присвоете на потребител по следния начин:

CREATE ROLE [IF NOT EXISTS] ‘role_1’;
GRANT SELECT ON db_name.* TO user_name;
GRANT role_1 TO [email protected];

Какви привилегии трябва да предоставите?

Когато предоставяте привилегии, следвайте принципа на най-малко привилегии:на MySQL акаунт трябва да се предоставят само привилегии, необходими за неговите цели. Най-често използваните привилегии са:

  • ВСИЧКИ ПРИВИЛЕГИИ, което предоставя всички привилегии на акаунт.

  • CREATE предоставя привилегиите, необходими за създаване на бази данни и таблици.

  • DROP предоставя привилегиите, необходими за премахване на бази данни и таблици.

  • DELETE предоставя привилегиите, необходими за изтриване на редове от таблици.

  • INSERT предоставя привилегиите, необходими за вмъкване на редове в таблици.

  • SELECT предоставя привилегиите, необходими за изпълнение на SELECT заявки.

  • UPDATE предоставя привилегиите, необходими за актуализиране на редове в таблица (за изпълнение на заявки UPDATE)

По принцип е добра идея да избягвате предоставянето на всички привилегии на акаунт; вместо това помислете за спазването на принципа на най-малко привилегии. Също така имайте предвид, че предоставянето на допълнителни привилегии на определен потребител не премахва привилегиите, които са били в сила преди. Можете също да видите привилегиите на конкретен потребител, като използвате този синтаксис (заменете потребителското име с потребителското име на вашия потребител):

SHOW GRANTS FOR ‘username’;

Резюме

Когато се занимавате с привилегии в MySQL, имайте предвид, че трябва да следвате принципа на най-малките привилегии (т.е. да предоставяте само привилегии, които са необходими). Следването на съветите, описани в този блог, би трябвало да ви помогне да направите вашата инсталация на MySQL по-сигурна. Не забравяйте, че вашите привилегии трябва да бъдат запазени, за да влязат в сила (изявлението FLUSH PRIVILEGES може да ви помогне да направите това), освен това, имайте предвид, че от MySQL 8.0.16 можете да използвате роли в MySQL, за да присвоите набори от привилегии на конкретен потребител.

Надяваме се, че тази публикация в блога ви е помогнала да защитите вашия MySQL екземпляр(и). Ако имате някакви въпроси или мисли, не се колебайте да коментирате, също така помислете да разгледате нашата серия за сигурност на MySQL (тук и тук)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ИЗПУСКАНЕ ТАБЛИЦА, АКО СЪЩЕСТВУВА в MariaDB

  2. Напишете оптимизации за Qualcomm Centriq 2400 в MariaDB 10.3.5 Release Candidate

  3. COUNT() Функция в MariaDB

  4. Как да надстроите MariaDB 5.5 до MariaDB 10.1 на CentOS/RHEL 7 и Debian системи

  5. Как работи RPAD() в MariaDB