MySQL 접속
$ mysql -u root -p


root 암호 초기화
mysql> UPDATE user SET password=password('new_password'WHERE user='root';
mysql> FLUSH privileges;


데이터베이스 선택 및 보기
mysql> USE mysql;
mysql> SELECT Host, User, Password FROM user;


사용자 추가
- 서버 주소의 경우 localhost, %, 127.0.0.1 도 같이 처리해 줍니다. 
- 외부 접속은 'localhost'  대신에 '%' 를 사용합니다. 
mysql> INSERT INTO user (Host, User, Password) VALUES ('localhost''유저명', password('유저패스워드'));
mysql> INSERT INTO user (Host, User, Password) VALUES ('127.0.0.1''유저명', password('유저패스워드'));
mysql> INSERT INTO user (Host, User, Password) VALUES ('%''유저명', password('유저패스워드'));
mysql> FLUSH privileges;

* password('유저패스워드')에서 반드시 작은따옴표를 사용해야함

root 사용자 원격 접속 되도록 수정
mysql>SELECT Host, User, Password FROM user;
+-----------------------+------+-------------------------------------------+
| host                  | user | password                                  |
+-----------------------+------+-------------------------------------------+
| localhost             | root | *514F8A4F9D8BBC49B0FBFA7186DD96C8919E8630 | 
| id.server.com      | root |                                           | 
| 127.0.0.1             | root |                                           | 
| localhost             |      |                                           | 
| id.server.com      |      |                                           | 
+-----------------------+------+-------------------------------------------+
요렇게 되어 있는 부분중에 127.0.0.1 이 부분의 host를 외부에서 접속할 수있겠금 변경한다.
% <-- 모든 외부접속 허용
000.000.000.000 <-- 특정 아이피 접속허용
000.000.000.%   <-- 특정 아이피 대역 접속허용으로 변경

mysql>update user set host = '원하는 설정값' where user ='root' and host='127.0.0.1';

을 실행한다.
여기서 주의할 점은 root계정중 host에 localhost라는 컬럼역시 있어야 된다는거다.


사용자 삭제 예
mysql> DELETE FROM user WHERE user='root'  and host='%';


데이터베이스 추가 및 권한 주기
- 모든 권한시 데이터베이스명.* 대신 *.* 로 처리합니다. 
mysql> CREATE DATABASE 데이터베이스명;
mysql> GRANT ALL privileges ON 데이터베이스명.* TO 유저명@localhost IDENTIFIED BY '유저패스워드';
mysql> GRANT ALL privileges ON 데이터베이스명.* TO 유저명@127.0.0.1 IDENTIFIED BY '유저패스워드';
mysql> GRANT ALL privileges ON 데이터베이스명.* TO 유저명@'%' IDENTIFIED BY '유저패스워드';

이렇게 해서 외부접속이 안되면 insert into 구문 잘못 입력시 % 가 잘못 입력되거나 패스워드를 유저 패스워드가 아닌 root 패스워드를 입력했을 가능성이 있습니다. 이 경우 % 를 다시 바꿔주면 됩니다.

mysql> UPDATE INTO user SET Host='%' WHERE user='유저명';
mysql> FLUSH privileges;

이렇게 해주면 외부입력 처리가 됩니다. 



mysql 테이블 명 변경
rename table 원래 테이블명 to 바꿀테이블명;
alter table 테이블명 rename 바꿀테이블명;

1.원래 있던 테이블을 이름만 바꿔서 새로 만들고 싶을때
create table 새테이블명 select * from 원본테이블명

2.테이블 스키마가 같은 경우 데이터 복사할때
insert into tableA select * from tableB

3.테이블이 다른 곳에 복사
create table tableA.fld as select from tableB.fld
create table project.zipcode as select from exam.zipcode;










※ 외부에서 접속 가능 유무 확인 방법

로컬 컴퓨터에서 telnet localhost 3306 또는
다른 컴퓨터에서 telnet xxx.xxx.xxx.xxx 3306


1. my.cnf 수정

$ sudo vi /etc/mysql/my.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
#
# * Fine Tuning

위의 bind-address = 127.0.0.1 부분을 아래처럼 주석처리해 준다.

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address = 127.0.0.1
#
# * Fine Tuning


2. 사용자 등록

  • MySQL 실행 및 데이터베이스 선택
  • $ mysql -u root -p
    Enter password:

    mysql> use mysql
    Database changed


  • user 테이블에 데이터 추가
  • mysql> insert into user(host, user, password) values('%', 'root', password('PASSWORD'));

- host 필드에 '%' 데이터를 넣는 것은 어디서든 접속할 수 있다라는 뜻이다.
- 특정 자리에서만 접속하도록 하려면 '192.168.1.131' 처럼 IP 또는 해당 자리에서만 접속이 가능하게 하려면 'localhost' 입력.


  • db 테이블에 데이터 추가
  • mysql> insert into db(host, dbname, user) values('%', 'MYSITE', 'root');

- 위의 필드를 추가 후 각 필드의 값으 확인해 보면 'N' 값이 들어 있는데 이 값을 'Y'로 수정. 

    mysql> update db set Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y', Create_priv='Y', Drop_priv='Y', Grant_priv='Y', References_priv='Y', Index_priv='Y', Alter_priv='Y', Create_tmp_table_priv='Y', Lock_tables_priv='Y', Create_view_priv='Y', Show_view_priv='Y', Create_routine_priv='Y', Alter_routine_priv='Y', Execute_priv='Y' where user='root';


  • 사용자에게 모든 권한을 주고 싶을 때 다음과 같이 grant 구문을 사용 할 수도 있다.
  • mysql> grant all privileges on *.* to root@'%' identified by 'PASSWORD' width grant option;

    mysql> flush privileges;



3. MySQL 재실행

$ sudo /etc/init.d/mysql restart

or

$ mysqladmin -u root -p reload 



출처 - http://cshong.tistory.com/entry/MySQL-%EC%99%B8%EB%B6%80-%EC%A0%91%EC%86%8D-%ED%97%88%EC%9A%A9








'DB > MySQL' 카테고리의 다른 글

MySQL에서 Create Procedure  (0) 2010.12.21
리눅스에서 my.cnf 설정  (0) 2010.12.21
MySQL Data Type 과 테이블 설계 방법  (0) 2010.12.20
mysql 사용자 관리  (0) 2010.12.19
mysql 명령어  (0) 2010.12.19
Posted by linuxism
,

mysql 사용자 관리

DB/MySQL 2010. 12. 19. 22:58

1. Mysql 사용자계정 추가

우선 간단히 Mysql 계정 생성방법에 대해서 설명드리겠습니다.

Mysql DB서버에는 여러 Database가 존재할것이고 또 많은 User가 존재할겁니다.

 

예를 들자면

User에는  최상위 유저인  Root , 일반유저인 mis13, test   존재한다고 보고

Database에는 Mis13, Testdb, Database가 존재합니다.

 

아래 그림을 보시면 Root 3개의 DB에 접속할 권한을 모두 가지고 있고

mis13 유저는 Mis13이란 DB, test 유저는 TestDB, Databases DB 접속할 권한이 있습니다.


자 그럼 mis13, test의 유저들의 권한을 줘보겠습니다.

우선 사용자를 생성하기 위해서 Root 권한으로 Mysql에 접속을 합니다.

 

#> Mysql  -u root -p

Enter Password : ######

 

mis13 이란 유저가 Mis13이란 DB의 권한을 가지게 해보겠습니다. (암호는 mis1313)

 

mysql> GRANT ALL PRIVILEGES ON Mis13.* to mis13@localhost IDENTIFIED BY 'mis1313' WITH GRANT OPTION;

mysql> flush privileges;    -> 권한 로드

 

2. 사용자 확인

mysql> use mysql;

mysql> select host, user, password from user;

 

3. 그 밖에 외부에서도 접속하기, 모든 DB권한 주기

어떤 DB도 접속 가능하게 권한을 주는 것은

mysql> GRANT ALL PRIVILEGES on *.*  to mis13@localhost IDENTIFIED BY 'mis1313' WITH GRANT OPTION;

mysql> flush privileges;

 

외부에서도 접속할 수 있도록 하려면

mysql> GRANT ALL PRIVILEGES on  *.*  to mis13@"%" IDENTIFIED BY 'mis1313' WITH GRANT OPTION;

mysql > flush privileges;

 

GRANT 명령어 말고 Mysql DB 안에 User, DB 테이블에 넣는 법도 있지만 초보분이 사용하시기엔

이 방법이 편하실겁니다.

 

4. 모든 권한이 아닌 부분별 골라서 주기

) mis13 이라는 계정이 전체 데이터베이스에 대해서 select, insert, delete, update 권한만 주고 싶을 경우

