현재 MySQL에 root 사용자만 존재한다.
따라서 새로운 사용자(유저, 계정)을 추가하는 방법을 알아보자.
-- CREATE USER '계정명'@'접속경로' IDENTIFIED BY '비밀번호';
CREATE USER 'codee'@'localhost' IDENTIFIED BY '1234';
CREATE USER 'lucky'@'localhost' IDENTIFIED BY '1234'; -- 권한 부여 X
CREATE USER 'happy'@'localhost' IDENTIFIED BY '1234'; -- new_smartfactoy 스키마에 SELECT 권한 부여
이처럼 codee, lucky, happy 계정을 추가했다.
만약 사용자 비밀번호를 변경하고 싶다면 어떻게 해야할까?
-- ALTER USER '계정명'@'접속경로' IDENTIFIED WITH mysql_native_password BY '비밀번호';
ALTER USER 'codee'@'localhost' IDENTIFIED WITH mysql_native_password BY '12345';
FLUSH PRIVIlEGES; -- 새로 고침해야 반영!
위처럼 비밀번호를 바꾸면 새로고침을 해주어야 반영이 된다.
새로 생성한 사용자를 확인하고 싶다면
SHOW DATABASES;
SELECT user FROM mysql.USER; -- mysql.user: mysql db의 user table
를 통해 사용자를 확인할 수 있다.
- Data Control Language
- 데이터베이스에 접근해 읽거나 쓰는 것을 제한할 수 있는 권한 부여/박탈
- GRANT, REVOKE
- 특정 데이터베이스 사용자에게 특정 작업에 대한 수행 권한 부여
- GRANT 권한 유형 ON 데이터베이스이름.테이블이름 TO '계정명'@'접속경로' WITH GRANT OPTION;
- 모든 데이터베이스의 모든 테이블: *.*
- 모든 권한 부여: GRANT ALL PRIVILEGES
- WITH GRANT OPTION: 권한을 다른 사용자한테 부여 가능할 수 있는 옵션
-- root -> codee -> ?
예시를 들어보며 찾아보자.
codee 사용자에게 모든 데이터베이스의 모든 테이블에 모든 권한 부여
GRANT ALL PRIVILEGES ON *.* TO 'codee'@'localhost' WITH GRANT OPTION;
GRANT 권한 유형 ON 데이터베이스이름.테이블이름
=> 특정 데이터베이스의 모든 테이블에 모든 권한 부여
GRANT ALL PRIVILEGES ON 데이터베이스이름.*
특정 데이터베이스의 특정 테이블에 모든 권한 부여
GRANT ALL PRIVILEGES ON 데이터베이스이름.테이블이름
특정 데이터베이스의 특정 테이블에 SELECT 권한 부여
GRANT SELECT ON 데이터베이스이름.테이블이름
특정 데이터베이스의 특정 테이블에 SELECT, INSERT 권한 부여
GRANT SELECT, INSERT ON 데이터베이스이름.테이블이름
happy사용자에게 new_smartfactory 스키마의 모든 테이블에 SELECT 권한 부여
GRANT SELECT ON new_smartfactory.* TO 'happy'@'localhost' WITH GRANT OPTION;
- 특정 데이터베이스 사용자에게 특정 작업에 대한 권한 박탈
- REVOKE 권한 유형 ON 데이터베이스이름.테이블이름 FROM '계정명'@'접속경로';
codee의 DELETE 권한 삭제
REVOKE DELETE ON *.* FROM 'codee'@'localhost';
codee의 모든 권한 삭제
REVOKE ALL ON *.* FROM 'codee'@'localhost'; -- 빨간 밑줄이 그어지지만 정상 동작
-- DELETE를 사용해도 되지만, DROP을 권장!!
DROP USER 'codee'@'localhost';
DROP USER 'lucky'@'localhost';
DROP USER 'happy'@'localhost';
FLUSH PRIVIlEGES; -- 새로 고침해야 반영!
후기
GUI환경에서 계정을 생성할 때랑은 확실히 다른 느낌이었다. 사실 DCL 쪽을 신입에게 맡기는 일은 드물다고 하셨는데 그래도 알아두면 좋으니 가능하면 기억해두자. 그렇지만 SELECT 쪽을 더 깊이 해야할 것 같다.