매일 MySQL의 008: MySQL 권한 소개

11428 단어 MYSQL
MySQL 권한 소개
MySQL은 자체 계정 관리 방식이 있다는 점에서 DB2와 달리 DB2는 자체 계정이 없고 모두 운영체제 계정에 의존하기 때문이다.MySQL 계정은 두 부분으로 구성됩니다:user name과host name, 문법은'username'@'host_name'. 사용자 이름만 있는 계정은'user '과 같습니다.name '@'% ', 여기 있는% 는 모든 host를 표시합니다
1. 사용자 권한 보기: show grants for'user'@'host'명령을 사용하여 사용자의 권한을 볼 수 있습니다.
mysql>
show grants for 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql>
show grants for 'repl'@'db2b';
+-------------------------------------------------+
| Grants for repl@db2b                            |
+-------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'repl'@'db2b' |
+-------------------------------------------------+
1 row in set (0.00 sec)
2. 권한 분류: MySQL의 권한은 다음과 같은 세 가지 유형으로 나뉜다.
Administrative privileges 사용자 이 권한의 사용자가 데이터베이스 관리를 할 수 있는 작업은 특별한 데이터베이스에 대한 것이 아닙니다
Database privileges는 특정 데이터베이스와 데이터베이스 아래에 있는 모든 객체를 대상으로 합니다.
Privileges for database objects는 테이블, 색인, 보기, 저장 프로세스 등 데이터베이스 객체에 대해
3. 권한 저장 위치 이 권한 정보는 mysql 데이터베이스 아래 목록에user,db,tablespriv, columns_priv, procspriv, MySQL이 시작될 때, 이 테이블의 정보를 메모리에 불러옵니다.
구체적으로 다음과 같다.
user: User accounts, global privileges, and other non-privilege columns
db: Database-level privileges
tables_priv: Table-level privileges
columns_priv: Column-level privileges
procs_priv: Stored procedure and function privileges
proxies_priv: Proxy-user privileges
모든grant table에는 scope열과privilege열이 포함되어 있습니다.user표를 예로 들면 Host,User는 scope열에 속하고,Selectpriv、Insert_priv 등은 privilege 열에 속합니다.
mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(32)                          | NO   | PRI |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | NO   |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)

mysql> select Host, User, authentication_string,account_locked from user;
+----------------+-----------+-------------------------------------------+----------------+
| Host           | User      | authentication_string                     | account_locked |
+----------------+-----------+-------------------------------------------+----------------+
| localhost      | root      | *F18F94E9C8569A178D632770D54021F45705C972 | N              |
| localhost      | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | Y              |
| 192.168.16.129 | root      | *F18F94E9C8569A178D632770D54021F45705C972 | N              |
| db2b           | repl      | *A424E797037BF97C19A2E88CF7891C5C2038C039 | N              |
+----------------+-----------+-------------------------------------------+----------------+
4 rows in set (0.00 sec)

authentication_string은 MySQL의 진짜 비밀번호로 show create user 명령을 통해 볼 수 있으며 user 표를 통해 볼 수 있는 것과 일치합니다. mysql> show create user'@'db2b', +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------CREATE USER for repl@db2b                                                                                                                                            | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | CREATE USER 'repl'@'db2b' IDENTIFIED WITH 'mysql_native_password' AS '*A424E797037BF97C19A2E88CF7891C5C2038C039' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
4. 권한 부여 또는 취소
GRANT 및 REVOKE 문을 사용하여 권한을 부여 및 취소할 수 있습니다. 부여 및 취소할 수 있는 권한은 아래 표6.2 참조
:https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html
5. 액세스 제어의 두 단계
MySQL의 액세스 제어는 Connection Verification과
이 단계에서 사용자 이름이 존재하는지, 비밀번호가 일치하는지, 계정이 잠겨 있는지 확인합니다. 이 단계가 일치하면 MySQL 서버에 연결할 수 있습니다.두 번째 단계는 Request Verification입니다. 이 단계는 연결이 어떤 동작을 하는지 보고 이 동작을 할 권한이 있는지 확인합니다.
6. 권한 수정 후 유효 시기
GRANT, REVOKE, SET PASSWORD, 또는 RENAME USER 같은 계정 관리 문구를 사용하면 서버는 이러한 변화를 즉시 알고 grant tables를 메모리에 다시 불러옵니다.INSERT, UPDATE, DELETE 등의SQL 문장을 직접 사용하거나grant tables를 직접 수정하려면 서버를 다시 시작하거나 flush privileges 작업을 명시적으로 시작해야 합니다.flush privileges에는 FLUSH PRI VILEGES 명령, mysqladmin flush-privileges 명령 또는 mysqladminn reload 명령이 있습니다.
MySQL 서버에 이미 연결된 연결의 경우 권한 변화가 현재 연결에 미치는 영향 규칙은 다음과 같습니다.
--Table와column 권한의 변화는client의 다음 Request에서 적용됩니다 --Database 권한은 다음 USE dbname 이후 적용
-- 글로벌 권한과 비밀번호 변경이 현재 연결에 작동하지 않는데
만약 서버가 시작될 때 --skip-grant-tables 옵션을 추가하면,grant table를 불러오지 않고, 접근 제어도 하지 않습니다. 즉, 모든 사용자가 연결할 수 있고, 모든 일을 할 수 있습니다.이 경우 mysql에 연결한 후 현재 사용자 결과를 보십시오: mysql>select currentuser(); +-----------------------------------+ | current_user()                    | +-----------------------------------+ | skip-grants user@skip-grants host | +-----------------------------------+ 1 row in set (0.03 sec)

좋은 웹페이지 즐겨찾기