mysql>GRANT select, insert, delete, update on *.* to mis13@localhost IDENTIFIED BY 'mis1313' WITH GRANT OPTION;

mysql> flush privileges;

 

) mis13 이라는 계정이 Mis13 이라는 데이터베이스에 대해서 select, insert, update 권한만 주고 싶을 경우

mysql>GRANT select, insert, update on Mis13.* to mis13@localhost IDENTIFIED BY 'mis1313' WITH GRANT OPTION;

mysql>flush privileges;

 

PS - 함부로 권한을 주진 맙시다.

 

'DB > MySQL' 카테고리의 다른 글

MySQL에서 Create Procedure  (0) 2010.12.21
리눅스에서 my.cnf 설정  (0) 2010.12.21
MySQL Data Type 과 테이블 설계 방법  (0) 2010.12.20
MySQL 외부 접속 사용자 추가  (0) 2010.12.19
mysql 명령어  (0) 2010.12.19
Posted by linuxism
,

mysql 명령어

DB/MySQL 2010. 12. 19. 22:32

1. Database 추가 및 삭제

생성

mysql> create database DB;


삭제(내부에 있는 테이블도 삭제 됨)

mysql> drop database DB;


2. Table 추가 및 삭제(CREATE)

해당 DB로 이동

mysql> use DB

