| 제 4강 mysql에 새로운 사용자 권한 추가하기 |
|
제 4강 mysql에 새로운 사용자 권한 추가하기 두가지 방법으로 사용자를 추가할 수 있다 : GRANT 문 사용 또는 mysql 승인 테이블 직접 조작. GRANT 문을 사용하는 것이 더 선호되는 방법이다. 아래의 예제는 새로운 사용자를 설정하기 위해 어떻게
mysql 클라이언트를 사용하는지 보여준다. GRANT 문을 이용해 새로운 사용자를 추가할 수 있다: shell> mysql --user=root mysql mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY 'something' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%" IDENTIFIED BY 'something' WITH GRANT OPTION; mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost; mysql> GRANT USAGE ON *.* TO dummy@localhost;
위 GRANT 문에서는 세 명의 사용자를 설정한다: monty : 어느 곳에서든 서버에 연결할 수 있는 완전한
슈퍼유저이지만 비밀번호를 사용해야 한다. admin : 비밀번호 없이 localhost에서 접속할 수
있으며 reload와 process 관리자 권한을 승인받은 사용자. 이경우 사용자가
mysqladmin processlist 뿐만 아니라 mysqladmin reload, mysqladmin refresh,
mysqladmin flush-* 명령을 실행할 수 있다. 이것은 추가적인 GRANT 문을 사용해 나중에 승인할 수 있다. dummy : 비밀번호없이 연결할 수 있지만 오직 localhost에서만
연결 가능한 사용자. 또한 동일한 사용자 접근 정보를 INSERT 문을 통해 직접 추가할 수 있으며 이경우에는 서버가 승인 테이블을 다시 읽도록 알려주어야 한다.(**FLUSH PRIVILEGES 사용**) shell> mysql --user=root mysql mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('something'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y') mysql> INSERT INTO user VALUES('%','monty',PASSWORD('something'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y') mysql> INSERT INTO user SET Host='localhost',User='admin', Reload_priv='Y', Process_priv='Y'; mysql> INSERT INTO user (Host,User,Password) VALUES('localhost','dummy',"); mysql> FLUSH PRIVILEGES; mysql 버전에 따라 위에서 'Y' 값이 다를 수 있다는 것을 기억하자. 3.22.11 버전 이후에서 사용할 수 있는 확장된 INSERT 문은 여기서 admin 사용자에게 사용되었다. 슈퍼유저를 설정하기 위해 권한필드를 'Y'로 한 user 테이블 목록만 만들면 된다는 것을 기억하자. db 나 host 테이블 목록은 필요없다. (** 관리자 권한은 db나 host 테이블과는 전혀 관련이 없다. db는 접속할 수 있는 데이터베이스에 대해 상세하게 설정하고 host 테이블은 db테이블을 좀 더 정교하게 설정하기 위해 필요한 것이다. 관리자 권한은 오직 user 테이블만 관련되어있다 **) 마지막 INSERT 문(dummy 사용자)에서는 user 테이블의 권한 컬럼이 명확하게 설정되지 않았다. 왜냐면 이 컬럼의 기본값은 'N'로 되어 있기 때문이다. 다음의 예제에서는 custom 이라는
사용자를 추가한다. custom은 localhost, server.domain, whitehouse.gov에서
접속할 수 있다. localhost에서는 bankaccount 데이터베이스에만
접속할 수 있으며 whitehouse.gov에서는 expenses 데이터베이스에,
모든 세 호스트상에서는 customer 데이터베이스에 접속하길 원한다. 모든
세 호스트상에서 stupid라는 비밀번호를 사용하길 원한다.
shell> mysql --user=root mysql mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON bankaccount.* TO custom@localhost IDENTIFIED BY 'stupid'; mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON expenses.* IDENTIFIED BY 'stupid'; mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON customer.* TO custom@'%' IDENTIFIED BY 'stupid'; 승인 테이블을 직접 수정해 사용자 권한을 설정하려면 다음의 명령을 사용하자. (마지막에 FLUSH PRIVILEGES 를 사용해야 한다는 것을 기억하자):
shell> mysql --user=root mysql mysql> INSERT INTO user (Host,User,Password) VALUES('localhost','custom',PASSWORD('stupid')); mysql> INSERT INTO user (Host,User,Password) VALUES('server.domain','custom',PASSWORD('stupid')); mysql> INSERT INTO user (Host,User,Password) VALUES('whitehouse.gov','custom',PASSWORD('stupid')); mysql> INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv) VALUES ('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y'); mysql> INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv) VALUES ('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y'); mysql> INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv) VALUES('%','customer','custom','Y','Y','Y','Y','Y','Y'); mysql> FLUSH PRIVILEGES; 처음의 세가지 INSERT 문은 custom 사용자가 비밀번호를 사용하여 다양한 호스트에서 접속할 수 있도록 user 테이블 목록을 추가한다. 그렇지만 그에게 어떠한 퍼미션도 승인하지 않는다. (모든 권한은 기본값으로 'N' 이다) 다음의 세가지 INSERT 문은 적절한 호스트에서 접속을 할 때, custom 에게 bankaccount, expenses, customer 데이터베이스에 대한 권한을 승인하는 db 테이블 목록을 추가한다. 일반적으로 승인 테이블을 직접 수정하였으면, 변경된 권한을 적용하기 위해 서버가 승인 테이블을 다시 읽도록 해 주어야 한다. 특정한 사용자가 특정한 도메인의 시스템에서 접속할 수 있도록 설정하고자 한다면, 다음과 같이 GRANT 문을 설정할 수 있다:
mysql> GRANT ... ON *.* TO myusername@"%.mydomainname.com" IDENTIFIED BY 'mypassword'; 승인 테이블을 직접 수정하려면 다음과 같이 한다:
mysql> INSERT INTO user VALUES ('%.mydomainname.com', 'myusername',PASSWORD('mypassword'),...); mysql> FLUSH PRIVILEGES; ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
승인 테이블을 다루기 위해 xmysqladmin, mysql_webadmin,
xmysql 프로그램을 사용할 수 있다. http://www.mysql.com/Contrib
에서 이러한 유틸리티를 찾을 수 있다. |