6.3.1 사용자 이름과 암호
MySQL에서는 mysql
데이터베이스의 user
테이블에 계정이 포함됩니다. 계정 사용자 이름과 사용자가 서버에 연결할 수있는 클라이언트 호스트 (여러 적용될 수 있음)에 대해 정의됩니다. 계정 암호를 가지고있는 경우도 있습니다. user
테이블에서 계정의 표시 내용은 섹션 6.2.2 "권한 시스템 부여 테이블" 을 참조하십시오. MySQL 5.6에서는 인증 플러그인을 지원하고 있기 때문에 계정은 일부 외부 인증 방식을 사용하여 인증 할 수 있습니다. 섹션 6.3.7 "플러그 인증" 을 참조하십시오.
사용자 이름과 암호가 MySQL에서 사용되는 방법과 운영 체제에서 사용되는 방법 사이에는 몇 가지 차이점이 있습니다.
MySQL에서 인증 목적으로 사용되는 사용자 이름과 Windows 또는 Unix에서 사용되는 사용자 이름 (로그인 이름)과는 전혀 관계가 없습니다. Unix에서는 대부분의 MySQL 클라이언트가 기본적으로 현재의 Unix 사용자 이름을 MySQL 사용자 이름으로 사용하여 로그인을 시도하지만, 이것은 편의상의 목적에 지나지 않습니다. 클라이언트 프로그램은
-u
또는--user
옵션을 사용하여 임의의 사용자 이름을 지정할 수 있도록되어 있기 때문에 쉽게 기본값을 재정의 할 수 있습니다. 이것은 사용자 이름을 사용하면 누군가 서버에 연결을 시도 할 수 있다는 것을 의미하기 때문에 모든 MySQL 계정이 패스워드를 가지고 있지 않으면, 어떤 방법으로도 데이터베이스를 안전하게 할 수 없습니다 . 암호가없는 계정에 사용자 이름을 지정하는 사용자는 누구든지 성공적으로 서버에 연결할 수 있습니다.MySQL 사용자 이름은 최대 16 자까지 지정할 수 있습니다. 운영 체제 사용자 이름은 MySQL 사용자 이름과 전혀 관계이기 때문에 최대 길이가 다를 수 있습니다. 예를 들어, Unix 사용자 이름은 일반적으로 8 자로 제한되어 있습니다.
경고MySQL 서버 및 클라이언트에서는 MySQL 사용자 이름의 길이 제한이 하드 코딩되어 있기 때문에
mysql
데이터베이스의 테이블 정의를 변경하여이 문제를 해결하려고해도 효과가 없습니다.섹션 4.4.7 "mysql_upgrade - MySQL 테이블 체크 및 업그레이드" 에서 설명하는 절차를 사용하지 않는 한, 어떤 방법으로도
mysql
데이터베이스의 테이블은 변경해서는 없습니다. 기타 방법으로 MySQL 시스템 테이블을 다시 정의하려고하면 정의되지 않음 (및 미지원) 동작이 발생합니다.서버는 (
mysql.user
테이블에 저장된 암호와 일치) MySQL 기본 인증을 사용하여 클라이언트 연결을 인증 할 때user
테이블에 저장된 MySQL 암호를 사용합니다. 이 암호와 운영 체제에 로그인하기위한 암호와는 전혀 관계가 없습니다. Windows 또는 Unix 시스템에 로그인 할 때 사용되는 "외부"비밀번호와 해당 시스템의 MySQL 서버에 액세스하는 데 사용되는 암호와의 사이에 필요한 관계는 없습니다.서버가 플러그인을 사용하여 클라이언트를 인증하려면 플러그인 구현되는 인증 방법
user
테이블의 비밀번호가 사용되는 경우와 사용하지 않는 경우가 있습니다. 이 경우, MySQL 서버에 인증 할 때 외부 암호도 사용 될 수 있습니다.MySQL은 자체 알고리즘을 사용하여
user
테이블에 저장된 암호가 암호화됩니다. 이 암호화는PASSWORD()
SQL 함수에서 구현 된 것으로 동일하지만 Unix 로그인 프로세스 중에 사용되는 것과는 다릅니다. Unix 암호 암호화는ENCRYPT()
SQL 함수에서 구현 된 것과 동일합니다.PASSWORD()
및ENCRYPT()
함수는 섹션 12.13 "암호화 함수와 압축 함수" 를 참조하십시오.MySQL 4.1 이상 버전에서는 이전 버전보다 강력한 인증 방식이 채용되어 연결 프로세스시 암호 보호가 개선되고 있습니다. TCP / IP 패킷을 도청되거나
mysql
데이터베이스를 납치하거나해도 보안입니다. (이전 버전에서는 패스워드가 암호화 된 형식으로user
테이블에 저장되어 있지만, MySQL 서버에 연결할 때 암호화 된 암호 값을 알고있는 것이 이용 될 수 있습니다.) 섹션 6.1.2.4 "MySQL에서 암호 해시" 는 암호의 암호화에 대해 자세히 설명합니다.사용자 이름과 암호에 ASCII 문자 만이 포함되어있는 경우는, 캐릭터 세트의 설정에 관계없이 서버에 연결할 수 있습니다. 사용자 이름이나 암호에 ASCII가 아닌이 포함되어있을 때 접속하는 클라이언트는
MYSQL_SET_CHARSET_NAME
옵션과 인수로서 적절한 문자 세트 이름을 지정하여mysql_options()
C API 함수를 호출하도록하십시오. 그러면 지정된 문자 세트를 사용하여 인증이 수행됩니다. 그렇지 않으면 서버의 디폴트 캐릭터 세트가 인증의 기본 인코딩과 동일해야 인증에 실패합니다.표준 MySQL 클라이언트 프로그램에서는 앞에서 설명한 바와 같이,
mysql_options()
가 호출 될--default-character-set
옵션을 지원합니다. 또한 섹션 10.1.4 "연결 문자 집합 및 정렬 순서" 에서 설명한대로, 캐릭터 세트의 자동 감지도 지원하고 있습니다. C API에 기반하지 않은 커넥터를 사용하는 프로그램에서는mysql_options()
와 동등이 커넥터에서 제공되는 경우가 있고 그것을 대신 사용할 수 있습니다. 커넥터의 문서를 확인하십시오.위의 주 클라이언트 문자 집합으로 허용되지 않은
ucs2
,utf16
및utf32
에는 적용되지 않습니다.
MySQL을 설치하면 부여 테이블에 계정의 초기 세트가 채워집니다. 이 계정의 이름 및 액세스 권한은 섹션 2.10.2 "처음 MySQL 계정 보안 설정" 에 설명되어 있습니다. 여기에서 암호를 할당하는 방법도 설명되어 있습니다. 그 후, 일반적으로 CREATE USER
, GRANT
및 REVOKE
등의 문을 사용하여 MySQL 계정을 설정, 변경 및 삭제합니다. 섹션 13.7.1 "계정 관리 명령문" 을 참조하십시오.
명령 행 클라이언트를 사용하여 MySQL 서버에 연결하려면 사용하는 계정에 필요한 사용자 이름과 암호를 지정합니다.
shell> mysql --user=monty --password= password
db_name
짧은 옵션을 선호하는 경우, 명령은 다음과 같습니다.
shell> mysql -u monty -p password
db_name
-p
옵션과 연속 암호 값 사이에 공백을 넣지 마십시오.
명령 행에서 --password
또는 -p
옵션 다음에 나오는 password
값을 생략하면 값을 하나 지정하라는 메시지가 클라이언트에 표시됩니다.
명령 행에서 암호를 지정하는 것은 안전하지 않다고 생각한다. 섹션 6.1.2.1 "비밀번호 보안에 대한 최종 사용자 지침" 을 참조하십시오. 옵션 파일을 사용하면 명령 행에서 암호를 지정하는 것을 방지 할 수 있습니다.
사용자 이름, 암호 및 기타 연결 매개 변수 지정에 대한 자세한 내용은 섹션 4.2.2 "MySQL 서버에 연결" 을 참조하십시오.