본문에서 다루는 MySQL 버전은 5.6 버전이며
5.7 버전부터 일부 변경 된 사항이 있음!!!
계정 생성)
mysql -u root -p 를 입력하여 MySQL 에 접속
그 다음, 스키마를 mysql 로 변경하겠다.
use mysql; 를 입력합니다.
지금부턴 SQL 질의문 이기 때문에 마지막에 세미콜론(;) 을 붙여야한다.
mysql 스키마에 테이블 구성을 알아보겠습니다.
show tables; 를 입력합니다.
여기서 계정에 관련 된 정보를 관리하는 테이블은
user 테이블 이다.
select host, user, password from user; 를 입력하여
계정정보를 조회
** MySQL 5.7 부터 user 테이블에 password 컬럼이 삭제되고
authentication_string 컬럼으로 변경.
MySQL 5.7 Reference 참고
https://dev.mysql.com/doc/refman/5.7/en/grant-tables.html
조회시 ** 5.7 이상 password => authentication_string 으로 변경해서 조회하면 정상적으로조회된다.
현재는 root 계정밖에 존재하지 않습니다.
그럼 새로운 계정을 하나 추가 해보겠습니다.
계정 생성)
create user '계정아이디'@localhost identified by '비밀번호';
제대로 추가되었는지
select host, user, password from user; 로 조회 해보겠습니다.
정상적으로 추가되었다.
헌데 방금 만든 계정은 localhost(로컬) 에서 만 접속할 수 있다.
즉, 외부IP 에서는 접속할 수 없다.
이 경우 host 를 '%'로 해주면 외부에서의 접속을 허용한다는 설정이 됩니다.
방금 전 create user '계정아이디'@localhost identified by '비밀번호'; 에서
localhost 부분을 지우고 '%'로 변경.
create user '계정아이디'@'%' identified by '비밀번호';
host 를 '%' 로 주면 모든 외부 IP에서 접속할 수 있다.
만약 특정 IP 대역에서만 접속하게 설정하려면 'IP대역.%' 로 주면 된다.
예) '172.168.%' -> IP 가 172.168.xxx.xxx 에서만 접속 가능
계정 삭제
빨간 테두리가 계정 삭제를 하는 SQL 질의 입니다.
delete from user where user='dubbingLee';
계정ID가 dubbingLee 인 아이디를 찾아서 삭제.
정상적으로 삭제
아까는 특정IP 일 경우 접속가능하게 제한하는 설정만 해봤는데
해당 계정이 특정 스키마에 만 접근할 수 있게 권한을 부여할 수도 있다.
스키마 권한 제어에는 SQL 명령어 중 DCL (Data Control Language) 이 사용된다.
*DCL 종류에는 GRANT 와 REVOKE 이 있다.
create schema testDB; 를 입력하여
testDB 스키마를 만든 뒤, use testDB; 를 입력하여
사용 스키마 변경을 하겠습니다.
그 다음, grant all privileges on '스키마명'.'테이블명' to 계정명@localhost identified by '계정비밀번호' with grant option; 을
입력하여 특정 스키마의 테이블에만 접근할 수 있는 계정을 만들었다.
위 질의문은 dubbingLee 계정을 만들고, 외부 IP에서 접속가능하며,
해당 계정권한을 testDB 스키마에 모든 테이블에서 select, insert, update, delete 할 수 있게 한다.
모든 권한 부여
grant all privileges on *.* to '계정명'@'localhost' with grant option;
** 만약 계정에 select(조회) 권한만 주고 싶다면 다음과 같이 입력하면 된다.
grant select privileges on 'DB명'.'테이블명' to '계정명'@'%' identified by '계정비밀번호' with grant option;
flush privileges; 를 입력하여 권한 적용을 한다.
권한이 제대로 부여됐는지 확인
show grants for '계정명'@'localhost;
조회한 계정의 권한이 나왔다.
방금 위에서 설정한 권한이 제대로 적용된 걸 확인하였다.
계정에 부여된 권한을 제거하는 방법
revoke all on '스키마명'.'테이블명' from '계정명'@'localhost'; 를 입력
권한이 제대로 제거됐는지 확인.
show grants for '계정명'@'localhost'; 를 입력
처음에 설정한 권한이 빠진 것을 확인
'DataBase' 카테고리의 다른 글
트랜잭션과 무결성 (0) | 2023.10.20 |
---|---|
Oracle과 MySQL의 큰 차이점 (0) | 2021.04.22 |
[Oracle] 제약조건 (0) | 2021.04.16 |
[MySQL] 접속 (0) | 2021.04.15 |
[Oracle] 시퀀스(Sequence) (0) | 2021.04.14 |