[DB] MySQL 사용자(USER) 생성,삭제,권한부여 하기

MS SQL은 DB별로 USER 생성 사용 했는데
AWS RDS MySQL은 루트계정(최상위계정)으로만 사용을 해서 잊고 있다가
DB별로 USER 사용하는 MySQL에 잠깐 당황을 해서
(루트계정으로 실행되는 명령어가 안되어서.....)
알고자 씀.

1. 먼저 mysql DB를 선택하고 사용자 확인하기.

use mysql;

select host, user, password from user;
(select * from user; 는 컬럼이 넘 많아서....)

2. 사용자(user) 추가
create user 'userID'@'%' identified by 'userpassword';

user 테이블 host 컬럼보면 값이 % ,localhost가 있는데
%는 외부접근 localhost는 내부접근 그러므로 위에 명령어는 외부접근이 되는
사용자 계정.

또는 '111.222.%' IP 주소가 111.222.xxx.xxx 로 시작하는 IP 대역
       '111.222.333.444' 는 111.222.333.444로 시작하는 특정 IP 외부 허용.


또는 insert into user (host,user,password) values('%','userID',password('userpassword'));
       FLUSH PRIVILEGES;

FLUSH PRIVILEGES란?
INSERT, DELETE, UPDATE를 통해 사용자를 추가, 삭제, 권한 변경 등을 수행하였을 때 이 변경 사항을 반영하기 위하여 사용한다. 이 때 FLUSH PRIVILEGES는 grant 테이블을 reload함으로서 변경 사항을 즉시 반영하도록 한다.
그런데 이 FLUSH PRIVILEGES는 굉장히 성능에 영향을 준다. 특히 습관적으로 FLUSH PRIVILEGES를 사용하는 경우가 있는데 이는 엄청난 부하가 된다.라고 함. 


3. 사용자(user) 삭제

drop user 'userID';
delete from user where user = 'userID';

4. 사용자(user) 권한부여(추가/삭제)

사용자 권한 학인
show grants (접속한 사용자)

사용자에게 부여된 권한 확인
show grants for userID@'%';   --userID와host까지 붙여서 검색해야 함.


 1)추가
grant all privileges on *.* to 'userID'@'%';
사용자에게 모든 DB 모든 테이블에 모든 권한 부여(거의 루트계정)

grant all privileges on DBname.* to 'userID'@'%';
사용자에게 특정 DB에 대한 모든 권한 부여.

grant select, insert, update on DBname.* to 'userID'@'%';
사용자에게 특정 DB에 대한 select,insert,update 권한 부여.

FLUSH PRIVILEGES; (권한 적용)

만약에 권한 추가 명령어에 identified by 'userpassword' 넣어서 실행을 하면
비밀번호도 변경됨.

grant all privileges on *.* to 'userID'@'%' identified by 'userpassword';

2)삭제

revoke all on DBname from userID;
사용자에게 모든 권한 삭제.






















댓글

댓글 쓰기

이 블로그의 인기 게시물

[DB] MySQL 백업 / 복원

[WEB] ASP.NET System.NullReferenceException: 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.

[문서] excel 체크박스 삭제