# MySQL의 권한에 대한 주변 이야기는 복잡해 1
Category: "MySQL, Oracle, 데이터베이스" , Tags: grant, MySQL, User, UserID, 권한
사장입니다.
아휴 ―MySQL에 대해서 쓰는 것이 점점 귀찮아지는구나. 아! 거짓말이에요.
이번은 사용자의 권한에 대한 주변 이야기.
그 4:MySQL의 권한에 대한 주변 이야기는 복잡해 1
이것은 언제나 늘 꽤 걸려하는 사람이 많죠.
특히 Oracle경험자 분들.
MySQL의 권한의 컨트롤은 밑의 설명과 같은 상태(엄밀하게는 그러한 사이트에 가주세요)로 이루어집니다.
·접속시에 사용자ID(User+Host)에서 접속하는 권한이 있는지를 체크
·접속후의 모든 리퀘스트 때에 UserID(User+Host)에 리퀘스트를 실행할 권한이 있는지를 체크
이것을 분해해서 설명해 보겠습니다.
·접속시에 사용자ID(사용자+호스트)로 접속할 권한이 있는지를 체크
단순한 것이지만, MySQL이 접속 체크에 사용하는 Key는, User가 아니고 User+Host 일것.
권한을 설정하는 것도 당연 User단위가 아니고 User+Host 단위일 것.
이 User+Host의 조합을 MySQL에서는 UserID라고 부름.
shacho사용자가 액세스할 때의 예 로서는 이런 느낌
shacho@'%' 모든 호스트로부터 액세스 가능
shacho@localhost 로컬 호스트(서버 바로 그것)만 액세스 가능
shacho@' 192.168.1.99' IP 어드레스 192.168.1.99의 호스트로부터 액세스 가능
shacho@'tracksys.jp'도메인 명tracksys.jp으로부터 액세스 가능
위의 4개의 예는 MySQL이 접속 체크하는 때는 모두 다른 UserID 로써 취급됨.
예를 들면 아래의 Grant문장을 실행한 때는, shacho사용자는 localhost로부터 접속했을 때만, 모든 DB에 모든 권한으로 액세스 가능
GRANT ALL ON * .* TO shacho@localhost IDENTIFIED BY 'password'
분해하면
ALL: 모든 권한을 부여
ON * .*: 모든 DB의 모든 오브젝트에의 액세스를 허가
TO shacho@localhost:shacho사용자에 부여.
그러나, localhost로부터의 액세스에 한함
이 된다.
localhost 뿐만 아니고 같은 subnet의 호스트부터도 액세스할 수 있게 설정함
GRANT SELECT ON *.* TO shacho@'192.168.1.%' IDENTIFIED BY 'password'
권한을 SELECT만으로 설정했기 때문에, shacho사용자가 localhost이외의 동일 subnet로부터 접속했을 경우에는 검색밖에 할 수 없음.
이렇게, UserID에 대하여 다른 권한을 설정할 수 있지만, 여기에서 UserID(shacho라든가,root라든가)와 User를 혼동하게 되면, 심하게 깊은 늪에 빠지는 꼴이 되어버림.
그러나 여기만 이해해 두면 권한의 설정은 칼럼 단위까지라든가 설정할수 있지만,
꼼꼼하게 작업해 나가는 것 뿐이므로, 그렇게 문제는 없지 않을까 하고 생각합니다.
이것에 대해서는 다음 번, 접속 후의 권한 체크의 설명에서 좀더 자세히 설명하겠습니다.
개인적으로는 벌써 귀찮아져서, Excel이나 뭔가로 User설정표를 만들어 두고,
거시적으로 일제히 Grant문장을 작성하는 것을 추천.
그러나, 권한 주변의 구조를 이해하고 나서 부터 하는 것이 좋을 듯.


