Loading...
MySQL 9.5 Reference Manual 9.5의 8.2.8 Adding Accounts, Assigning Privileges, and Dropping Accounts의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
MySQL 계정을 관리하려면, 그 목적을 위해 제공되는 SQL 문을 사용합니다:
CREATE USER 와
DROP USER 는 계정을 생성하고 제거합니다.
SHOW GRANTS 는 계정 권한 부여 내용을 표시합니다.
계정 관리 문은 서버가 내부 권한 테이블에 대해 적절한 수정 작업을 수행하도록 합니다. 권한 테이블에 대해서는 Section 8.2.3, “Grant Tables” 에서 설명합니다.
참고
INSERT,
UPDATE,
DELETE 같은 문을 사용하여 권한 테이블을 직접 수정하는 것은 권장되지 않으며, 수행 시 책임은 사용자에게 있습니다. 이러한 수정의 결과로 행이 잘못된 형식이 되면, 서버는 그러한 행을 무시할 수 있습니다.
권한 테이블을 수정하는 모든 작업에 대해, 서버는 테이블이 예상되는 구조를 갖추었는지 확인하고, 그렇지 않으면 오류를 발생시킵니다. 테이블을 예상되는 구조로 업데이트하려면 MySQL 업그레이드 절차를 수행합니다. Chapter 3, Upgrading MySQL 을 참조하십시오.
계정을 생성하는 또 다른 방법은 GUI 도구인 MySQL Workbench를 사용하는 것입니다. 또한 여러 서드파티 프로그램이 MySQL 계정 관리 기능을 제공합니다. phpMyAdmin 도 그 중 하나입니다.
이 섹션에서는 다음 주제를 다룹니다:
여기서 다루는 문에 대한 추가 정보는 Section 15.7.1, “Account Management Statements” 를 참조하십시오.
다음 예시는
mysql 클라이언트 프로그램을 사용하여 새로운 계정을 설정하는 방법을 보여줍니다. 이 예시는 MySQL root 계정이 CREATE USER 권한과, 다른 계정에 부여하는 모든 권한을 가지고 있다고 가정합니다.
Command line에서, MySQL
root 사용자로 서버에 접속하고, 비밀번호 프롬프트에서 적절한 비밀번호를 입력합니다:
1$> mysql -u root -p 2Enter password: (enter root password here)
서버에 접속한 후에는 새로운 계정을 추가할 수 있습니다. 다음 예시는 CREATE USER 및 GRANT 문을 사용하여 네 개의 계정을 설정합니다 ('password' 부분에는 적절한 비밀번호를 대체하십시오):
1CREATE USER 'finley'@'localhost' 2 IDENTIFIED BY 'password'; 3GRANT ALL 4 ON *.* 5 TO 'finley'@'localhost' 6 WITH GRANT OPTION; 7 8CREATE USER 'finley'@'%.example.com' 9 IDENTIFIED BY 'password'; 10GRANT ALL 11 ON *.* 12 TO 'finley'@'%.example.com' 13 WITH GRANT OPTION; 14 15CREATE USER 'admin'@'localhost' 16 IDENTIFIED BY 'password'; 17GRANT RELOAD,PROCESS 18 ON *.* 19 TO 'admin'@'localhost'; 20 21CREATE USER 'dummy'@'localhost';
이들 문으로 생성된 계정에는 다음과 같은 속성이 있습니다:
finley 입니다. 둘 다 모든 글로벌 권한을 가진 슈퍼유저 계정으로, 무엇이든 할 수 있습니다. 'finley'@'localhost' 계정은 로컬 호스트에서 접속할 때만 사용할 수 있습니다. 'finley'@'%.example.com' 계정은 호스트 부분에 '%' 와일드카드를 사용하므로, example.com 도메인 내의 어떤 호스트에서든 접속하는 데 사용할 수 있습니다.'finley'@'localhost' 계정은
localhost 에 대한 익명 사용자 계정이 있는 경우 필요합니다. 'finley'@'localhost' 계정이 없으면, 로컬 호스트에서 finley 가 접속할 때 익명 사용자 계정이 우선하게 되고, finley 는 익명 사용자로 취급됩니다. 그 이유는 익명 사용자 계정의 Host 열 값이 'finley'@'%' 계정보다 더 구체적이며, 따라서 user 테이블 정렬 순서에서 더 앞에 오기 때문입니다. (user 테이블 정렬에 대한 정보는
Section 8.2.6, “Access Control, Stage 1: Connection Verification” 을 참조하십시오.)
'admin'@'localhost' 계정은
admin 이 로컬 호스트에서 접속하는 데만 사용할 수 있습니다. 이 계정에는 글로벌
RELOAD 및
PROCESS 관리 권한이 부여됩니다. 이러한 권한을 통해
admin 사용자는
mysqladmin reload, mysqladmin refresh, mysqladmin flush- xxx 명령과
mysqladmin processlist 를 실행할 수 있습니다. 어떤 데이터베이스에도 접근하기 위한 권한은 부여되지 않습니다. 이러한 권한은 GRANT 문을 사용하여 추가로 부여할 수 있습니다.
'dummy'@'localhost' 계정에는 비밀번호가 없습니다 (이는 안전하지 않으며 권장되지 않습니다). 이 계정은 로컬 호스트에서 접속하는 데만 사용할 수 있습니다. 어떠한 권한도 부여되지 않습니다. 이 계정에 대해 GRANT 문을 사용하여 특정 권한을 부여한다고 가정합니다.
앞의 예시는 글로벌 수준에서 권한을 부여합니다. 다음 예시는 세 개의 계정을 생성하고, 더 낮은 수준, 즉 특정 데이터베이스 또는 데이터베이스 내 객체에 대한 접근 권한을 부여합니다. 각 계정의 사용자 이름은 custom 이지만, 호스트 이름 부분은 서로 다릅니다:
1CREATE USER 'custom'@'localhost' 2 IDENTIFIED BY 'password'; 3GRANT ALL 4 ON bankaccount.* 5 TO 'custom'@'localhost'; 6 7CREATE USER 'custom'@'host47.example.com' 8 IDENTIFIED BY 'password'; 9GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 10 ON expenses.* 11 TO 'custom'@'host47.example.com'; 12 13CREATE USER 'custom'@'%.example.com' 14 IDENTIFIED BY 'password'; 15GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 16 ON customer.addresses 17 TO 'custom'@'%.example.com';
이 세 계정은 다음과 같이 사용할 수 있습니다:
'custom'@'localhost' 계정은
bankaccount 데이터베이스에 접근하기 위한 모든 데이터베이스 수준 권한을 가집니다. 이 계정은 로컬 호스트에서 서버에 접속하는 데만 사용할 수 있습니다.
'custom'@'host47.example.com' 계정은
expenses 데이터베이스에 접근하기 위한 특정 데이터베이스 수준 권한을 가집니다. 이 계정은 host47.example.com 호스트에서만 서버에 접속하는 데 사용할 수 있습니다.
'custom'@'%.example.com' 계정은
customer 데이터베이스의 addresses 테이블에 접근하기 위한 특정 테이블 수준 권한을,
example.com 도메인 내의 어떤 호스트에서든 가집니다. 계정 이름의 호스트 부분에 % 와일드카드 문자를 사용했기 때문에, 이 계정은 도메인 내의 모든 머신에서 서버에 접속하는 데 사용할 수 있습니다.
계정에 대한 권한을 확인하려면
SHOW GRANTS 를 사용합니다:
1mysql> SHOW GRANTS FOR 'admin'@'localhost'; 2+-----------------------------------------------------+ 3| Grants for admin@localhost | 4+-----------------------------------------------------+ 5| GRANT RELOAD, PROCESS ON *.* TO `admin`@`localhost` | 6+-----------------------------------------------------+
계정의 비권한(nonprivilege) 속성을 확인하려면
SHOW CREATE USER 를 사용합니다:
1mysql> SET print_identified_with_as_hex = ON; 2mysql> SHOW CREATE USER 'admin'@'localhost'\G 3*************************** 1. row *************************** 4CREATE USER for admin@localhost: CREATE USER `admin`@`localhost` 5IDENTIFIED WITH 'caching_sha2_password' 6AS 0x24412430303524301D0E17054E2241362B1419313C3E44326F294133734B30792F436E77764270373039612E32445250786D43594F45354532324B6169794F47457852796E32 7REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK 8PASSWORD HISTORY DEFAULT 9PASSWORD REUSE INTERVAL DEFAULT 10PASSWORD REQUIRE CURRENT DEFAULT
print_identified_with_as_hex
시스템 변수를 활성화하면,
SHOW CREATE USER 가 출력하는 해시 값 중 인쇄 불가능한 문자를 포함하는 값이 일반 문자열 리터럴 대신 16진수 문자열로 표시됩니다.
계정 권한을 취소하려면
REVOKE 문을 사용합니다. 권한은 부여할 때와 마찬가지로 서로 다른 수준에서 취소할 수 있습니다.
글로벌 권한을 취소합니다:
1REVOKE ALL 2 ON *.* 3 FROM 'finley'@'%.example.com'; 4 5REVOKE RELOAD 6 ON *.* 7 FROM 'admin'@'localhost';
데이터베이스 수준 권한을 취소합니다:
1REVOKE CREATE,DROP 2 ON expenses.* 3 FROM 'custom'@'host47.example.com';
테이블 수준 권한을 취소합니다:
1REVOKE INSERT,UPDATE,DELETE 2 ON customer.addresses 3 FROM 'custom'@'%.example.com';
권한 취소의 효과를 확인하려면
SHOW GRANTS 를 사용합니다:
1mysql> SHOW GRANTS FOR 'admin'@'localhost'; 2+---------------------------------------------+ 3| Grants for admin@localhost | 4+---------------------------------------------+ 5| GRANT PROCESS ON *.* TO `admin`@`localhost` | 6+---------------------------------------------+
계정을 제거하려면
DROP USER 문을 사용합니다. 예를 들어, 이전에 생성한 일부 계정을 삭제하려면 다음과 같이 합니다:
1DROP USER 'finley'@'localhost'; 2DROP USER 'finley'@'%.example.com'; 3DROP USER 'admin'@'localhost'; 4DROP USER 'dummy'@'localhost';
8.2.7 Access Control, Stage 2: Request Verification
8.2.9 Reserved Accounts