1.CREATE USER
CREATE USER 사용자 [IDENTIFIED BY [PASSWORD] '비밀번호']
[, user [IDENTIFIED BY [PASSWORD] '비밀번호']] ...
CREATE USER가 사용됩니다. 새로운 MySQL 계정을 생성합니다. CREATE USER를 사용하려면 mysql 데이터베이스에 대한 전역 CREATE USER 권한이나 INSERT 권한이 있어야 합니다. 각 계정에 대해 CREATE USER는 권한 없이 mysql.user 테이블에 새 레코드를 생성합니다. 계정이 이미 존재하는 경우 오류가 발생합니다.
선택적인 IDENTIFIED BY 절을 사용하면 계정에 비밀번호를 부여할 수 있습니다. 사용자 값과 비밀번호는 GRANT 문과 동일하게 부여됩니다. 특히 일반 텍스트로 비밀번호를 지정하려면 PASSWORD 키워드를 무시하세요. PASSWORD() 함수에서 반환된 해시 값으로 암호를 지정하려면 PASSWORD 키워드를 포함합니다.
2. GRANT 문을 사용하세요
가장 좋은 방법은 GRANT 문을 사용하는 것입니다. 더 정확하고 오류가 적기 때문입니다. GRANT는 MySQL 3.22.11부터 제공됩니다. 주요 목적은 계정을 인증하는 것이지만 동시에 새 계정을 생성하고 인증하는 데에도 사용할 수 있습니다. 참고: no_auto_create_user에서 mysql이 실행 중인 경우 새 사용자의 비밀번호를 제공해야 합니다. 그렇지 않으면 사용자를 생성할 수 없습니다.
다음 예에서는 MySQL 클라이언트 프로그램을 사용하여 새 사용자를 설정하는 방법을 보여줍니다.
먼저 MySQL 프로그램을 사용하여 MySQL 루트 사용자로 서버에 연결합니다.
shell> MySQL --user=root MySQL
루트 계정의 비밀번호를 지정하는 경우 다음도 사용해야 합니다. MySQL 명령 및 이 섹션의 지침 다른 명령은 --password 또는 -p 옵션을 제공합니다.
루트로 서버에 접속한 후 새 계정을 추가할 수 있습니다. 다음 명령문은 GRANT를 사용하여 4개의 새로운 계정을 설정합니다: mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
-> IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> RELOAD,PROCESS ON *.* TO 'admin'@ 'localhost';
mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';
GRANT 문으로 생성된 계정에는 다음 속성이 있습니다. 이름은 monty이고 비밀번호는 some_pass입니다. 두 계정 모두 모든 작업을 수행할 수 있는 모든 권한을 가진 슈퍼유저 계정입니다. 계정('monty'@'localhost')은 로컬 컴퓨터에서 연결할 때만 사용됩니다. 다른 계정('monty'@'%')을 사용하여 다른 호스트에서 연결할 수 있습니다. 두 monty 계정 모두 모든 호스트에서 monty에 연결할 수 있어야 합니다. localhost 계정이 없으면 monty가 이 시스템에서 연결할 때 mysql_install_db에 의해 생성된 localhost의 익명 사용자 계정이 우선적으로 적용됩니다. 결과적으로 monty는 익명 사용자로 처리됩니다. 그 이유는 익명 사용자 계정의 Host 열 값이 'monty'@'%' 계정보다 구체적이므로 사용자 테이블 정렬 순서에서 더 높은 순위를 차지하기 때문입니다. (사용자 테이블 정렬에 대한 논의는 mysql 매뉴얼을 참조하십시오).
· 계정에 사용자 이름이 admin이고 비밀번호가 없습니다. 이 계정은 이 컴퓨터에서 연결하는 데에만 사용됩니다. RELOAD 및 PROCESS 관리 권한이 부여됩니다. 이러한 권한을 통해 관리자는 mysqladmin reload, mysqladmin 새로 고침, mysqladmin 플러시-xxx 명령은 물론 mysqladmin 프로세스 목록도 실행할 수 있습니다. 데이터베이스에 대한 액세스 권한이 부여되지 않습니다. GRANT 문을 통해 이러한 권한을 추가할 수 있습니다.
· 계정에 사용자 이름 더미가 있고 비밀번호가 없습니다. 이 계정은 이 컴퓨터에서 연결하는 데에만 사용됩니다. 권한이 부여되지 않았습니다. GRANT 문에 USAGE 권한이 있으면 권한을 부여하지 않고도 계정을 생성할 수 있습니다. 모든 전역 권한을 'N'으로 설정할 수 있습니다. 나중에 이 계정에 특정 권한을 부여할 것으로 가정합니다.
3. MySQL 인증 테이블을 직접 조작
GRANT 외에도 INSERT 문을 직접 사용하여 동일한 계정을 생성한 후 FLUSH PRIVILEGES를 사용하여 인증 테이블을 다시 로드하도록 서버에 지시할 수 있습니다.
shell> mysql --user=root mysql
mysql> INSERT INTO user
-> VALUES('localhost','monty',PASSWORD('some_pass'),
-> Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y' ,'Y');
mysql> INSERT INTO 사용자
-> VALUES('%','monty',PASSWORD('some_pass'),
-> 'Y','Y' ,'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO 사용자 SET Host='localhost',User='admin',
-> Reload_priv='Y', Process_priv='Y';
mysql> 사용자,비밀번호)
-> VALUES('localhost','dummy','');
mysql> FLUSH PRIVILEGES;
INSERT로 계정을 생성할 때 FLUSH PRIVILEGES를 사용하는 이유는 서버에 인증을 다시 읽도록 지시하기 위한 것입니다. 테이블. 그렇지 않으면 서버를 다시 시작할 때까지 변경 사항이 표시되지 않습니다. GRANT를 사용하면 FLUSH PRIVILEGES를 사용할 필요가 없습니다.
INSERT와 함께 PASSWORD() 함수를 사용하여 비밀번호를 암호화하세요. GRANT 문은 비밀번호를 암호화하므로 PASSWORD()가 필요하지 않습니다.
'Y' 값은 계정 권한을 활성화합니다. 관리자 계정의 경우 더 읽기 쉬운 INSERT 확장 구문(SET 사용)을 사용할 수도 있습니다.
더미 계정에 대한 INSERT 문에서는 사용자 테이블의 Host, User, Password 열만 지정된 값으로 기록됩니다. 권한 열 중 어느 것도 명시적으로 설정되지 않았으므로 MySQL은 모든 권한 열을 기본값 'N'에 할당합니다. 이는 GRANT USAGE의 작동과 동일합니다.
슈퍼유저 계정을 설정하려면 권한 열이 'Y'로 설정된 사용자 테이블 항목만 생성하면 됩니다. 사용자 테이블 권한은 전역 권한이므로 다른 권한 테이블에는 항목이 필요하지 않습니다.
4. 계정 생성 및 권한 부여를 위한 부여 적용 사례를 몇 가지 제시하세요.
다음 예시에서는 3개의 계정을 생성하고 전용 데이터베이스에 액세스할 수 있도록 허용합니다. 각 계정의 사용자 이름은 맞춤식이며 비밀번호는 모호합니다.
GRANT를 사용하여 계정을 생성하려면 다음 명령문을 사용하세요.
shell> MySQL --user=root MySQL
shell> mysql --user=root mysql
mysql> ,DELETE,CREATE,DROP
-> ON 은행 계좌.*
-> TO 'custom'@'localhost'
-> 'obscure';
mysql> INSERT,UPDATE,DELETE,CREATE,DROP
-> ON 비용.*
-> TO 'custom'@'whitehouse.gov'
-> mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON 고객.*
-> TO 'custom'@'server.domain' -> ';
이 3개 계정은 다음 용도로 사용할 수 있습니다.
· 첫 번째 계정은 은행 계좌 데이터베이스에 액세스할 수 있지만 이 시스템에서만 액세스할 수 있습니다.
· 두 번째 계정은 비용 데이터베이스에 액세스할 수 있지만 호스트 whitehouse.gov에서만 액세스할 수 있습니다.
· 세 번째 계정은 고객 데이터베이스에 액세스할 수 있지만 호스트 server.domain에서만 액세스할 수 있습니다.
GRANT 없이 사용자 정의 계정을 설정하려면 INSERT 문을 사용하여 인증 테이블을 직접 수정하세요.
shell> --user=root mysql
mysql> INSERT INTO user (Host,User,Password)
- > VALUES('localhost','custom',PASSWORD('obscure'));
mysql> INSERT INTO user(호스트,사용자,비밀번호)
-> gov',' custom',PASSWORD('obscure'));
mysql> INSERT INTO user (Host,User,Password)
-> VALUES('server.domain','custom',PASSWORD( '모호함') );
mysql> INSERT INTO db
-> (Host,Db,User,Select_priv,Insert_priv,
-> Update_priv,Delete_priv,Create_priv,Drop_priv)
-> ; ('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)
-> ',' 사용자 정의',
-> 'Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO db
-> ; (호스트 ,Db,User,Select_priv,Insert_priv,
-> Update_priv,Delete_priv,Create_priv,Drop_priv)
-> VALUES('server.domain','customer','custom',
-> ; 'Y','Y','Y','Y','Y','Y');
mysql> FLUSH PRIVILEGES;
처음 3개의 INSERT 문은 사용자 테이블에 항목을 추가하여 사용자가 지정된 비밀번호를 사용하여 다양한 호스트에서 사용자 정의 연결을 허용하지만 전역 권한을 부여하지는 않습니다(모든 권한은 기본값으로 설정됨). 'N'). 다음 세 개의 INSERT 문은 사용자 테이블에 항목을 추가하여 은행 계좌, 비용 및 고객 데이터베이스 권한을 사용자 정의에 부여하지만 해당 호스트에서만 액세스할 수 있습니다. 일반적으로 권한 부여 테이블을 직접 수정하는 경우 권한 변경 사항을 적용하려면 FLUSH PRIVILEGES를 사용하여 권한 테이블을 다시 로드하도록 서버에 지시해야 합니다.
특정 도메인(예: mydomain.com)의 모든 컴퓨터에서 사용자 액세스 권한을 부여하려면 계정 이름의 호스트 부분에 '%' 와일드카드 문자가 포함된 GRANT 문을 사용할 수 있습니다.
mysql> GRANT ...
-> ON *.*
-> 'myname'@'%.mydomain.com'
-> > 인증 테이블을 직접 수정하여 달성하려면:
mysql> INSERT INTO user (Host,User,Password,...)
-> VALUES('%.mydomain.com','myname', PASSWORD('mypass'),...);
mysql> FLUSH PRIVILEGES;
5. 계정을 만드는 또 다른 방법은 MySQL 계정 관리 기능과 함께 타사 프로그램을 사용하는 것입니다. phpMyAdmin은 프로그램입니다.
MySQL에서 사용자 계정 삭제
계정을 삭제하려면 DROP USER 문을 사용하세요.