슬기로운 개발생활

[MySQL] DB 생성 및 GRANT문을 이용한 사용자 생성 및 권한 관리

by coco3o
반응형

1. DB 생성

cmd에서 관리자 계정인 root로 DBMS에 접속 후 password를 입력한다.
(password는 mySQL 설치시 입력했던 password)

mysql -uroot -p

mysql 접속 후 DB 생성

mysql> create database DB이름;

현재 DBMS에 존재하는 모든 DB 확인

mysql> show databases;

사용할 DB 선택

mysql> use db이름;

현재 DB에 존재하는 모든 테이블 목록 확인

mysql> show tables;

테이블의 구조(스키마) 확인(DESCRIBE 명령)

mysql> desc table이름;

2. DB 사용자 생성 및 권한 부여

사용자 권한?
- 사용자에 따라서 접근할 수 있는 DB 데이터와 사용할 수 있는 기능을 제한

사용자 추가

mysql> create user 사용자ID; 

# 사용자(user)를 추가하면서 패스워드까지 설정
mysql> create user 사용자ID@localhost identified by '비밀번호';

# 외부 접근 권한을 부여하려면, Host를 '%'로 하여 추가
mysql> create user '사용자ID'@'%' identified by '비밀번호';

# '%'의 의미는 외부에서의 접근을 허용하는 것


사용자 삭제

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


사용자에게 DB 테이블 사용 권한 부여


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

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

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

사용자에게 허가된 권한을 확인하려면 SHOW GRANTS;를 사용합니다.

IDENTIFIED BY '비밀번호'; 는 권한부여를 하면서 비밀번호까지 변경하고자 하는 경우이므로 비밀번호를 변경하지 않으려면 이 부분을 빼도 괜찮습니다.

mysql> GRANT ALL PRIVILEGES ON DB명.테이블 TO 사용자ID@localhost IDENTIFIED BY '비밀번호';
# 계정이 이미 존재하면 'IDENTIFIED BY 비밀번호'부분을 추가하면 비밀번호가 변경된다. 
mysql> GRANT ALL PRIVILEGES ON Test_db.* TO Test_user@'%';
mysql> GRANT ALL PRIVILEGES ON Test_db.* TO Test_user@localhost;

DB명뒤에 * 은 모든 테이블에 대한 권한을 의미합니다.
@'%'는 어떤 클라이언트에서든 접근 가능하다는 의미이고, @'localhost' 는 로컬에서만 접근 가능하다는 의미입니다.

mysql> GRANT ALL PRIVILEGES ON DB명.* TO 사용자ID@'200.100.%';
# @'200.100.%'로 하면 IP 주소가 200.100.X.X로 시작되는 모든 IP에서 접속을 허용한다는 의미

mysql> GRANT ALL PRIVILEGES ON DB명.* TO 사용자ID@'200.100.50';
# @'200.100.50'으로 하면 IP 주소가 200.100.50인 IP에서만 접속을 허용한다는 의미


아래는 사용자에게 테이블에 대한 사용권한을 부여합니다.
flush PRIVILEGES는 INSERT, DELETE, UPDATE를 통해 사용자를 추가, 삭제, 권한 변경 등을 수행하였을 때
이 변경 사항을 반영하기 위하여 사용합니다.

mysql> GRANT ALL PRIVILEGES ON test_db.* TO test_user@localhost;
# test_user에게 test_db 모든 테이블에 대한 권한 부여
mysql> GRANT SELECT,INSERT,UPDATE ON test_db.* TO test_user@localhost;
# test_user에게 test_db 모든 테이블에 select,insert,update 권한 부여
mysql> GRANT ALL PRIVILEGES ON *.* TO test_user@localhsost with grant option; 
# test_user에게 모든 데이터베이스 모든 테이블에 권한 부여
# 전역 권한은 모두 광범위한 보안문제가 수반되므로 권한을 허용할 경우 신중해야 함
mysql> flush PRIVILEGES; # 변경된 내용을 메모리에 반영(권한 적용)


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

mysql> SHOW GRANTS FOR test_user@localhost;
mysql> SHOW GRANTS FOR test_user@'%';
mysql> SHOW GRANTS FOR test_user@200.100.50;
# 계정ID와 host명까지 붙여서 검색


사용자에게 DB 사용권한 제거

# 모든 권한을 삭제
mysql> REVOKE ALL ON DB명.테이블명 FROM 사용자ID;


사용자 DB 접속

mysql [-h호스트명] -uDB계정명 -p [DB이름]

[-h 호스트명] 과 [DB이름]은 생략 가능합니다.

반응형

블로그의 정보

슬기로운 개발생활

coco3o

활동하기