DBMS의 목적 중 하나는 데이터 베이스에 저장된 정보를 안전하게 보호하는 것이다.
이를 수행하기 위한 수단으로
추가 로그인
암호화 => 민감한 정보
사용자 관리 => 등록된 계정만
권한 관리
가 있다.
사용자 관리
사용자가 DB를 이용하기 위해선 계정이 필요함
사용자가 DBMS에 로그인하면 DBMS는 등록된 사용자인지 검사함
따라서 이를 위해 사전에 계정생성이 필요하다.
root
최고권한을 가진 사용자 계정으로 데이터베이스 및 DBMS에 대한 모든 권한을 가진다.
따라서 비밀번호가 노출되면 위험하고 일반 사용자에게 root권한을 주는 것은 위험하다.
그러므로 일반 사용자들은 별도의 계정을 만들어 사용하도록 해야한다.
사용자계정 생성시
localhost => DBMS 서버에 직접 접근 -> 원격접속 불가
% => DBMS에 원격 접속 ->직접접근 불가
서버에 직접 접속, 원격접속 둘다 하려면 같은이름의 local, remote계정 두가지 많들어야한다.
권한은
1. 모든 DB
2. 패턴에 매칭되는 DB(이름으로 검색), 선택한 DB
에 접근할 수 있는 권한을 줄 수 있고,
select, insert, update, delete, execute, show view, create, alert, index, drop..... 와 같은 권한을 줄 수 있다
Mysql workbench는 DB단위로 권한을 부여하고 회수한다. => 세부적으로 되지 않는다.
따라서 sql 명령문 (grant, revoke)를 이용하여 테이블 단위로 권한을 부여하고 회수할 수 있다.
GRANT select ON my_db.emp TO user_1@localhost;
GRANT select, insert, update ON my_db.dept TO user_1@localhost;
root 사용자일 경우 sql문을 사용하여 사용자를 생성하고 권한부여, 회수가 가능하다.
localhost 사용자의 경우'
create user user_2@localhost identifited by '4321';
원격접속 사용자의 경우
create user 'user_2'@'%' identified by '4321';
생성된 사용자 확인
SELECT * from mysql.user;
mysql => system 카탈로그 정보가 있는 데이터 베이스
user => user테이블에 사용자 정보가 저장
권한의 부여
my_db에 대한 모든 권한 부여
grant all privileges on my_db.* to user_2@localhost;
일부 권한 부여
grant select, insert on my_db.* to user_1@localhost;
테이블에 대한 모든 권한 부여
grant all privilleges on my_db.emp to user_1@localhost;
테이블에 대한 일부 권한 부여
grant select, insert on my_db.emp to user_1@localhost;
with grant option
자신의 권한을 다른 user에게 부여할 수 있게 된다.
grant all privileges on my_db.* to user_2@localhost with grant option;
user_2로 로그인하여 다른 유저에거 자신의 권한을 grant 할 수 있다.
부여된 권한을 확인하려면
flush privileges; //변경된 내용을 메모리에 반영(권한 적용)
show grant for user_1@localhost;
권한 회수 => revoke
revoke delete on my_db.emp from user_2@localhost;
사용자 삭제
drop user user_2@localhost;
사용자 관리 - role
ex) 영업업무를 하는 user1, user2, user3이 있고 필요한 권한은 select, update일 경우
create role sales_role; //역할 생성
grant select, update on my_db.emp to sales_role; //역할에 권한 부여
grant sales_role to user1@localhost;
grant sales_role to user2@localhost;
grant sales_role to user3@localhost;
user1,2,3에 각각 역할을 준다.