티스토리 뷰

IT Story/DB

MySql 유저 생성 및 권한 설정 방법

행복한소식까치 2017. 7. 22. 11:16
반응형

MySQL DB 생성/삭제 및 사용자 추가/삭제, 권한 부여



MySql을 설치하지 않았다면 아래 명령어로  MySql을 설치한다

apt-get -y install mysql-server mysql-client

서버 관리를 하다보면 mysql 사용자 계정을 추가해 줄때가 있다.

 

MySQL 접속 및 데이터 베이스 추가

 

# mysql -u root -p


 
사용자 계정을 추가하기 전에 먼저 현재 생성된 사용자 계정 조회

 

mysql > use mysql;    // mysql database 선택
mysql > select host, user from user;    // user 테이블 살펴보기


 

 

 

사용자 추가 (권한추가)


mysql > create user 사용자ID;   // 사용자 추가

mysql > create user userid@localhost identified by '비밀번호';

// 사용자(user)를 추가하면서 패스워드까지 설정

기존에 사용하던 계정에 외부 접근 권한을 부여하려면, Host를 '%' 로 하여 똑같은 계정을 추가한다

mysql > create user 'userid'@'%' identified by '비밀번호';  // '%' 의 의미는 외부에서의 접근을 허용

//authentication_string mysql 예전버전의 password 와 같은 것이다.

 

 

mysql > drop user '사용자ID'@localhost;    // 사용자 삭제


 

 

msql > select host,user from user;    // 등록된 모든 사용자 ID 조회
mysql > delete from user where user = '사용자ID';      // 사용자 삭제

 

 

계정이 생성되었다면, 그 계정이 접근할 수 있는 데이터베이스를 생성하고 권한을 부여해야 한다

 

데이터베이스 생성

 

mysql> mysql -u root -p mysql   // mysql -u  사용자id -p 접속할database명(접속할database명은 생략가능)
mysql > show databases;
             // DB 목록 확인


 

 

 msyql > create database DB명;    // 데이터베이스 생성

 

msyql > create schema DB명 default character set utf8; -- 둘중에 하나를 입력하면 DB 생성됨

mysql > create database DB명 default character set utf8;

mysql > create database DB명 default character set utf8 COLLATE utf8_general_ci;

mysql > CREATE DATABASE IF NOT EXISTS DB명 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

// character set명 같이 사용하는 서비스와 다르게 지정 할 경우 한글이 깨져서 나올 수 있습니다.


 

// default character set 변경

msyql > ALTER DATABASE DB명 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

msyql > drop database DB명;       // 데이터베이스 삭제

 

 

사용자에게 데이터베이스 사용권한 부여

 

MySQL은 사용자 이름, 비밀번호, 접속 호스트로 여러분을 인증합니다.

MySQL은 로그인을 시도하는 위치가 어디인가(즉 ip)하는 것도 인증의 일부로 간주합니다.

MySQL 에서 사용자 계정을 추가하고 권한을 추가하거나 제거하는 데 GRANT 와 REVOKE 명령을 사용하기를 권장합니다.

사용자에게 허가된 것을 확인하려면 SHOW GRANTS 명령어로 확인 할 수 있습니다.

IDENTIFIED BY '비밀번호'; 는 권한부여를 하면서 비밀번호까지 변경하고자 하는 경우

이므로 비밀번호는 변경하지 않으려면 이 부분을 빼면 된다.

 

mysql > GRANT ALL PRIVILEGES ON DB명.테이블 TO 계정아이디@host IDENTIFIED BY '비밀번호';

// 계정이 이미 존재 하는데 'identified by '비밀번호' 부분을 추가하면 비밀번호가 변경된다


 

mysql> GRANT ALL privileges ON DB명.* TO 계정아이디@locahost IDENTIFIED BY '비밀번호';
mysql> GRANT ALL privileges ON DB명.* TO 계정아이디@'%' IDENTIFIED BY '비밀번호';

mysql > grant all privileges on DB명.* to userid@'%' identified by '비밀번호' ;  //모든 원격지에서 접속 권한 추가 

host에 '200.100.%' 로 하면 IP주소가 200.100.X.X 로 시작되는 모든 IP에서 원격 접속을 허용한다는 의미

host에 '200.100.100.50' 으로 하면 IP주소가 200.100.100.50 인 곳에서만 원격 접속을 허용한다는 의미


 

// user 에게 test 데이터베이스 모든 테이블에 대한 권한 부여 

mysql > grant all privileges on test.* to userid@localhost identified by '비밀번호';

 

// user 에게 test 데이터베이스 모든 테이블에 select, insert, update 권한 부여

mysql> grant select, insert, update on test.* to user@localhost identified by '비밀번호';

 

// user 에게 test 데이터베이스 모든 테이블에 select, insert, update 권한 부여

 mysql> grant select, insert, update on test.* to user@localhost;   -- 패스워드는 변경없이 권한만 부여하는 경우

 

 // user 에게 모든 데이터베이스 모든 테이블에 권한 부여(비권장)

mysql> grant all privileges on *.* to user@localhost identified by '비밀번호' with grant option;


 mysql > flush privileges;     // 변경된 내용을 반영(권한 적용)


 

사용자에게 부여된 권한 확인

 

mysql > SHOW GRANTS FOR test@localhost;  -- userid 와 host명까지 붙여서 검색해야 함

mysql > SHOW GRANTS FOR test@'%';

mysql > SHOW GRANTS FOR test@'220.110.100.50';

//test 유저 생성 후 권한 부여

//권한 확인

 

사용자에게 데이터베이스 사용권한 제거


 

revoke all on DB명.테이블명 from 사용자ID;     // 모든 권한을 삭제

이제 다시 show grants 로 정보를 확인해보면

user 정보는 남아 있는데, 권한부여 정보는 삭제되고 없는 것이 보인다.


 

 

사용자 계정 삭제

mysql > drop user userid@'%';

mysql > drop user userid@localhost;

 

 

 

반응형

'IT Story > DB' 카테고리의 다른 글

MSSQL 인덱스 새성 및 삭제  (0) 2017.08.10
Mysql DB 백업하기  (0) 2017.07.31
Mysql - 저장 프로시저 생성 및 호출 방법  (0) 2017.05.23
MSSQL - 줄바꿈, 탭문자 제거 방법  (0) 2017.04.20
MSSQL DATETIME 포멧 변경 방법  (0) 2017.04.19
댓글