create table [만들고자 하는 테이블이름] (속성1 data type(속성길이), 속성2 data type(속성길이));
mysql> create table student (number char(15), subject char(20));

만들어진 table을 확인합니다.

mysql> show tables;

만들어진 특정 table에 대해서 속성들에 대한 기술(description)을 합니다.

mysql> desc 테이블이름;
mysql> describe 테이블이름;

만들어진 전체 table을 없앱니다.

mysql> drop table 테이블이름;

위에서 테이블을 만들 때 속성은 여러 종류가 있습니다.
대부분의 DB manager에서 비슷하게 사용됩니다.
()
안에는 속성의 길이가 선언됩니다.
tinyint(), smallint(), mediumint(), int(), integer(), real(), double(), float(), decimal(), numeric(), char(), varchar(), date, time, timestamp, datetime, tinyblob, blob, mediumbolb, longbolb, tinytext, text, mediumtext, enum, set

이상의 datatype이 있습니다.
이중에 대표적으로 많이 사용하는 datatype을 바탕으로 설명을 하면,
int()
-2147483648 에서 2147483647사이의 정수를 저장합니다.
"unsigned"
옵션과 함께 0부터 4294967295 범위의 정수를 나타낼 수도 있습니다.
float()
는 소수를 포함한 실수를 저장합니다.
예를 들면, float(5,2)는 최대 자리수 5자리에 소수이하 2자리를 나타낸다.
varchar(), char()
는 둘다 문자열을 저장합니다.
이경우 varchar() ()안에 저장된 수자보다 실제 문자열이 적을 때는 메모리 공간을 실제 문자열 길이만큼만 저장됩니다.
date
는 날짜에 대한 정보를 저장한다. 기본은 'YYYY-MM-DD' 입니다.
text
blob 데이타 타입은 255 - 65535 자의 문자열을 저장할 때 사용됩니다.

