Loading...
MySQL 9.5 Reference Manual 9.5의 8.2.4 Specifying Account Names의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
MySQL account 이름은 user name과 host name으로 구성되며, 이를 통해 서로 다른 host에서 접속하는 동일한 user name에 대해 서로 다른 account를 생성할 수 있습니다. 이 절에서는 특수 값과 와일드카드 규칙을 포함하여 account 이름에 대한 구문을 설명합니다.
대부분의 면에서 account 이름은 MySQL role 이름과 유사하지만, Section 8.2.5, “Specifying Role Names”에 설명된 일부 차이점이 있습니다.
Account 이름은
CREATE USER,
GRANT,
SET PASSWORD
와 같은 SQL 문에 나타나며, 다음 규칙을 따릅니다:
Account 이름의 구문은
'user_name'@'host_name'입니다.
@'host_name' 부분은 선택 사항입니다. user name만으로 구성된 account 이름은
'user_name'@'%'와 동일합니다.
예를 들어, 'me'는
'me'@'%'와 동일합니다.
user name과 host name은 따옴표 없이도 적법한 비인용 식별자라면 따옴표를 사용하지 않아도 됩니다.
user_name 문자열에 공백이나 -와 같은 특수 문자가 포함되어 있거나,
host_name 문자열에 특수 문자나 . 또는 %와 같은 와일드카드 문자가 포함된 경우에는 반드시 따옴표를 사용해야 합니다. 예를 들어, account 이름 'test-user'@'%.com'에서는 user name 부분과 host name 부분 모두에 따옴표가 필요합니다.
user name과 host name은 식별자 또는 문자열로서 따옴표로 감쌀 수 있으며, 백틱 (`````), 작은따옴표 ('), 큰따옴표 (")를 사용할 수 있습니다. 문자열 인용 및 식별자 인용 가이드라인은
Section 11.1.1, “String Literals” 및
Section 11.2, “Schema Object Names”를 참조하십시오.
SHOW 문 결과에서 user name과 host name은 백틱 (``````)으로 인용됩니다.
user name과 host name 부분은, 따옴표를 사용하는 경우 각각 따로 인용해야 합니다. 즉,
'me'@'localhost'처럼 작성해야 하며,
'me@localhost'처럼 작성해서는 안 됩니다. (후자는 실제로는 'me@localhost'@'%'와 동일하며, 이 동작은 이제 사용 중단(deprecated) 상태입니다.)
CURRENT_USER 또는 CURRENT_USER() 함수에 대한 참조는 현재 클라이언트의 user name과 host name을 리터럴로 지정한 것과 동일합니다.
MySQL은 mysql 시스템 데이터베이스의 grant 테이블에 account 이름을 저장하며, user name과 host name 부분을 별도의 컬럼에 저장합니다:
user 테이블은 각 account마다 하나의 행을 포함합니다. User와
Host 컬럼에 user name과 host name이 저장됩니다. 이 테이블은 또한 해당 account가 가지는 전역 권한을 나타냅니다.
다른 grant 테이블은 특정 데이터베이스와 해당 데이터베이스 내 객체에 대해 account가 가지는 권한을 나타냅니다. 이 테이블들은
account 이름을 저장하기 위해 User와 Host 컬럼을 가집니다. 이 테이블의 각 행은 동일한 User와 Host 값을 가지는 user 테이블의 account와 연관됩니다.
접근 검사 목적상, User 값의 비교는 대소문자를 구분합니다. Host 값의 비교는 대소문자를 구분하지 않습니다.
Grant 테이블에 저장되는 user name과 host name의 속성(최대 길이 등)에 대한 추가적인 세부 정보는 Grant Table Scope Column Properties를 참조하십시오.
User name과 host name에는 다음에 설명하는 것처럼 특정 특수 값 또는 와일드카드 관례가 있습니다.
Account 이름의 user name 부분은 공백이 아닌 값으로, 들어오는 연결 시도의 user name과 리터럴로 일치하거나, 또는 어떤 user name과도 일치하는 공백 값(빈 문자열)일 수 있습니다. User name이 빈 account는 anonymous user입니다. SQL 문에서 anonymous user를 지정하려면 ''@'localhost'와 같이, user name 부분을 빈 문자열에 대한 인용으로 사용합니다.
Account 이름의 host name 부분은 여러 형태를 취할 수 있으며, 와일드카드도 허용됩니다:
Host 값은 host name 또는 IP 주소(IPv4 또는 IPv6)일 수 있습니다. 이름 'localhost'는 로컬 host를 나타냅니다. IP 주소 '127.0.0.1'은 IPv4 루프백 인터페이스를 나타냅니다. IP 주소 '::1'은 IPv6 루프백 인터페이스를 나타냅니다.
Host name 또는 IP 주소 값에서 % 및 _ 와일드카드 문자 사용이 허용되지만, 사용 중단 상태이므로 향후 MySQL 버전에서 제거될 수 있습니다. 이 문자들은
LIKE 연산자를 사용한 패턴 매칭 연산에서와 동일한 의미를 가집니다. 예를 들어, host 값이 '%'이면 모든 host name과 일치하고, 값이 '%.mysql.com'이면 mysql.com 도메인의 어떤 host와도 일치합니다.
'198.51.100.%'는 198.51.100 클래스 C 네트워크의 모든 host와 일치합니다.
IP 와일드카드 값이 host 값에서 허용되기 때문에(예: '198.51.100.%'를 사용하여 서브넷의 모든 host와 일치시키는 경우), 누군가 198.51.100.somewhere.com과 같이 host 이름을 지어 이 기능을 악용하려고 시도할 수 있습니다. 이러한 시도를 막기 위해, MySQL은 숫자와 점으로 시작하는 host name에 대해서는 매칭을 수행하지 않습니다. 예를 들어, host 이름이 1.2.example.com인 경우, 이 이름은 account 이름의 host 부분과 결코 일치하지 않습니다. IP 와일드카드 값은 host name이 아닌 IP 주소에만 일치할 수 있습니다.
partial_revokes가
ON인 경우, MySQL은 grant에서 %와 _를 와일드카드가 아닌 리터럴 문자로 취급합니다. 이 와일드카드들의 사용은 (이 변수의 값과 관계없이) 사용 중단 상태이며, 이 기능은 향후 MySQL 버전에서 제거될 것으로 예상해야 합니다.
Host 값을 IPv4 주소로 지정하는 경우, 네트워크 번호에 사용할 주소 비트 수를 나타내기 위해 넷마스크를 함께 지정할 수 있습니다. 넷마스크 표기법은 IPv6 주소에는 사용할 수 없습니다.
구문은
host_ip/netmask입니다.
예:
1CREATE USER 'david'@'198.51.100.0/255.255.255.0';
이는 david가 IP 주소가
_client_ip_인 어떤 클라이언트 host에서든, 다음 조건을 만족하는 경우에만 접속할 수 있게 합니다:
1client_ip & netmask = host_ip
즉, 앞에서 제시한 CREATE USER 문에 대해서는:
1client_ip & 255.255.255.0 = 198.51.100.0
이 조건을 만족하는 IP 주소 범위는
198.51.100.0에서
198.51.100.255까지입니다.
넷마스크는 일반적으로 1로 설정된 비트들이 먼저 오고, 그 뒤를 0으로 설정된 비트들이 따릅니다. 예:
198.0.0.0/255.0.0.0: 198 클래스 A 네트워크의 어떤 host든 허용198.51.0.0/255.255.0.0: 198.51 클래스 B 네트워크의 어떤 host든 허용198.51.100.0/255.255.255.0: 198.51.100 클래스 C 네트워크의 어떤 host든 허용198.51.100.1: 이 특정 IP 주소를 가진 host만 허용IPv4 주소로 지정된 host 값은 198.51.100.44/24와 같이 CIDR 표기법으로도 작성할 수 있습니다.
Server는 account 이름의 host 값과 클라이언트 host를, 클라이언트 host name 또는 IP 주소에 대해 시스템 DNS 리졸버가 반환하는 값을 사용하여 비교합니다. Account host 값이 넷마스크 표기법으로 지정된 경우를 제외하면, server는 이 비교를 문자열 비교로 수행하며, 이는 account host 값이 IP 주소로 주어진 경우에도 마찬가지입니다. 이는 DNS에서 사용하는 형식과 동일한 형식으로 account host 값을 지정해야 함을 의미합니다. 다음은 주의해야 할 문제의 예입니다:
로컬 네트워크 상의 host의 완전한 도메인 이름이 host1.example.com이라고 가정합니다. DNS가 이 host에 대한 이름 조회에 대해
host1.example.com을 반환한다면 account host 값에 이 이름을 사용하십시오. DNS가 단지 host1만 반환한다면 host1을 사용해야 합니다.
DNS가 특정 host에 대한 IP 주소로
198.51.100.2를 반환하는 경우, 이는 account host 값이 198.51.100.2일 때는 일치하지만
198.051.100.2와는 일치하지 않습니다. 마찬가지로, 198.51.100.%와 같은 account host 패턴과는 일치하지만
198.051.100.%와는 일치하지 않습니다.
이와 같은 문제를 피하기 위해, DNS가 host name과 주소를 어떤 형식으로 반환하는지 확인하는 것이 좋습니다. MySQL account 이름에서는 DNS가 사용하는 것과 동일한 형식의 값을 사용하십시오.
8.2.3 Grant Tables
8.2.5 Specifying Role Names