MySQL-- 사용자 및 권한 얻기

서문 : 

당신이 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 USERDROP USERRENAME 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 TOKILLPURGE BINARY LOGSSET 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系列文章写了好几篇了,一开始并没有想好写多少篇的准备,可能逻辑也不太合理,还是感谢大家的阅读。最后一篇打算写备份与恢复相关内容,大家期待一下哦!

추천

출처blog.51cto.com/10814168/2432316