6.2.3 계정 이름 지정
MySQL 계정 이름은 사용자 이름과 호스트 이름으로 구성됩니다. 이렇게하면 다른 호스트에서 연결 가능한 동일한 이름을 가진 사용자를위한 계정을 만들 수 있습니다. 이 섹션에서는 특수한 값과 와일드 카드 규칙을 포함하여 계정 이름 작성 방법에 대해 설명합니다.
CREATE USER
, GRANT
, SET PASSWORD
등의 SQL 문은 다음 규칙을 사용하여 계정 이름을 작성하십시오.
계정 이름의 구문은
'
입니다.user_name
'@'host_name
'사용자 이름만으로 구성된 계정 이름은
'
와 동일합니다. 예를 들어,user_name
'@'%''me'
는'me'@'%'
와 동일합니다.사용자 이름 및 호스트 이름은 그들이 인용되지 않은 식별자로 사용하는 경우 인용 할 필요는 없습니다. 따옴표가 필요한 것은
user_name
문자열이 특수 문자 ( "-
")를 포함하고,host_name
문자열이 특수 문자 또는 와일드 카드 문자 ( "%
")를 포함 할 경우, 예를 들어'test-user'@'%.com'
과 같이됩니다.사용자 이름 및 호스트 이름은 역 따옴표 ( "
`
"), 작은 따옴표 ( ''
') 또는 큰 따옴표 ( ""
") 중 하나를 사용하여 식별자 또는 문자열로 인용 부호로 묶습니다.사용자 이름 및 호스트 이름 부분을 인용하는 경우 별도로 묶어야합니다. 즉,
'me'@'localhost'
라고 기술하고'me@localhost'
는 설명하지 않습니다. 후자는'me@localhost'@'%'
로 해석됩니다.CURRENT_USER
또는CURRENT_USER()
함수에 대한 참조는 현재 클라이언트 사용자 이름 및 호스트 이름의 문자를 지정하는 것과 같습니다.
MySQL은 mysql
데이터베이스의 부여 테이블에 계정 이름을 저장할 때 사용자 이름과 호스트 이름 부분에 별도의 컬럼을 사용합니다.
user
테이블에 계정마다 1 행이 포함됩니다.User
와Host
컬럼은 사용자 이름과 호스트 이름을 포함합니다. 이 테이블에 계정이있는 글로벌 권한도 지정됩니다.더많은 부여 테이블에는 데이터베이스 및 데이터베이스 오브젝트에 대한 계정이 가지는 권한이 표시됩니다. 이 테이블에는 계정 이름을 저장하기위한
User
및Host
컬럼이 있습니다. 이 테이블의 각 행은 동일한User
와Host
값을 가진user
테이블의 계정에 연결되어 있습니다.
부여 테이블 구조에 대한 추가 자세한 내용은 섹션 6.2.2 "권한 시스템 부여 테이블" 을 참조하십시오.
사용자 이름 및 호스트 이름은 다음과 같은 특수한 값을 사용하거나 와일드 카드 규칙이 적용되기도합니다.
사용자 이름은 입 접속을 시도하는 사용자 이름과 문자가 일치하는 공백이 아닌 값이거나 모든 사용자 이름과 일치하는 빈 값 (빈 문자열)입니다. 공백의 사용자 이름을 가진 계정은 익명 사용자입니다. SQL 문에서 익명 사용자를 지정하려면 ''@'localhost'
처럼 따옴표로 둘러싼 빈 사용자 이름 부분을 사용합니다.
계정 이름의 호스트 이름 부분은 다양한 형태를 가질 수 와일드 카드가 허용됩니다.
호스트 값은 호스트 이름 또는 IP 주소 (IPv4 또는 IPv6) 할 수 있습니다.
'localhost'
라는 이름은 로컬 호스트를 나타냅니다. IP 주소'127.0.0.1'
는 IPv4 루프백 인터페이스를 나타냅니다. IP 주소'::1'
은 IPv6 루프백 인터페이스를 나타냅니다.와일드 카드 문자 '
%
'및'_
'을 호스트 이름 또는 IP 주소 값으로 사용할 수 있습니다. 이들은LIKE
연산자에서 실행되는 패턴 매칭 연산과 같은 의미를가집니다. 예를 들어, 호스트 값'%'
는 모든 호스트 이름과 일치하고'%.mysql.com'
값은mysql.com
도메인의 모든 호스트에 일치하고'192.168.1.%'
는 192.168.1의 클래스 C 네트워크의 모든 호스트와 일치합니다.IP 와일드 카드 값을 호스트 값에 사용할 수 있기 때문에 (서브넷의 모든 호스트에 일치하는
'192.168.1.%'
등) 일부 사용자가 호스트192.168.1.somewhere.com
을 지정하여 이 기능을 악용하려고 할 수 있습니다. 이러한 시도를 저지하기 위해 MySQL에서는 숫자와 점으로 시작하는 호스트 이름과 일치가 허용되지 않습니다. 따라서1.2.example.com
같은 이름을 가지는 호스트가있는 경우, 그 이름은 계정 이름의 호스트 부분과 결코 일치하지 않습니다. IP 와일드 카드 값은 호스트 이름 대신 IP 주소 만 일치 할 수 있습니다.IPv4 주소에 지정된 호스트 값에 대해 네트워크 번호에 사용하는 주소 비트의 수를 나타내는 넷 마스크를 지정할 수 있습니다. 넷 마스크 표기는 IPv6 주소는 사용할 수 없습니다.
구문은
입니다. 예 :host_ip
/netmask
CREATE USER 'david'@'192.58.197.0/255.255.255.0';
이는
david
는 다음 조건이 true가되는 IP 주소client_ip
을 가진 모든 클라이언트 호스트에서 연결할 수 있습니다.client_ip
&netmask
=host_ip
즉, 다음과 같은
CREATE USER
문이 있다고합니다.client_ip
& 255.255.255.0 = 192.58.197.0이 조건을 충족 MySQL 서버에 접속할 수있는 IP 주소는
192.58.197.0
에서192.58.197.255
까지의 범위의 것입니다.넷 마스크는 8,16,24 또는 32 비트 주소를 사용하도록 서버에 지시하는 경우에만 사용할 수 있습니다. 예 :
192.0.0.0/255.0.0.0
: 192 클래스 A 네트워크의 모든 호스트192.168.0.0/255.255.0.0
: 192.168 클래스 B 네트워크의 모든 호스트192.168.1.0/255.255.255.0
: 192.168.1 클래스 C 네트워크의 모든 호스트192.168.1.1
:이 특정 IP 주소를 가진 호스트 만
다음 넷 마스크는 28 비트를 마스크하지만 28은 8의 배수가 없기 때문에 작동하지 않습니다.
192.168.0.1/255.255.255.240
서버는 클라이언트 호스트 이름 또는 IP 주소의 시스템 DNS 확인자에 의해 반환 된 값을 사용하여 계정 이름의 호스트 값의 일치를 클라이언트 호스트에서 실행합니다. 계정 호스트 값이 넷 마스크 기법을 사용하여 지정되는 경우를 제외하고,이 비교는 IP 주소로 지정되는 계정 호스트 값도 문자열의 물건 맞추기로 실행됩니다. 즉, DNS에서 사용되는 것과 같은 형식으로 계정 호스트 값을 지정해야한다는 것을 의미합니다. 명심해야 문제의 예를 보여줍니다.
로컬 네트워크에있는 호스트의 정규화 된 이름이
host1.example.com
이라고합니다. DNS가이 호스트 이름 참조를host1.example.com
로 반환하는 경우 계정 호스트 값이 이름을 사용합니다. 그러나 DNS가host1
만 돌려주는 경우, 대신host1
을 사용합니다.DNS가 특정 호스트의 IP 주소로
192.168.1.2
을 돌려주는 경우, 이것은 계정 호스트 값192.168.1.2
와 일치하지만192.168.01.2
과 일치하지 않습니다. 마찬가지로, 이것은192.168.1.%
같은 계정 호스트 패턴에 일치하지만192.168.01.%
일치하지 않습니다.
이러한 문제를 피하기 위해 DNS 호스트 이름과 주소를 반환 할 때 형식을 확인하고 같은 형식의 값을 MySQL 계정 이름에 사용하도록하는 것이 좋습니다.