Упатство:Вовед во MySQL администрирање: Разлика помеѓу преработките

Од Сподели wiki
Прејди на прегледникот Прејди на пребарувањето
Нема опис на уредувањето
 
Нема опис на уредувањето
Ред 1: Ред 1:
Веднаш по инсталирањето на [[MySQL]] само во конзола напишете mysql и ете не во конзолниот клиент без претходно внесена лозинка! Секој може од секаде да се најави на вашиот сервер без корисничко име и лозинка. Што е најинтересно можете дури да го пробате и следново: mysql -u root и ете не со root привилегии најавени на mysql серверот, без разлика под кое [[GNU/Linux|Linux]] корисничко име сте најавени.
Одкако се најавивме на MySQL серверот, редно е да направиме по нешто корисно нели?. Прегледување на достапните бази, создавање на нови и нивно користење Наредбите кои ги користи MySQL се прилично едноставни и интуитивни. Така што со едноставно пишување на:
  mysql> '''SHOW DATABASES''';


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


   # mysql -u root
   mysql> '''SHOW DATABASES''';
  +-----------+ | Database | +-----------+
  | mysql |
  | test |
  +-----------+
  2 rows in set (0.00 sec)


потоа ќе ја активираме системската база  mysql (која се вика исто како и конзолниот клиент):
За почеток, ќе си поиграме со test базата која доаѓа со секоја инсталација. Први ќе треба да му кажеме на mysql серверот дека сакаме да ја користиме test базата:  


   mysql> use  mysql;
   mysql> use test;
   Database changed


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


   mysql> select user,password from user;
Да провериме кои табели ни се на располагање во тест базата користејќи ја "SHOW TABLES;" mysql наредбата:
...
   mysql> '''SHOW TABLES''';
4 rows in set (0.00 sec)
  +----------------+ | Tables_in_test | +----------------+
  | test_tbl |
  +----------------+
  1 row in set (0.00 sec)


Време да го елиминираме анонимниот (празниот) корисник:
Во тест базата имаме само една табела која се вика test_tbl. За да дознаеме нешто повеќе за структурата на оваа табела, т.е. да дознаеме колку колони содржи и од каков тип на податоци, ќе се послужиме со mysql наредбата за опишување на структура на табели, "DESCRIBE [TABLE_NAME];". Каде што [TABLE_NAME] e табелата за која сакаме да добиеме информации. На пример за нашата test_tbl ќе постапиме овака:
  mysql> DESCRIBE test_tbl;
  ... [излезот е непрегледен, проверете го со командата]
  2 rows in set (0.06 sec)


   mysql> delete from user where user="";  
Од резултатот на оваа наредба можеме да приметиме дека табелата test_tbl во test базата има вкупно две колони, од кои првата е од тип varchar(30), што претставува текстуален тип со максимална должина од 30 знаци, може да прими NULL (празно) вредност, и доколку не обезбедиме вредност за оваа колона, mysql автоматски ќе и додели вредност нула. Втората колона е од тип tinyint(3), што претставува целобројна вредност со максимална должина од 3 цифри, и исто како и првата колона, може да прими NULL вредност а предефинираната вредност е 0. Доколку сакате да си создадете сопствена база, со табели по ваш терк, прво ќе треба да создадеме нова база со "CREATE DATABASE [IME_NA_BAZA]" mysql наредбата. mysql> CREATE DATABASE moja_baza; Query OK, 1 row affected (0.00 sec) mysql> Со ова создадовме нова база која се вика moja_baza. Да започнеме да работиме со нашата нова база:
   mysql> use moja_baza;  
  Database changed


Ако ја провериме повторно листана корисници, ќе видиме дека го нема „празниот“ корисник.  
Да провериме што имаме во новата база:
  mysql> SHOW TABLES;
  Empty set (0.00 sec)


Следен чекор ќе ни биде менувањето на лозинката за root корисникот (т.е. поставување на лозинка за истиот)  
Базата е празна, без ниедна табела. Да се потрудиме да ја загадиме нашата нова база, ќе составиме нова табела:
  mysql> CREATE TABLE moja_tabela( -> kolona1 int, -> kolona2 text, -> kolona3 double) -> ;
  Query OK, 0 rows affected (0.11 sec)


   mysql> update user set password = password("nov_root_password") where user="root";