이제 주소록 table을 하나 만들어 보겠습니다.

mysql> create table addressbook(
            -> id int not null primary key,
            -> name char(10),
            -> address char(30),
            -> tel char(15)); ( ";"
이 있음을 주의하세요.)
Query OK, 0 rows affected (0.05 sec)

mysql> desc addressbook;

Field

Type

Null

Key

Default

Extra

id

int(11)

 

PRI

0

 

name

char(10)

YES

 

NULL

 

address

char(30)

YES

 

NULL

 

tel

char(15)

YES

 

NULL

 

4 rows in set (0.04 sec)

한가지 주의할 것은 sql문이 끝날때는 항상 ";"으로 끝나야 합니다.
위에서 not null 이나 primary key에 대한 것은 sql문을 통해서 관련 내용을 확인할 수 있습니다.
not null
id란 속성이 항상 값을 가져야 한다는 의미로 쓰이는 것입니다.
primary key
란 사람으로 비유하면 주민등록번호라고 할 수 있습니다.
id란 속성으로 각각의 데이타를 구분하는 역활을 하게 합니다.

 

3. 테이블 속성 추가 및 삭제(ALTER)

새로운 속성의 추가를 위한 SQL

alter table 테이블이름 add [새로운 속성이름] [속성의 타입 및 길이]

mysql> alter table student add name char(20);

 

속성에 대한 삭제를 위한 SQL

alter table 테이블이름 add [삭제하고자 하는 속성이름]

mysql> alter table student drop name;

 

 

4. 새로운 데이터의 입력(INSERT)

테이블의 속성들에 실제 데이터를 넣어주기 위해서 SQL문에서 INSERT문을 사용한다.

 

insert into [테이블 이름] values (속성에 대한 데이터1, 데이터2, …)

mysql> insert into student values (‘200108056’, ‘computer’, ‘hskim’);

-> 자료형이 char 일 경우 데이터가 따옴표 안에 있어야 한다.

 

해당 속성에 대한 데이터만을 삽입할 경우

insert into [테이블 이름](속성1, 속성2) values (속성에 대한 데이터1, 데이터2, …)

mysql> insert into student(subject, name) values (‘computer’, ‘hskim’);

 

 

5. 데이터 관리(UPDATE)

데이터에 대한 관리를 위한 SQL문은 UPDATE문을 사용하여 해당 속성에 대한 데이터 변경한다.

 

update [테이블 이름] set [속성 이름 = 새로운 데이터] where [속성 이름 = 변경 될 데이터]

mysql> update student set subject = ‘information’ where subject = ‘computer’;

 

 

6. 행 삭제(DELETE)

테이블의 한 행 즉 투플(tuple)을 지우고자 할 때는 SQL문에서 DELETE문을 사용

 

delete from [테이블 이름] where [속성 이름 = 해당 데이터]

mysql> delete from student where name = ‘hskim’;

 

 

7. 정보 추출(SELECT)

사용자가 의사 결정에 필요한 정보를 추출하는 방법

 

select [속성1, 속성2, …] from [테이블 이름] where [속성 = 데이터]

mysql> select * from student;

mysql> select name from student where name = ‘hskim’;

mysql> select name, number from student where name=’hskim’ or number=’20010911’;

-> 조건식을 위한 연산으로 and, or, not 등이 올 수 있으며, 속성의 나열 순서에 따라 테이블

속성 순서도 변경 된다.

mysql> select distinct subject from student;

-> 데이터가 중복해서 검색되지 않도록 한다.

'DB > MySQL' 카테고리의 다른 글

MySQL에서 Create Procedure  (0) 2010.12.21
리눅스에서 my.cnf 설정  (0) 2010.12.21
MySQL Data Type 과 테이블 설계 방법  (0) 2010.12.20
MySQL 외부 접속 사용자 추가  (0) 2010.12.19
mysql 사용자 관리  (0) 2010.12.19
Posted by linuxism
,