서문 :
당신이 DBA 단어가 아닌 경우 이전 기사, 나는 여러 SQL 구문의 사용을 소개합니다,이 글 월은 일반적으로 많이 사용하지뿐만 아니라 많은 이점에서 이해하는 지식을 관련 MySQL의 사용자 및 권한에 초점을 맞출 것이다.
1. 사용자 만들기
공식 권장 생성 구문은 다음과 같습니다
CREATE USER [IF NOT EXISTS]
user [auth_option] [, user [auth_option]] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH resource_option [resource_option] ...]
[password_option | lock_option] ...
user:
(see Section 6.2.4, “Specifying Account Names”)
auth_option: {
IDENTIFIED BY 'auth_string'
| IDENTIFIED WITH auth_plugin
| IDENTIFIED WITH auth_plugin BY 'auth_string'
| IDENTIFIED WITH auth_plugin AS 'auth_string'
| IDENTIFIED BY PASSWORD 'auth_string'
}
tls_option: {
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
}
resource_option: {
MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
}
password_option: {
PASSWORD EXPIRE
| PASSWORD EXPIRE DEFAULT
| PASSWORD EXPIRE NEVER
| PASSWORD EXPIRE INTERVAL N DAY
}
lock_option: {
ACCOUNT LOCK
| ACCOUNT UNLOCK
}
보통 우리는 공통의 구문을 만들 수 있습니다 :
CREATE USER <用户名> [ IDENTIFIED ] BY [ PASSWORD ] <口令>
: 구문은 다음과 같습니다
1) <사용자 이름>이
형식은 '_ 이름'@ 'HOST_NAME'에 사용자 계정을 생성하도록 지정합니다. 여기에 user_name
사용자 이름이며, host_name
호스트의 이름은 사용자가 MySQL을 연결하면 어디 호스트 이름, 즉. 생성, 사용자 계정의 지정된 이름의 과정에서되었지만 호스트 이름을 지정하지 않았다 "%"로 호스트 이름의 기본값은 호스트 그룹 말했다.
2) 패스워드
옵션은 일반 텍스트 암호가 설정되어있는 경우 즉, 당신은 무시해야 해시 된 암호를 지정하기 위해 PASSWORD
당신이 할 수있는, 일반 텍스트 암호를 설정하지 않으려면, 그리고 기능은 암호 해시 값을 반환) (패스워드를 알고 키워드 문에 지정된이 암호 해시 값을 설정할 수 있지만 키워드를 추가해야합니다 PASSWORD
.
3) 제에 의해 식별
암호없이 사용자 계정,이 항목이 생략 될 수있는 경우, 계정의 암호에 대응하는 사용자를 지정한다.
4) <암호>
지정된 사용자 계정 비밀번호의 IDENTIFIED BY
키워드 또는 PASSWOED
키워드 뒤. 감안 평문 암호 값은 문자와 숫자 일 수도 있고, 얻어진 PASSWORD () 함수에 의해 해시 값을 가질 수있다.
다음 사항에 유의해야 USER 문을 CREATE 사용
- 당신이 사용자의 암호를 사용하여 사용자를 생성 문을 지정하지 않는 경우, MySQL은 사용자가 암호로 로그인 할 수 있도록 할 수 없지만, 보안 관점에서,이 방법은 사용하지 않는 것이 좋습니다.
- MySQL의 MySQL의 데이터베이스 INSERT 권한이 또는 글로벌 사용자 권한을 만들어야합니다 USER 문을 만들 수 있습니다.
- 당신은 사용자의 CREATE 문을 사용하여 사용자 계정을 생성 한 후 사용자 테이블 시스템 자체 MySQL 데이터베이스에 새 레코드를 추가합니다. 이미 존재하는 계정을 만든 경우 실행될 때, 문 오류가 발생합니다.
- 새로 만든 작은의 권한을 가진 사용자. 그들은 등등 모든 스토리지 엔진과 문자 세트의 목록을 조회 할 SHOW 문을 사용하여 같은 권한을 필요로하지 않는 경우에만 작업을 수 있도록, MySQL을 로그인 할 수 있습니다.
- 두 사용자가 동일한 사용자 이름과 다른 호스트 이름이있는 경우, MySQL은 다른 사용자로 그들을보고, 두 사용자에 대한 권한의 다른 세트의 할당을 허용합니다.
예 :
#注意:test_user@'%' 和 test_user@'localhost' 是两个不同的用户
CREATE USER 'test_user'@'%' identified by '123456';
CREATE USER 'test_user'@'localhost' identified by '123456789';
2. 사용자 변경
이름을 바꾸 변경 암호, 잠금 또는 사용자를 잠금 해제를 포함하여 사용자 정보를 변경. 다음은 모든 사람의 경우 이러한의 사용을 설명합니다 :
#重命名用户
RENAME USER 'test_user'@'%' to 'test'@'%';
#修改密码
ALTER USER 'test'@'%' identified by '123456789';
#锁定或解锁用户
ALTER USER 'test'@'%' ACCOUNT LOCK;
ALTER USER 'test'@'%' ACCOUNT UNLOCK;
3. 사용자 삭제
MySQL 데이터베이스는 하나 개 이상의 사용자 계정과 관련된 권한을 제거 할 DROP 사용자 문을 사용할 수 있습니다.
공식 권장 구문 :
DROP USER [IF EXISTS] user [, user] ...
다음 사항에 유의해야 DROP의 USER 문을 사용하여 :
- DROP의 USER 문은 하나 개 이상의 MySQL의 계정을 삭제하고 원래의 허가를 철회 할 수 있습니다.
- MySQL은 MySQL 데이터베이스 권한을 삭제 또는 글로벌 사용자 권한을 만들 수 있어야합니다 DROP의 USER 문을 사용합니다.
- 명시 적으로 호스트 이름이 디폴트를에 계정의 호스트 이름을 제공하지 않을 경우, DROP의 USER 문을 사용하여 "%를."
4. 사용자 권한 부여
사용자가 성공적으로는 아무것도 할 수 없습니다 생성되면, 해당 사용자에 대한 적절한 액세스 권한을 할당해야합니다. 당신은 사용자의 권한을 조회 할 수 FOR 문 SHOW의 GRANT를 사용할 수 있습니다.
참고 : 만 새로 만든 사용자 로그인 권한 MySQL 서버, 다른 권한을 다른 작업을 수행 할 수 없습니다.
사용에 . 모든 데이터베이스의 사용자 및 테이블 권한이없는 것을 나타냅니다.
새로운 MySQL 사용자를 위해, 당신은 그것에게 권한을 부여해야합니다, 당신은 새로운 사용자에 대한 인증을 구현하는 GRANT 문을 사용할 수 있습니다. 공식 권장 구문 :
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user [auth_option] [, user [auth_option]] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH {GRANT OPTION | resource_option} ...]
GRANT PROXY ON user
TO user [, user] ...
[WITH GRANT OPTION]
object_type: {
TABLE
| FUNCTION
| PROCEDURE
}
priv_level: {
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
}
user:
(see Section 6.2.4, “Specifying Account Names”)
auth_option: {
IDENTIFIED BY 'auth_string'
| IDENTIFIED WITH auth_plugin
| IDENTIFIED WITH auth_plugin BY 'auth_string'
| IDENTIFIED WITH auth_plugin AS 'auth_string'
| IDENTIFIED BY PASSWORD 'auth_string'
}
tls_option: {
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
}
resource_option: {
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
}
우리가 알아야 할 모든 우선, 권한의 하위 수준이다. 권한은 다음과 같은 그룹을 부여 할 수 있습니다 :
- 열 수준 및 관련 테이블의 특정 열입니다. 예를 들어, STUDENT_NAME 열 값의 테이블 권한 학생들을 업데이트 UPDATE 문을 사용할 수 있습니다.
- 테이블 수준 및 특정 테이블에 관련된 모든 데이터입니다. 예를 들어, 모든 데이터의 권한 테이블 학생을 쿼리 할 SELECT 문을 사용할 수 있습니다.
- 데이터베이스 수준 및 특정 데이터베이스 관련의 모든 테이블. 예를 들어, MYTEST에서 기존 데이터베이스에 권한의 새 테이블을 만들 수 있습니다.
- 글로벌, 모든 MySQL의 데이터베이스 관련. 예를 들어, 기존 데이터베이스를 삭제하거나 데이터베이스에 대한 새 권한을 만들 수 있습니다.
다음 표는 그 중요성에 대한 권한을 부여 할 수있는 모든 것입니다 :
능력 | 의의 및 보조금 수준 |
---|---|
ALL [PRIVILEGES] |
모든 권한이 외에도, 액세스의 특정 레벨에 부여 GRANT OPTION 하고 PROXY . |
ALTER |
사용 가능 ALTER TABLE . 레벨 : 글로벌, 데이터베이스, 테이블. |
ALTER ROUTINE |
그것은 당신이 변경하거나 저장 프로 시저를 삭제할 수 있습니다. 레벨 : 글로벌 데이터베이스. |
CREATE |
데이터베이스 및 테이블 작성을 활성화합니다. 레벨 : 글로벌, 데이터베이스, 테이블. |
CREATE ROUTINE |
생성 된 저장 프로 시저를 사용합니다. 레벨 : 글로벌 데이터베이스. |
CREATE TABLESPACE |
파일 그룹을 생성, 변경, 또는 테이블 공간을 삭제하고 로그인 할 수 있습니다. 학년 : 글로벌. |
CREATE TEMPORARY TABLES |
사용 가능 CREATE TEMPORARY TABLE . 레벨 : 글로벌 데이터베이스. |
CREATE USER |
의 사용을 허용 CREATE USER , DROP USER , RENAME USER ,와 REVOKE ALL PRIVILEGES . 평가 : 글로벌. |
CREATE VIEW |
만들거나보기를 변경 할 수 있습니다. 레벨 : 글로벌, 데이터베이스, 테이블. |
DELETE |
사용 가능 DELETE . 레벨 : 글로벌, 데이터베이스, 테이블. |
DROP |
삭제 데이터베이스, 테이블 및 뷰를 활성화합니다. 레벨 : 글로벌, 데이터베이스, 테이블. |
EVENT |
이벤트 사용을 활성화합니다. 레벨 : 글로벌 데이터베이스. |
EXECUTE |
이 저장 프로 시저를 실행하는 사용자 수 있습니다. 레벨 : 글로벌 데이터베이스. |
FILE |
서버는 읽거나 파일을 기록 할 수있게합니다. 학년 : 글로벌. |
GRANT OPTION |
다른 계정에 권한을 사용하거나 다른 계정에서 삭제합니다. 레벨 : 글로벌, 데이터베이스, 테이블, 에이전트. |
INDEX |
인덱스를 만들거나 삭제 할 수 있습니다. 레벨 : 글로벌, 데이터베이스, 테이블. |
INSERT |
사용 가능 INSERT . 레벨 : 글로벌, 데이터베이스, 테이블, 열입니다. |
LOCK TABLES |
허용 LOCK TABLES 당신은해야하는 SELECT 테이블 권한을. 레벨 : 글로벌 데이터베이스. |
PROCESS |
그것은 사용자가 모든 프로세스를 볼 수 있습니다 SHOW PROCESSLIST . 학년 : 글로벌. |
PROXY |
사용자 에이전트를 활성화합니다. 레벨 : 사용자로부터 사용자에게. |
REFERENCES |
외래 키 생성을 활성화합니다. 레벨 : 글로벌, 데이터베이스, 테이블, 열입니다. |
RELOAD |
활성화 FLUSH 작업을. 학년 : 글로벌. |
REPLICATION CLIENT |
그래야 사용자는 마스터 또는 서버 위치에서 요청할 수 있습니다. 학년 : 글로벌. |
REPLICATION SLAVE |
복제 슬레이브을 사용하면 기본 서버에서 바이너리 로그를 읽을 수 있습니다. 학년 : 글로벌. |
SELECT |
사용 가능 SELECT . 레벨 : 글로벌, 데이터베이스, 테이블, 열입니다. |
SHOW DATABASES |
사용 SHOW DATABASES 하는 모든 데이터베이스를 표시 할 수 있습니다. 학년 : 글로벌. |
SHOW VIEW |
사용 가능 SHOW CREATE VIEW . 레벨 : 글로벌, 데이터베이스, 테이블. |
SHUTDOWN |
사용 종료 mysqladmin 데이터 . 학년 : 글로벌. |
SUPER |
같은 다른 명령을 사용할 수 CHANGE MASTER TO , KILL , PURGE BINARY LOGS , SET GLOBAL , 및 mysqladmin 데이터 디버그 명령. 학년 : 글로벌. |
TRIGGER |
트리거 작동을 활성화합니다. 레벨 : 글로벌, 데이터베이스, 테이블. |
UPDATE |
사용 가능 UPDATE . 레벨 : 글로벌, 데이터베이스, 테이블, 열입니다. |
USAGE |
"아무 권한이 없다"동의어 |
사실, grant 문 및 권한이있는 사용자는 바로 여기, 만들려면 사용자 문을 만들 처음 사용 후 생성 된 개별 사용자를 다시 인증 것을 제안 할 수 있습니다. 지금은 어떻게 인증 예제를 사용하는 방법을 보여줍니다 :
#全局权限
GRANT super,select on *.* to 'test_user'@'%';
#库权限
GRANT select,insert,update,delete,create,alter,execute on `testdb`.* to 'test_user'@'%';
#表权限
GRANT select,insert on `testdb`.tb to 'test_user'@'%';
#列权限
GRANT select (col1), insert (col1, col2) ON `testdb`.mytbl to 'test_user'@'%';
5. 재활용 기관
MySQL의에서, 당신은 사용자의 권한을 복구하기 위해 REVOKE 문을 사용하여,이 사용자는 삭제되지 않습니다.
REVOKE
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [, user] ...
REVOKE ALL [PRIVILEGES], GRANT OPTION
FROM user [, user] ...
다음과 같은 구문은 다음과 같습니다
- GRANT 및 REVOKE 구문 문 구문은 비슷하지만, 반대의 효과가있다.
- 특정 권한의 회복을위한 첫 번째 구문 형식입니다.
- 특정 사용자의 모든 권리의 회복을위한 두 번째 구문 형식입니다.
- REVOKE 문을 사용하려면 글로벌 MySQL 데이터베이스는 사용자의 권한 또는 UPDATE 권한을 만들 수 있어야합니다.
정상적인 상황에서 우리가 발견 너무 많은 권한이 구문 복구를 사용할 수있는 권한을 취소 할 경우, 사용자의 쿼리 구문에 부여 권한을 표시하는 데 사용됩니다. 다음 예는 다음과 같다 :
#查看用户权限
mysql> show grants for 'test_user'@'%';
+-----------------------------------------------------------------------------------------------------+
| Grants for test_user@% |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test_user'@'%' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, EXECUTE ON `testdb`.* TO 'test_user'@'%' |
+-----------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
#发现权限过大,想回收drop,alter权限 则可以这样回收:
REVOKE drop,alter on `testdb`.* from 'test_user'@'%';
요약 :
本篇文章为大家介绍了如何创建,更改,删除用户以及如何授于和回收权限。希望大家能对MySQL中用户管理这一块能有更深的认识。入门MySQL系列文章写了好几篇了,一开始并没有想好写多少篇的准备,可能逻辑也不太合理,还是感谢大家的阅读。最后一篇打算写备份与恢复相关内容,大家期待一下哦!