이걸 알아야 mySQL에서 테이블도 관리하고, jdbc드라이버로 jsp랑 연동도하고 할 수 있습니다.

처음보시는 분들은 좀 헷갈릴 수도 있겠지만, 두 세 번 보시다보면 쉽게 이해하실 수 있으실겁니다.

자, 그럼 어디 출발해 볼까요?


참, 그전에 한가지 알고 넘어가야 할 부분이 있습니다.

우리는 mySQL이라는 데이타베이스 관리 시스템을 사용합니다만,

그 안에는 이미 mysql이라는 이름의 데이타베이스와 test라는 이름의 데이타베이스가 존재합니다.

데이타베이스 관리 시스템이라는 의미의 mySQL과,

데이타베이스이름에 해당하는 mysql을

혼동하시지 마시라는 얘기를 먼저 드려야겠네요.


그럼 이제 본격적인 설명에 들어가겠습니다.


mySQL에서 사용자 관리는 테이블형태로 합니다.

다시말해 테이블에 사용자를 넣고,빼고,변경하고 하는 것이지요.

mySQL에서 사용자에 관한 테이블은 mysql이라는 데이타베이스userdb라는 테이블입니다.

요번 강좌는 이 userdb 라는 두개의 테이블에 초점을 맞춰서 읽으시면 됩니다.

먼저 mysql이라는 데이타베이스엔 어떤 테이블이 있는지 한 번 보겠습니다.





6개의 테이블이 나옵니다만, 중요한 것은 user와 db테이블입니다.

이 두가지만 알면 나머지는 저절로 알게되는 부분입니다.


user테이블은 아이디,패스워드,접속호스트와 mysql의 전체 데이타베이스에 대한 권한을 설정합니다.

db테이블은 해당하는 데이타베이스에 대한 해당 사용자의 권한을 설정합니다.


무슨말인지 모르시겠죠?

여기까지만 듣고 무슨 말인지 대번에 이해한다면 그게 어디 사람입니까?

아니 뭐 그러지말란 법은 없겠습니다만......., 어쨌거나 진짜 설명은 이제부터입니다.


자, 그럼 먼저 user 테이블에 대하여 알아보겠습니다.

일단 user테이블이 어떻게 생겼는지 볼까요?





이렇게 17개의 컬럼이 나옵니다.

host, user, password 칼럼을 제외한 나머지 부분들은

mySQL에있는 테이타베이스 전체에 대해 권한을 부여할 것인가를 결정하는 부분입니다.


예를들면 Select_priv라는 컬럼에 값이 Y로 되어있으면 전체 데이타베이스들에 대해

Select문장을 실행할 수 있는 권한을 갖게 되는 것입니다.

물론 N으로 되어있으면 전체 데이타베이스들에 대해 Select문장의 권한이 없게 됩니다.

그러나 이 경우 db테이블에 해당 데이타베이스에 대해 Select_priv가 Y로 되어있으면

그 데이타베이스에 대해서는 Select가 가능합니다.

db테이블에 대해서는 일단 잠시후에 다루기로 하구요...


사용자 등록을 할때는 user와 db테이블에 등록을 합니다.

db테이블에 등록되어있지 않으면서 user테이블에만 등록되어있고 모든 권한이 Y로 되어있으면

그 사용자는 모든 데이타베이스에 대해 변경권한을 가지는 슈퍼유저가 될 것입니다.


user테이블에 사용자가 추가된 예를 하나 들어보겠습니다.

host칼럼에 210.123.123.123 이라고 등록되어있고,

user칼럼에 myuser 라고 등록되어있고,

password 칼럼에 1234 라고 등록되어있다면,

현재 210.123.123.123 이라는 컴퓨터에서 접속하는 1234라는 패스워드를 가진

myuser라는 사용자에 대해 권한을 설정하게 됩니다.

나머지 부분이 모두 Y로 되어있다면 이 myuser라는 사용자는 전체 데이타베이스를 운용할 수 있는

슈퍼유저의 권한을 갖는 사용자겠지요.

나머지 부분이 모두 N로 되어있다면 db테이블에 가서

그렇다면 어떤 db에 권한이 있는가를 살펴보게 됩니다.

일반적으로 host칼럼에는 현재 mysql이 설치된 컴퓨터의 이름을 쓰면 됩니다.

예를 들면 아파치의 httpd.conf에서 ServerName에 지정된 이름이지요.


이제 db 테이블을 보겠습니다.





db테이블입니다. db라는 칼럼도 있죠?

만약

host칼럼에는 localhost로,

user칼럼에는 myuser로,

db칼럼에는 testdb로

값이 들어가있다면, user테이블에서 host칼럼에 localhost로 등록되어있는 myuser라는 사용자에 대해

testdb라는 데이타베이스에 대한 권한을 설정하는 부분이 됩니다.

좀 복잡한가요?


그럼 이제 사용자를 한명 추가하면서 예를 들어 설명해 보겠습니다.


mysql> insert into user (host,user,password) values('localhost','kimho',password('1234'));

mysql> insert into db values('localhost','testdb','kimho','y','y','y','y','y','y','y','y','y','y');

mysql> flush privileges;


이렇게 하면 kimho라는 사용자가 한명 추가됩니다.

첫문장부터 하나씩 살펴보겠습니다.


첫번째 문장은 localhost에서 접속하는 kimho라는 사용자가 1234라는 패스워드로 접속하면

접속을 허락하는데, 이 kimho라는 사용자는 전체 데이타베이스에 대한 권한은 없습니다.

왜냐하면 host,user,password에만 칼럼값을 넣으면 나머지는 디폴트로 N으로 들어가기때문입니다.

그렇다면 kimho라는 사용자가 사용할 수 있는 데이타베이스는 무엇일까요?

그것을 바로 두번째 문장에서 추가하는 것입니다. db테이블에 추가를 하게 되지요.


두번째 문장은 이 localhost에서 접속한 kimho라는 사용자는

testdb라는 데이타베이스를 사용할 수 있습니다.

다른 데이타베이스로는 접근할 수 없는것이지요.

kimho라는 사용자는 testdb라는 사용자에 대해서는 모든 권한을 가져야하기때문에 나머지 부분들이

모두 Y로 들어갔습니다.


세번째 문장의 flush privileges는 권한을 새로 읽어들이는 부분입니다.

왜 권한을 새로 읽어들이냐구요?

그 부분에 대해 설명을 드리자면요...

mySQL은 시동이되면 사용자의 접속을 받기위해  user와 db등의 테이블로 부터 권한에 관한 설정을 읽어서

메모리상에 올려놓습니다.

그러면 이 메모리상의 설정을 토대로 사용자의 접속을 받고, 권한을 주고 하는 것이지요.

따라서 insert문으로 사용자를 추가했어도, 이는 테이블에 추가가 되었을뿐이지,

아직 메모리상에는 올라와있지 않으므로 현재로서는 적용이 되어있지 않은 상태가 됩니다.

그래서 flush라는 문장을 이용해서 메모리에 다시 올려놓도록 하는것이지요.

그럼 이해가되셨나요?

 
Posted by gala
l