Упатство:Кориснички права во MySQL

Од Сподели wiki
Преработка од 17:40, 29 јануари 2011; направена од Admin (разговор | придонеси) (3 ревизии: initial)
(разл) ← Претходна преработка | Последна преработка (разл) | Следна преработка → (разл)
Прејди на прегледникот Прејди на пребарувањето

Веднаш по инсталирањето на MySQL само во конзола напишете mysql и ете не во конзолниот клиент без претходно внесена лозинка! Секој може од секаде да се најави на вашиот сервер без корисничко име и лозинка. Што е најинтересно можете дури да го пробате и следново: mysql -u root и ете не со root привилегии најавени на mysql серверот, без разлика под кое GNU/Linux корисничко име сте најавени.

За да ги поправиме инсталационите „грешки“ со корисничките привилегии, ќе треба да се најавите на mysql серверот како root:

 # mysql -u root

потоа ќе ја активираме системската база mysql (која се вика исто како и конзолниот клиент):

 mysql> use   mysql;

Веднаш по инсталацијата mysql серверот во својата база на корисници има еден анонимен корисник и root корисникот. Ова може да го проверите ако напишете:

 mysql> select user,password from user;

... 4 rows in set (0.00 sec)

Време да го елиминираме анонимниот (празниот) корисник:

 mysql> delete from user where user=""; 

Ако ја провериме повторно листана корисници, ќе видиме дека го нема „празниот“ корисник.

Следен чекор ќе ни биде менувањето на лозинката за root корисникот (т.е. поставување на лозинка за истиот)

 mysql> update user set password = password("nov_root_password") where user="root"; 

Проверете и ќе видите дека лозинката е сменета. Лозинката се чува во форма на hash текст од вистинската лозинка, така што не е читлива за корисниците. Функцијата password("tekst") се користи за да ја пресмета оваа hash вредност, што можеби и ќе ви се најде кога ќе имате потреба во вашата апликација да воведете корисници на повисоко ниво.

 mysql> select user,password from user;

... 2 rows in set (0.00 sec)

Следно што треба да направиме е да му кажеме на mysql серверот повторно да ја вчита табелата со корисниците и нивните привилегии:

 mysql> flush privileges;

Сега веќе нашиот тазе инсталиран сервер доволно сигурен за да го пуштиме во јавна употреба. Додавање нови корисници и привилегии За да додадеме нов корисник, ќе се послужиме со наредбата GRANT. Оваа наредба служи за додавање нови корисници и нивните лозинки. Додавањето на нов корисник е многу едноставно:

 mysql> GRANT ALL ON moja_baza.* TO 'petko'@'%' IDENTIFIED BY 'user_password';

Со ова, додадовме корисник petko чија што лозинка е user_password, кој ги сите има привилегии врз сите табели во базата moja_baza. Истотака овој корисник може да се најавува од било која работна станица без ограничувања. За корисникот да биде активен не заборавајте да му кажете на mysql да ги вчита повторно привилегиите:

 mysql> flush privileges;

Горенаведениот случај е најчесто употребуван, но сепак можеме привилегиите да ги доделиме на ниво на сервер:

 mysql> GRANT ALL ON *.* TO 'petko'@'%' IDENTIFIED BY 'user_password';

или пак евентуално може да ги доделиме на ниво на табела:

 mysql> GRANT ALL ON moja_baza.moja_tabela TO 'petko'@'%' IDENTIFIED BY 'user_password';

Доколку сакаме пофино да ги одредиме привилегиите на новите корисници, ќе може да го смените клучниот збор ALL во погорниот ред со еден од следниве: SELECT Дозволи SELECT на корисникот DELETE Дозволи DELETE на корисникот INSERT Дозволи INSERT на корисникот UPDATE Дозволи UPDATE на корисникот ALTER Дозволи ALTER TABLE, за менување на структура на табели CREATE Дозволи CREATE TABLE, за создавање нови табели DROP Дозволи DROP TABLE, за бришење на табели GRANT OPTION Дозволи му на корисникот да додава нови корисници(т.е. да ја користи GRANT наредбата) Ова се само основните опции на GRANT наредбата, вистинската листа е многу поголема и може да ја најдете овде.

Уште ни останува да го филтрираме најавувањето на корисникот според адресата на работната станица од која се најавува. Во погорниот пример петко можеше да се најави од која сака станица ('petko'@'%'). Доколку сакаме петко да се најавува само од неговата работна станица ќе го смениме GRANT-от во:

 mysql> GRANT ALL ON *.* TO 'petko'@'petko.mydomain.com' IDENTIFIED BY 'user_password';

или пак ако сакаме да се најавува само од серверот на кој е инсталиран mysql:

 mysql> GRANT ALL ON *.* TO 'petko'@'localhost' IDENTIFIED BY 'user_password';

Бришење на корисници и одземање привилегии Спротивно од GRANT, за одземање привилегии се користи наредбата REVOKE, која има слична синтакса:

 mysql> REVOKE ALL PRIVILEGES ON moja_baza.* FROM 'petko'@'%';

Исто како и кај GRANT наредбата, ALL може да се замени со некоја од вредностите од горната табела, исто како и опсегот на делување, кој може да го прошириме на ниво на сервер:

 mysql> REVOKE ALL PRIVILEGES ON *.* FROM 'petko'@'%';

или пак на ниво на специфична табела: mysql> REVOKE ALL PRIVILEGES ON moja_baza.moja_tabela FROM 'petko'@'%'; Проверување на привилегии за одреден корисник Секогаш е корисно да се провери кој има какви привилегии врз кои објекти во базата. За проверка на вашите mysql кориснички имиња постои наредбата SHOW GRANTS:

 mysql> SHOW GRANTS FOR 'petko'@'localhost';

Толку за манипулацијата со корисници во mysql од моја страна, а за дома ќе ви оставам да го разгледате делчето од документацијата кое се однесува на GRANT и REVOKE.