Ако повторно провериме што има во нашата нова база, ќе го добиеме следното:
   mysql> show tables
  ...[излезот е непрегледен, проверете го со командата]
  1 row in set (0.00 sec)


Проверете и ќе видите дека лозинката е сменета. Лозинката се чува во форма на hash текст од вистинската лозинка, така што не е читлива за корисниците. Функцијата password("tekst") се користи за да ја пресмета оваа hash вредност, што можеби и ќе ви се најде кога ќе имате потреба во вашата апликација да воведете корисници на повисоко ниво.
Структурата на новата табела може да ја провериме со користење на гореспомената наредба "DESCRIBE". Накратко, податоци во колоната се внесуваат со помош на "INSERT" SQL израз, кој за нашата табела ќе изгледа овака: mysql> INSERT INTO moja_tabela VALUES(12,"Proben tekst",6.78); Query OK, 1 row affected (0.00 sec) Повеќе за начините на внесување податоци во вашите табели ќе може да најдете на страната за документација на командата  [http://dev.mysql.com/doc/mysql/en/INSERT.html INSERT]
Вредностите од табелата ќе може да ги извлечеме на следниов начин:
  mysql> SELECT * FROM moja_tabela;
  ... [излезот е непрегледен, проверете го со командата]
  1 row in set (0.00 sec)


   mysql> select user,password from user;
Повеќе за начините на читање податоци од табелите ќе може да најдете на страната за документација на командата [http://dev.mysql.com/doc/mysql/en/SELECT.html SELECT]. Вредноста на некоја колона во еден или повеќе слогови се менува на следниот начин:
   mysql> UPDATE moja_tabela SET kolona2="Nov tekst!!" WHERE kolona1=12;
  Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0


...
  mysql> SELECT * FROM moja_tabela;
2 rows in set (0.00 sec)
  ...[излезот е непрегледен, проверете го со командата]
  row in set (0.02 sec)


Следно што треба да направиме е да му кажеме на   mysql серверот повторно да ја вчита табелата со корисниците и нивните привилегии:  
Веднаш потоа со SELECT проверуваме дека вредноста е сменета. Нешто повеќе околу UPDATE изразите за менување на вредности во табелите ќе најдете на страната за документација на командата  [http://dev.mysql.com/doc/mysql/en/UPDATE.html UPDATE]. За да избришеме еден или повеќе слогови од некоја табела ќе се послужиме со "DELETE" SQL клучниот збор:
  mysql> DELETE FROM moja_tabela WHERE kolona1=12;
  Query OK, 1 row affected (0.05 sec)


   mysql> flush privileges;
   mysql> SELECT * FROM moja_tabela;
  Empty set (0.00 sec)


Сега веќе нашиот тазе инсталиран сервер доволно сигурен за да го пуштиме во јавна употреба. Додавање нови корисници и привилегии За да додадеме нов корисник, ќе се послужиме со наредбата GRANT. Оваа наредба служи за додавање нови корисници и нивните лозинки. Додавањето на нов корисник е многу едноставно:  
Овој клучен збор користете со претпазливост. Доколку немате критериум за селекција (пр: WHERE kolona1=12;) со овој клучен збор може да ги избришете неповратно сите слогови од табелата. Повеќе за него ќе најдете на страната за документација на командата  [http://dev.mysql.com/doc/mysql/en/DELETE.html DELETE].


   mysql> GRANT ALL ON moja_baza.* TO 'petko'@'%' IDENTIFIED BY 'user_password';
За крај, ќе ја избришеме денешната табела, само за да ви демонстрирам како да се ослободите од несаканите табели:
   mysql> DROP TABLE moja_tabela;
  Query OK, 0 rows affected (0.05 sec)


Со ова, додадовме корисник petko чија што лозинка е user_password, кој ги сите има привилегии врз сите табели во базата moja_baza. Истотака овој корисник може да се најавува од било која работна станица без ограничувања. За корисникот да биде активен не заборавајте да му кажете на   mysql да ги вчита повторно привилегиите:
   mysql> SHOW TABLES;
  Empty set (0.00 sec)


   mysql> flush privileges;
Со помош на SHOW TABLES се уверуваме дека табелата не постои. Сепак, тоа и не беше крај, бидејќи сакаме да се ослободиме и од базата:
   mysql> DROP DATABASE moja_baza;
  Query OK, 0 rows affected (0.00 sec)


Горенаведениот случај е најчесто употребуван, но сепак можеме привилегиите да ги доделиме на ниво на сервер:
   mysql> SHOW DATABASES;
 
   +-----------+ | Database | +-----------+
   mysql> GRANT ALL ON *.* TO 'petko'@'%' IDENTIFIED BY 'user_password';
   | mysql |
 
   | test |
или пак евентуално може да ги доделиме на ниво на табела:
   +-----------+
 
   2 rows in set (0.00 sec)
   mysql> GRANT ALL ON moja_baza.moja_tabela TO 'petko'@'%' IDENTIFIED BY 'user_password';
 
Со помош на SHOW DATABASES се уверуваме дека базата не постои. За денес толку, повеќе во следната прилика, а во меѓувреме нападнете го сајтот со  [http://dev.mysql.com/doc/mysql/en/index.html документација за MySQL].
Доколку сакаме пофино да ги одредиме привилегиите на новите корисници, ќе може да го смените клучниот збор ALL во погорниот ред со еден од следниве: SELECT Дозволи SELECT на корисникот DELETE Дозволи DELETE на корисникот INSERT Дозволи INSERT на корисникот UPDATE Дозволи UPDATE на корисникот ALTER Дозволи ALTER TABLE, за менување на структура на табели CREATE Дозволи CREATE TABLE, за создавање нови табели DROP Дозволи DROP TABLE, за бришење на табели GRANT OPTION Дозволи му на корисникот да додава нови корисници(т.е. да ја користи GRANT наредбата) Ова се само основните опции на GRANT наредбата, вистинската листа е многу поголема и може да ја [http://dev.mysql.com/doc/mysql/en/GRANT.html најдете овде]. 
 
Уште ни останува да го филтрираме најавувањето на корисникот според адресата на работната станица од која се најавува. Во погорниот пример петко можеше да се најави од која сака станица ('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 од моја страна, а за дома ќе ви оставам да го разгледате делчето од документацијата кое се однесува на [http://dev.mysql.com/doc/mysql/en/GRANT.html GRANT и REVOKE].


[[Category:MySQL]]
[[Category:MySQL]]

Преработка од 18:18, 3 февруари 2007

Одкако се најавивме на MySQL серверот, редно е да направиме по нешто корисно нели?. Прегледување на достапните бази, создавање на нови и нивно користење Наредбите кои ги користи MySQL се прилично едноставни и интуитивни. Така што со едноставно пишување на:

 mysql> SHOW DATABASES;

во mysql конзолниот клиент, ќе добиете листа на базите кои постојат на соодветниот сервер. На свежо инсталиран сервер би требало да го добиете следново:

 mysql> SHOW DATABASES;
 +-----------+ | Database | +-----------+ 
 | mysql |
 | test | 
 +-----------+
 2 rows in set (0.00 sec)

За почеток, ќе си поиграме со test базата која доаѓа со секоја инсталација. Први ќе треба да му кажеме на mysql серверот дека сакаме да ја користиме test базата:

 mysql> use test;
 Database changed

Откако сме најавени да ја користиме тест базата, сите следни дејствија се вршат врз тековната база.

Да провериме кои табели ни се на располагање во тест базата користејќи ја "SHOW TABLES;" mysql наредбата:

 mysql> SHOW TABLES;
 +----------------+ | Tables_in_test | +----------------+ 
 | test_tbl |
 +----------------+
 1 row in set (0.00 sec)

Во тест базата имаме само една табела која се вика test_tbl. За да дознаеме нешто повеќе за структурата на оваа табела, т.е. да дознаеме колку колони содржи и од каков тип на податоци, ќе се послужиме со mysql наредбата за опишување на структура на табели, "DESCRIBE [TABLE_NAME];". Каде што [TABLE_NAME] e табелата за која сакаме да добиеме информации. На пример за нашата test_tbl ќе постапиме овака:

 mysql> DESCRIBE test_tbl;
 ... [излезот е непрегледен, проверете го со командата]
 2 rows in set (0.06 sec)

Од резултатот на оваа наредба можеме да приметиме дека табелата test_tbl во test базата има вкупно две колони, од кои првата е од тип varchar(30), што претставува текстуален тип со максимална должина од 30 знаци, може да прими NULL (празно) вредност, и доколку не обезбедиме вредност за оваа колона, mysql автоматски ќе и додели вредност нула. Втората колона е од тип tinyint(3), што претставува целобројна вредност со максимална должина од 3 цифри, и исто како и првата колона, може да прими NULL вредност а предефинираната вредност е 0. Доколку сакате да си создадете сопствена база, со табели по ваш терк, прво ќе треба да создадеме нова база со "CREATE DATABASE [IME_NA_BAZA]" mysql наредбата. mysql> CREATE DATABASE moja_baza; Query OK, 1 row affected (0.00 sec) mysql> Со ова создадовме нова база која се вика moja_baza. Да започнеме да работиме со нашата нова база:

 mysql> use moja_baza; 
 Database changed

Да провериме што имаме во новата база:

 mysql> SHOW TABLES;
 Empty set (0.00 sec)

Базата е празна, без ниедна табела. Да се потрудиме да ја загадиме нашата нова база, ќе составиме нова табела:

 mysql> CREATE TABLE moja_tabela( -> kolona1 int, -> kolona2 text, -> kolona3 double) -> ;
 Query OK, 0 rows affected (0.11 sec)

Ако повторно провериме што има во нашата нова база, ќе го добиеме следното:

 mysql> show tables
 ...[излезот е непрегледен, проверете го со командата]
 1 row in set (0.00 sec)

Структурата на новата табела може да ја провериме со користење на гореспомената наредба "DESCRIBE". Накратко, податоци во колоната се внесуваат со помош на "INSERT" SQL израз, кој за нашата табела ќе изгледа овака: mysql> INSERT INTO moja_tabela VALUES(12,"Proben tekst",6.78); Query OK, 1 row affected (0.00 sec) Повеќе за начините на внесување податоци во вашите табели ќе може да најдете на страната за документација на командата INSERT Вредностите од табелата ќе може да ги извлечеме на следниов начин:

 mysql> SELECT * FROM moja_tabela; 
 ... [излезот е непрегледен, проверете го со командата] 
 1 row in set (0.00 sec)

Повеќе за начините на читање податоци од табелите ќе може да најдете на страната за документација на командата SELECT. Вредноста на некоја колона во еден или повеќе слогови се менува на следниот начин:

 mysql> UPDATE moja_tabela SET kolona2="Nov tekst!!" WHERE kolona1=12;
 Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
 mysql> SELECT * FROM moja_tabela;
 ...[излезот е непрегледен, проверете го со командата]
 row in set (0.02 sec)

Веднаш потоа со SELECT проверуваме дека вредноста е сменета. Нешто повеќе околу UPDATE изразите за менување на вредности во табелите ќе најдете на страната за документација на командата UPDATE. За да избришеме еден или повеќе слогови од некоја табела ќе се послужиме со "DELETE" SQL клучниот збор:

 mysql> DELETE FROM moja_tabela WHERE kolona1=12;
 Query OK, 1 row affected (0.05 sec)
 mysql> SELECT * FROM moja_tabela;
 Empty set (0.00 sec)

Овој клучен збор користете со претпазливост. Доколку немате критериум за селекција (пр: WHERE kolona1=12;) со овој клучен збор може да ги избришете неповратно сите слогови од табелата. Повеќе за него ќе најдете на страната за документација на командата DELETE.

За крај, ќе ја избришеме денешната табела, само за да ви демонстрирам како да се ослободите од несаканите табели:

 mysql> DROP TABLE moja_tabela; 
 Query OK, 0 rows affected (0.05 sec)
 mysql> SHOW TABLES;
 Empty set (0.00 sec)

Со помош на SHOW TABLES се уверуваме дека табелата не постои. Сепак, тоа и не беше крај, бидејќи сакаме да се ослободиме и од базата:

 mysql> DROP DATABASE moja_baza;
 Query OK, 0 rows affected (0.00 sec)
 mysql> SHOW DATABASES;
 +-----------+ | Database | +-----------+ 
 | mysql | 
 | test |
 +-----------+
 2 rows in set (0.00 sec) 

Со помош на SHOW DATABASES се уверуваме дека базата не постои. За денес толку, повеќе во следната прилика, а во меѓувреме нападнете го сајтот со документација за MySQL.