database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Tutorials 14582 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 14582
MySQL 에서 사용자와 권한 설정
작성자
정재익(advance)
작성일
2002-01-06 12:49
조회수
18,470

MySQL에서 사용자와 권한

(2001.3.8)

 

안녕하세요? kimho입니다.

 

참으로 오랜만에 강좌를 쓰네요.

오늘은 mySQL이 어떻게 해서 사용자와 권한을 관리하는지 알아보겠습니다. 이걸 알아야 mySQL에서 테이블도 관리하고, jdbc드라이버로 jsp랑 연동도하고 할 수 있습니다.

 

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

 

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

 

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

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

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

데이타베이스 관리 시스템이라는 의미의 mySQL과, 데이타베이스이름에 해당하는 mysql을 혼동하시지 마시라는 얘기를 먼저 드려야겠네요.

 

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

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

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

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

 

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

먼저 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라는 문장을 이용해서 메모리에 다시 올려놓도록 하는것이지요.

그럼 이해가되셨나요?

 

이것으로 mySQL에서 사용자관리에 관한 강좌를 마치겠습니다.

다른 의문나는 사항은 Q&A 게시판에 올려주세요.

 

그럼 이만.... 자나깨나 불조심~~ ^^

이 글에 대한 댓글이 총 2건 있습니다.

이미 생성된 DB를 이용하는 것만 하다가

새로운 홈페이지를 운영할 일이 있어서 DB를 하나 추가해야 하는데

책도 뒤지고 사람들한테 물어보고 이틀동안 용을 썼습니다.

 

그러다가 정재익님의 일목요연한 설명과 꼭 필요한 것만 명시한 예문을 보고서야 DB 생성에 성공했습니다.

 

감사합니다.

김라경님이 2002-06-28 13:10에 작성한 댓글입니다.

감사합니다.

저도 많은 도움이 되었습니다.

그럼....

이영구님이 2002-11-08 16:48에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
14690Postfix + Mysql
정재익
2002-01-10
6447
14658Using MySQL with XML
정재익
2002-01-09
7892
14622ERROR 2003: Can't connect to MySQL server on 'localhost' <10061>
황동철
2002-01-08
18998
14582MySQL 에서 사용자와 권한 설정 [2]
정재익
2002-01-06
18470
14377First Guide to MySQL (3)
정재익
2001-12-23
14941
14376First Guide to MySQL (2)
정재익
2001-12-23
21468
14375First Guide to MySQL (1)
정재익
2001-12-23
22348
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다