찾다
데이터 베이스MySQL 튜토리얼MySQL은 권한 관리를 어떻게 수행합니까?

이 글의 내용은 MySQL이 권한 관리를 어떻게 수행하는지 소개하는 것인가요? 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

MySQL의 권한 테이블은 데이터베이스가 시작될 때 메모리에 로드됩니다. 사용자가 신원 인증을 통과하면 메모리에서 해당 권한에 액세스할 수 있습니다. 데이터베이스 권한 범위 내의 다양한 작업. [동영상 튜토리얼 추천 : MySQL tutorial]

1. 권한 테이블 접근

권한 접근의 두 가지 과정에서 시스템은 "mysql" 데이터베이스(MySQL 설치 시 생성됨, 데이터베이스 이름은 "mysql")에 있는 사용자, 호스트, db의 가장 중요한 세 가지 권한 테이블이 사용됩니다.

이 3개의 테이블 중 가장 중요한 테이블은 user 테이블이고, 그 다음이 db 테이블입니다. 대부분의 경우 호스트 테이블은 사용되지 않습니다.

user의 열은 크게 사용자 열, 권한 열, 보안 열, 리소스 제어 열의 4부분으로 나뉩니다.

보통 가장 일반적으로 사용되는 열은 사용자 열과 권한 열이며, 그 중 권한 열은 일반 권한과 관리 권한으로 구분됩니다. select_privsuper_priv 등과 같은 데이터베이스 작업에는 일반 권한이 사용됩니다.

사용자가 접속할 때 권한 테이블의 접근 과정은 다음 두 가지 과정으로 진행됩니다.

  • 먼저, user 테이블, 사용자 및 비밀번호의 세 필드는 연결된 IP, 사용자 이름 및 비밀번호가 테이블에 존재하는지 여부를 결정합니다. 존재하면 인증이 통과되고, 그렇지 않으면 연결이 거부됩니다.

  • 신원 인증을 통과하면 다음 권한 테이블의 순서로 데이터베이스 권한을 얻습니다. user -> columns_priv.

이러한 권한 표에서는 권한 범위가 순서대로 줄어들고 전역 권한에는 로컬 권한이 포함됩니다. 위의 첫 번째 단계는 이해하기 쉽도록 두 번째 단계를 예를 들어 자세히 설명하겠습니다.
테스트를 용이하게 하려면 sql_mode

// sql_mode 默认值中有 NO_AUTO_CREATE_USER (防止GRANT自动创建新用户,除非还指定了密码)
SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

1 변수를 수정해야 합니다. zj@localhost 사용자를 만들고 모든 테이블에 선택 권한을 부여해야 합니다. Databases#🎜 🎜#
MySQL [mysql]> grant select on *.* to zj@localhost;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

MySQL [mysql]> select * from user where user="zj" and host='localhost' \G;
*************************** 1. row ***************************
                  Host: localhost
                  User: zj
           Select_priv: Y
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
...

2. db 테이블을 확인합니다

MySQL [mysql]> select * from db where user='zj' \G ;
Empty set (0.00 sec)

user 테이블의 select_priv 열이 "Y"인데 db 테이블에 레코드가 없는 것을 확인할 수 있습니다. 즉, 모든 데이터베이스에 대해 동일한 권한을 가진 사용자는 db 테이블에 기록할 필요가 없으며 사용자 테이블의 select_priv를 "Y"로 변경하기만 하면 됩니다. 즉, 사용자 테이블의 모든 권한은 모든 데이터베이스에 대한 권한을 나타냅니다.

3. zj@localhost에 대한 권한을 변경하여 t2 데이터베이스의 모든 테이블에 대한 권한만 선택하세요.

MySQL [mysql]> revoke select on *.* from zj@localhost;
Query OK, 0 rows affected, 1 warning (0.02 sec)

MySQL [mysql]> grant select on t2.* to zj@localhost;
Query OK, 0 rows affected, 1 warning (0.04 sec)

MySQL [mysql]> select * from user where user='zj' \G;
*************************** 1. row ***************************
                  Host: localhost
                  User: zj
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
...

MySQL [mysql]> select * from db where user='zj' \G;
*************************** 1. row ***************************
                 Host: localhost
                   Db: t2
                 User: zj
          Select_priv: Y
          Insert_priv: N
          Update_priv: N
          Delete_priv: N
          Create_priv: N
            Drop_priv: N
           Grant_priv: N

이때, user 테이블의 select_priv가 "N"으로 변경되었고, db 테이블에 db t2라는 레코드가 추가된 것이 발견되었습니다. 즉, 특정 권한이 데이터베이스의 일부에만 부여된 경우 사용자 테이블의 해당 권한 열은 "N"으로 유지되고 특정 데이터베이스 권한이 db 테이블에 기록됩니다. 테이블과 열의 권한 메커니즘은 db의 권한 메커니즘과 유사합니다.

위의 예에서 볼 수 있듯이 사용자가 권한 인증을 통과하고 권한이 할당되면 user -> tables_priv -> 즉, 첫 번째 전역 권한 테이블 사용자를 확인합니다. 사용자의 해당 권한이 "Y"이면 모든 데이터베이스에 대한 이 사용자의 권한은 "Y"이고, "이면 db, tables_priv 및 columns_priv가 더 이상 확인되지 않습니다. N", db 테이블로 이동 이 사용자에 해당하는 특정 데이터베이스를 확인하고 db에서 "Y"로 권한을 얻습니다. db에서 해당 권한이 "N"인 경우 tables_priv 및 columns_priv에서 차례로 권한을 확인합니다. 모두 "N"이면 허가가 없다고 판단됩니다.

2. 계정 관리

에는 주로 계정 생성, 권한 변경, 계정 삭제가 포함됩니다.

1 계정을 만듭니다.

승인 구문을 사용하여 만듭니다. 예:

(1) 모든 사용자에 대한 실행 권한이 있는 사용자 zj를 만듭니다. 데이터베이스 모든 권한은 로컬에서만 연결할 수 있습니다.
MySQL [mysql]> grant all privileges on *.* to zj@localhost;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

MySQL [mysql]> select * from user where user="zj" and host="localhost" \G;
*************************** 1. row ***************************
                  Host: localhost
                  User: zj
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: Y
user 테이블에서 grant_priv 권한을 제외한 모든 권한이 "Y"인 것을 확인할 수 있습니다.

(2) (1)에 따라 zj에 대한 부여 권한을 높입니다
MySQL [(none)]> grant all privileges on *.* to zj@localhost with grant option;
Query OK, 0 rows affected, 1 warning (0.01 sec)

MySQL [mysql]> select * from user where user="zj" and host='localhost' \G ;
*************************** 1. row ***************************
                  Host: localhost
                  User: zj
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: Y
          Process_priv: Y
             File_priv: Y
            Grant_priv: Y
...
(3) (2)에 따라 비밀번호를 "123"으로 설정합니다# 🎜 🎜#
MySQL [mysql]> grant all  privileges on *.* to zj@localhost identified by '123' with grant option;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

MySQL [mysql]> select * from user where user="zj" and host="localhost" \G ;
*************************** 1. row ***************************
                  Host: localhost
                  User: zj
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
......  
 authentication_string: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
      password_expired: N
 password_last_changed: 2017-09-25 20:29:42
     password_lifetime: NULL
비밀번호는 암호화된 문자열 묶음으로 되어 있는 것을 확인할 수 있습니다.

(4) 모든 IP에서 연결할 수 있는 새 사용자 zj2를 생성합니다. 권한은 t2 데이터베이스의 모든 테이블에 대한 작업을 선택, 업데이트, 삽입 및 삭제하는 것입니다. 초기 비밀번호는 "123입니다. "#🎜🎜 #

MySQL [mysql]> grant select ,insert, update,delete on t2.* to 'zj2'@'%' identified by '123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

MySQL [mysql]> select * from user where user='zj2' and host="%" \G;
*************************** 1. row ***************************
                  Host: %
                  User: zj2
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
......
 authentication_string: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
      password_expired: N
 password_last_changed: 2017-09-25 20:37:49
     password_lifetime: NULL

MySQL [mysql]> select * from db where user="zj2" and host='%' \G;
*************************** 1. row ***************************
                 Host: %
                   Db: t2
                 User: zj2
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: N
            Drop_priv: N
......
user 테이블의 권한은 모두 "N"이고, db 테이블에 추가된 레코드의 권한은 모두 "Y"입니다. 일반적으로 과도한 권한을 부여하지 않고 사용자에게 적절한 권한만 부여하세요.
이 예제의 IP는 연결할 수 있는 모든 IP로 제한되어 있으므로 "*"로 설정되어 있습니다. mysql 데이터베이스는 user 테이블의 호스트 필드를 통해 제어됩니다. 과제 유형.

Host 값은 호스트 이름이나 IP 번호일 수 있으며, "localhost"는 로컬 호스트를 나타냅니다.
  • 호스트 열 값
  • Host에 와일드카드 문자 "%" 및 "_"를 사용할 수 있습니다. value" %"는 모든 호스트 이름과 일치합니다. 빈 호스트 값은 "%"와 동일합니다. 해당 의미는 like 연산자의 패턴 일치 작업과 동일합니다.

注意: mysql 数据库的 user 表中 host 的值为 “*” 或者空,表示所有外部 IP 都可以连接,但是不包括本地服务器 localhost,因此,如果要包括本地服务器,必须单独为 localhost 赋予权限。

(5) 授予 super、process、file 权限给用户 zj3@%
MySQL [mysql]> grant super,process,file on *.* to 'zj3'@'%';
Query OK, 0 rows affected, 1 warning (0.00 sec)

因为这几个权限都是属于管理权限,因此不能够指定某个数据库,on 后面必须跟 “.”,下面语法将提示错误

MySQL [mysql]> grant super,process,file on t2.* to 'zj3'@'%';
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
(6) 只授予登录权限给 zj4@localhost
MySQL [mysql]> grant usage on *.* to 'zj4'@'localhost';
Query OK, 0 rows affected, 2 warnings (0.01 sec)

MySQL [mysql]> exit
Bye

zj@bogon:~$ mysql -uzj4 -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 78
Server version: 5.7.18-log Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.02 sec)

usage 权限只能用于数据库登录,不能执行任何操作

2. 查看账号权限

账号创建好后,可以通过如下命令查看权限:

show grants for user@host;

示例:

MySQL [(none)]> show grants for zj@localhost;
+-------------------------------------------------------------------+
| Grants for zj@localhost                                           |
+-------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'zj'@'localhost' WITH GRANT OPTION |
+-------------------------------------------------------------------+
1 row in set (0.01 sec)

3. 更改账号权限

可以进行权限的新增和回收。和创建账号一样,权限变更也有两种方法:使用 grant(新增) 和 revoke (回收) 语句,或者更改权限表。

示例:
(1) zj4@localhost 目前只有登录权限
MySQL [(none)]> show grants for zj4@localhost;
+-----------------------------------------+
| Grants for zj4@localhost                |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'zj4'@'localhost' |
+-----------------------------------------+
1 row in set (0.00 sec)
(2) 赋予 zj4@localhost 所有数据库上的所有表的 select 权限
MySQL [(none)]> grant select on *.* to 'zj4'@'localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)

MySQL [(none)]> show grants for zj4@localhost;
+------------------------------------------+
| Grants for zj4@localhost                 |
+------------------------------------------+
| GRANT SELECT ON *.* TO 'zj4'@'localhost' |
+------------------------------------------+
1 row in set (0.00 sec)
(3) 继续给 zj4@localhost 赋予 select 和 insert 权限,和已有的 select 权限进行合并
MySQL [(none)]> show grants for 'zj4'@'localhost';
+--------------------------------------------------+
| Grants for zj4@localhost                         |
+--------------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO 'zj4'@'localhost' |
+--------------------------------------------------+
1 row in set (0.00 sec)

revoke 语句可以回收已经赋予的权限,对于上面的例子,这里决定要收回 zj4@localhost 上的 insert 和 select 权限:

MySQL [(none)]> revoke select,insert on *.* from zj4@localhost;
Query OK, 0 rows affected, 1 warning (0.00 sec)

MySQL [(none)]> show grants for zj4@localhost;
+-----------------------------------------+
| Grants for zj4@localhost                |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'zj4'@'localhost' |
+-----------------------------------------+
1 row in set (0.00 sec)

usage 权限不能被回收,也就是说,revoke 用户并不能删除用户。

4. 修改账号密码

(1) 可以用 mysqladmin 命令在命令行指定密码。
shell> mysqladmin -u user_name -h host_name password "123456"
(2) 执行 set password 语句。
mysql> set password for 'username'@'%' = password('pwd');

如果是更改自己的密码,可以省略 for 语句

mysql> set password=password('pwd');
(3) 可以在全局级别使用 grant usage 语句(在“.”)来指定某个账户的密码而不影响账户当前的权限。
mysql> grant usage on *.* to 'username'@'%' identified by 'pwd';

5. 删除账号

要彻底的删除账号,可以使用 drop user :

drop user zj@localhost;

6. 账号资源限制

创建 MySQL 账号时,还有一类选项称为账号资源限制,这类选项的作用是限制每个账号实际具有的资源限制,这里的“资源”主要包括:

  • max_queries_per_hour count : 单个账号每小时执行的查询次数

  • max_upodates_per_hour count : 单个账号每小时执行的更新次数

  • max_connections_per_hour count : 单个账号每小时连接服务器的次数

  • max_user_connections count : 单个账号并发连接服务器的次数







권한 제어

# 🎜🎜#


~                          -                                                                                                                                                                                                                                                                                                                                          

사용자가 신원 인증을 통과하면 MySQL의 권한 테이블이 메모리에 로드됩니다. 이러한 방식으로 사용자는 권한 내에서 작업을 수행할 수 있습니다. 다양한 작업을 수행합니다. 1. 권한 테이블에 대한 액세스 권한 액세스의 두 프로세스에서 시스템은 사용자, 호스트 및 db에서 "mysql" 데이터베이스(MySQL 설치 시 생성됨, 데이터베이스 이름은 "mysql")를 사용합니다. 가장 중요한 3개의 권한 테이블. 이 3개의 테이블 중 가장 중요한 것은 user 테이블이고, 그 다음이 db 테이블이며, 대부분의 경우 호스트 테이블은 사용되지 않습니다. 사용자 열은 주로 사용자 열, 권한 열, 보안 열, 리소스 제어 열의 4개 부분으로 나뉩니다. 등의 데이터베이스 작업에는 일반 권한이 사용됩니다.

사용자가 접속하면 권한 테이블의 접근 과정은 다음 두 가지 과정으로 진행됩니다.

먼저 사용자의 호스트, 사용자, 비밀번호 3개 필드에서 연결의 IP, 사용자 이름, 비밀번호를 결정합니다. table 테이블에 존재합니까? 그렇다면 인증하고, 그렇지 않으면 연결을 거부하십시오.

신원 인증이 통과되면 user -> db -> columns_priv 순서대로 데이터베이스 권한을 얻게 됩니다.

이 권한 표에서는 권한 범위가 순서대로 줄어들고 전역 권한이 로컬 권한을 포함합니다. 위의 첫 번째 단계는 이해하기 쉽도록 두 번째 단계를 예를 통해 자세히 설명하겠습니다.

select_privsuper_priv테스트를 용이하게 하려면 sql_mode

// sql_mode 默认值中有 NO_AUTO_CREATE_USER (防止GRANT自动创建新用户,除非还指定了密码)
SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
1 변수를 수정해야 합니다. 사용자 zj@localhost를 생성하고 모든 데이터베이스의 모든 테이블에 선택 권한을 부여하세요
    MySQL [mysql]> grant select on *.* to zj@localhost;
    Query OK, 0 rows affected, 2 warnings (0.00 sec)
    
    MySQL [mysql]> select * from user where user="zj" and host='localhost' \G;
    *************************** 1. row ***************************
                      Host: localhost
                      User: zj
               Select_priv: Y
               Insert_priv: N
               Update_priv: N
               Delete_priv: N
               Create_priv: N
                 Drop_priv: N
               Reload_priv: N
    ...
  • 2. db 테이블을 볼 수 있습니다

    MySQL [mysql]> select * from db where user='zj' \G ;
    Empty set (0.00 sec)
    user 테이블의 select_priv 컬럼이 "Y"인데 db 테이블에 기록이 없음을 확인합니다. 즉, 모든 데이터베이스에 대해 동일한 권한을 가진 사용자는 db 테이블에 기록될 필요가 없고, 사용자 테이블의 select_priv를 "Y"로 변경해야 합니다.” 그게 전부입니다. 즉, 사용자 테이블의 모든 권한은 모든 데이터베이스에 대한 권한을 나타냅니다.
  • 3. zj@localhost의 권한을 변경하여 t2 데이터베이스의 모든 테이블에 대한 권한만 선택하세요.

    MySQL [mysql]> revoke select on *.* from zj@localhost;
    Query OK, 0 rows affected, 1 warning (0.02 sec)
    
    MySQL [mysql]> grant select on t2.* to zj@localhost;
    Query OK, 0 rows affected, 1 warning (0.04 sec)
    
    MySQL [mysql]> select * from user where user='zj' \G;
    *************************** 1. row ***************************
                      Host: localhost
                      User: zj
               Select_priv: N
               Insert_priv: N
               Update_priv: N
               Delete_priv: N
               Create_priv: N
                 Drop_priv: N
               Reload_priv: N
    ...
    
    MySQL [mysql]> select * from db where user='zj' \G;
    *************************** 1. row ***************************
                     Host: localhost
                       Db: t2
                     User: zj
              Select_priv: Y
              Insert_priv: N
              Update_priv: N
              Delete_priv: N
              Create_priv: N
                Drop_priv: N
               Grant_priv: N
    이때, user 테이블의 select_priv가 "N"으로 변경되었고, db 테이블에 db t2라는 레코드가 추가된 것이 발견되었습니다. 즉, 특정 권한이 데이터베이스의 일부에만 부여된 경우 사용자 테이블의 해당 권한 열은 "N"으로 유지되고 특정 데이터베이스 권한이 db 테이블에 기록됩니다. 테이블과 열의 권한 메커니즘은 db의 권한 메커니즘과 유사합니다.
  • 위의 예에서 볼 수 있듯이 사용자가 권한 인증을 통과하고 권한이 할당되면 user -> db -> tables_priv -> columns_priv 순서로 권한이 할당됩니다. 권한 테이블 사용자가 먼저 확인됩니다. 사용자의 해당 권한이 "Y"이면 모든 데이터베이스에 대한 이 사용자의 권한이 "Y"이고, "N"이면 db, tables_priv 및 columns_priv가 더 이상 확인되지 않습니다. 이 사용자에 해당하는 특정 권한은 db 테이블에서 확인되고, db의 해당 권한이 "N"이면 tables_priv 및 columns_priv에서 권한을 차례로 확인합니다. 모두 "N"이면 권한을 보유하지 않은 것으로 판단됩니다.


    2. 계정 관리 에는 주로 계정 생성, 권한 변경, 계정 삭제가 포함됩니다.

    1. 계정을 생성합니다

    grant 구문을 사용하여 생성합니다. 예:

    (1) 모든 데이터베이스에 대해 모든 권한을 실행할 수 있고 로컬에서만 연결할 수 있는 권한을 가진 사용자 zj를 생성합니다.

    MySQL [mysql]> grant all privileges on *.* to zj@localhost;
    Query OK, 0 rows affected, 2 warnings (0.00 sec)
    
    MySQL [mysql]> select * from user where user="zj" and host="localhost" \G;
    *************************** 1. row ***************************
                      Host: localhost
                      User: zj
               Select_priv: Y
               Insert_priv: Y
               Update_priv: Y
               Delete_priv: Y
               Create_priv: Y
                 Drop_priv: Y
               Reload_priv: Y
             Shutdown_priv: Y

    user 테이블에서 grant_priv 권한을 제외한 모든 권한이 "Y"인 것을 확인할 수 있습니다.

    (2) (1)을 기준으로 부여 권한을 zj

    MySQL [(none)]> grant all privileges on *.* to zj@localhost with grant option;
    Query OK, 0 rows affected, 1 warning (0.01 sec)
    
    MySQL [mysql]> select * from user where user="zj" and host='localhost' \G ;
    *************************** 1. row ***************************
                      Host: localhost
                      User: zj
               Select_priv: Y
               Insert_priv: Y
               Update_priv: Y
               Delete_priv: Y
               Create_priv: Y
                 Drop_priv: Y
               Reload_priv: Y
             Shutdown_priv: Y
              Process_priv: Y
                 File_priv: Y
                Grant_priv: Y
    ...

    로 높인다(3) (2)를 기준으로 비밀번호를 "123"으로 설정

    MySQL [mysql]> grant all  privileges on *.* to zj@localhost identified by '123' with grant option;
    Query OK, 0 rows affected, 2 warnings (0.01 sec)
    
    MySQL [mysql]> select * from user where user="zj" and host="localhost" \G ;
    *************************** 1. row ***************************
                      Host: localhost
                      User: zj
               Select_priv: Y
               Insert_priv: Y
               Update_priv: Y
               Delete_priv: Y
               Create_priv: Y
                 Drop_priv: Y
               Reload_priv: Y
    ......  
     authentication_string: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
          password_expired: N
     password_last_changed: 2017-09-25 20:29:42
         password_lifetime: NULL

    비밀번호가 잔뜩 암호화된 것을 확인할 수 있다 그 이후의 문자열.

    (4) 创建新用户 zj2,可以从任何 IP 连接,权限为对 t2 数据库里的所有表进行 select 、update、insert 和 delete 操作,初始密码为“123”
    MySQL [mysql]> grant select ,insert, update,delete on t2.* to 'zj2'@'%' identified by '123';
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    MySQL [mysql]> select * from user where user='zj2' and host="%" \G;
    *************************** 1. row ***************************
                      Host: %
                      User: zj2
               Select_priv: N
               Insert_priv: N
               Update_priv: N
               Delete_priv: N
               Create_priv: N
                 Drop_priv: N
    ......
     authentication_string: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
          password_expired: N
     password_last_changed: 2017-09-25 20:37:49
         password_lifetime: NULL
    
    MySQL [mysql]> select * from db where user="zj2" and host='%' \G;
    *************************** 1. row ***************************
                     Host: %
                       Db: t2
                     User: zj2
              Select_priv: Y
              Insert_priv: Y
              Update_priv: Y
              Delete_priv: Y
              Create_priv: N
                Drop_priv: N
    ......

    user 表中的权限都是“N”,db 表中增加的记录权限则都是“Y”。一般的,只授予用户适当的权限,而不会授予过多的权限。

    本例中的 IP 限制为所有 IP 都可以连接,因此设置为 “*”,mysql 数据库中是通过 user 表的 host 字段来进行控制,host 可以是以下类型的赋值。

    • Host 值可以是主机名或IP号,或 “localhost” 指出本地主机。

    • 可以在 Host 列值使用通配符字符 “%” 和 “_”

    • Host 值 “%” 匹配任何主机名,空 Host 值等价于 “%”,它们的含义与 like 操作符的模式匹配操作相同。

    注意: mysql 数据库的 user 表中 host 的值为 “*” 或者空,表示所有外部 IP 都可以连接,但是不包括本地服务器 localhost,因此,如果要包括本地服务器,必须单独为 localhost 赋予权限。

    (5) 授予 super、process、file 权限给用户 zj3@%
    MySQL [mysql]> grant super,process,file on *.* to 'zj3'@'%';
    Query OK, 0 rows affected, 1 warning (0.00 sec)

    因为这几个权限都是属于管理权限,因此不能够指定某个数据库,on 后面必须跟 “.”,下面语法将提示错误

    MySQL [mysql]> grant super,process,file on t2.* to 'zj3'@'%';
    ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
    (6) 只授予登录权限给 zj4@localhost
    MySQL [mysql]> grant usage on *.* to 'zj4'@'localhost';
    Query OK, 0 rows affected, 2 warnings (0.01 sec)
    
    MySQL [mysql]> exit
    Bye
    
    zj@bogon:~$ mysql -uzj4 -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 78
    Server version: 5.7.18-log Source distribution
    
    Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MySQL [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    +--------------------+
    1 row in set (0.02 sec)

    usage 权限只能用于数据库登录,不能执行任何操作

    2. 查看账号权限

    账号创建好后,可以通过如下命令查看权限:

    show grants for user@host;

    示例:

    MySQL [(none)]> show grants for zj@localhost;
    +-------------------------------------------------------------------+
    | Grants for zj@localhost                                           |
    +-------------------------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'zj'@'localhost' WITH GRANT OPTION |
    +-------------------------------------------------------------------+
    1 row in set (0.01 sec)

    3. 更改账号权限

    可以进行权限的新增和回收。和创建账号一样,权限变更也有两种方法:使用 grant(新增) 和 revoke (回收) 语句,或者更改权限表。

    示例:
    (1) zj4@localhost 目前只有登录权限
    MySQL [(none)]> show grants for zj4@localhost;
    +-----------------------------------------+
    | Grants for zj4@localhost                |
    +-----------------------------------------+
    | GRANT USAGE ON *.* TO 'zj4'@'localhost' |
    +-----------------------------------------+
    1 row in set (0.00 sec)
    (2) 赋予 zj4@localhost 所有数据库上的所有表的 select 权限
    MySQL [(none)]> grant select on *.* to 'zj4'@'localhost';
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    MySQL [(none)]> show grants for zj4@localhost;
    +------------------------------------------+
    | Grants for zj4@localhost                 |
    +------------------------------------------+
    | GRANT SELECT ON *.* TO 'zj4'@'localhost' |
    +------------------------------------------+
    1 row in set (0.00 sec)
    (3) 继续给 zj4@localhost 赋予 select 和 insert 权限,和已有的 select 权限进行合并
    MySQL [(none)]> show grants for 'zj4'@'localhost';
    +--------------------------------------------------+
    | Grants for zj4@localhost                         |
    +--------------------------------------------------+
    | GRANT SELECT, INSERT ON *.* TO 'zj4'@'localhost' |
    +--------------------------------------------------+
    1 row in set (0.00 sec)

    revoke 语句可以回收已经赋予的权限,对于上面的例子,这里决定要收回 zj4@localhost 上的 insert 和 select 权限:

    MySQL [(none)]> revoke select,insert on *.* from zj4@localhost;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    MySQL [(none)]> show grants for zj4@localhost;
    +-----------------------------------------+
    | Grants for zj4@localhost                |
    +-----------------------------------------+
    | GRANT USAGE ON *.* TO 'zj4'@'localhost' |
    +-----------------------------------------+
    1 row in set (0.00 sec)

    usage 权限不能被回收,也就是说,revoke 用户并不能删除用户。

    4. 修改账号密码

    (1) 可以用 mysqladmin 命令在命令行指定密码。
    shell> mysqladmin -u user_name -h host_name password "123456"
    (2) 执行 set password 语句。
    mysql> set password for 'username'@'%' = password('pwd');

    如果是更改自己的密码,可以省略 for 语句

    mysql> set password=password('pwd');
    (3) 可以在全局级别使用 grant usage 语句(在“.”)来指定某个账户的密码而不影响账户当前的权限。
    mysql> grant usage on *.* to 'username'@'%' identified by 'pwd';

    5. 删除账号

    要彻底的删除账号,可以使用 drop user :

    drop user zj@localhost;

    6. 账号资源限制

    创建 MySQL 账号时,还有一类选项称为账号资源限制,这类选项的作用是限制每个账号实际具有的资源限制,这里的“资源”主要包括:

    • max_queries_per_hour count : 单个账号每小时执行的查询次数

    • max_upodates_per_hour count : 单个账号每小时执行的更新次数

    • max_connections_per_hour count : 单个账号每小时连接服务器的次数

    • max_user_connections count : 单个账号并发连接服务器的次数


    • MySQL은 권한 관리를 어떻게 수행합니까?



    你可能感兴趣的



    评论                                                    

    默认排序                        时间排序



    载入中...

    显示更多评论



    위 내용은 MySQL은 권한 관리를 어떻게 수행합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명
    이 기사는 思否에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
    使用PHP和SQLite实现用户权限和访问控制使用PHP和SQLite实现用户权限和访问控制Jul 29, 2023 pm 02:33 PM

    使用PHP和SQLite实现用户权限和访问控制在现代的web应用程序中,用户权限和访问控制是非常重要的一部分。通过正确的权限管理,可以确保只有经过授权的用户能够访问特定的页面和功能。在本文中,我们将学习如何使用PHP和SQLite来实现基本的用户权限和访问控制。首先,我们需要创建一个SQLite数据库来存储用户和其权限的信息。下面是简单的用户表和权限表的结构

    Laravel中的用户管理和权限控制:实现多用户和角色分配Laravel中的用户管理和权限控制:实现多用户和角色分配Aug 12, 2023 pm 02:57 PM

    Laravel中的用户管理和权限控制:实现多用户和角色分配引言:在现代的Web应用程序中,用户管理和权限控制是非常重要的功能之一。Laravel作为一种流行的PHP框架,提供了强大而灵活的工具来实现多用户和角色分配的权限控制。本文将介绍如何在Laravel中实现用户管理和权限控制的功能,并提供相关的代码示例。一、安装与配置首先,在Laravel中实现用户管理

    如何实现PHP的用户登录和权限控制?如何实现PHP的用户登录和权限控制?Jun 29, 2023 pm 02:28 PM

    如何实现PHP的用户登录和权限控制?在开发Web应用程序时,用户登录和权限控制是非常重要的功能之一。通过用户登录,我们可以对用户进行身份验证,并且基于用户的权限进行一系列的操作控制。本文将介绍如何使用PHP实现用户登录和权限控制功能。一、用户登录功能实现用户登录功能是用户验证的第一步,只有通过验证的用户才能进一步进行操作。下面是一个基本的用户登录实现过程:创

    PHP开发指南:如何实现网站访问权限控制PHP开发指南:如何实现网站访问权限控制Aug 18, 2023 pm 10:46 PM

    PHP开发指南:如何实现网站访问权限控制在开发一个网站时,保护用户数据和确保敏感信息的安全性至关重要。一个常用且有效的方法是通过网站访问权限控制来限制不同用户对不同页面的访问权限。本文将介绍如何使用PHP实现网站访问权限控制,并提供一些代码示例来帮助您快速上手。步骤一:创建数据库表首先,我们需要创建一个数据库表来存储用户信息和权限。下面是一个示例的MySQL

    如何在Zend框架中使用ACL(Access Control List)进行权限控制如何在Zend框架中使用ACL(Access Control List)进行权限控制Jul 29, 2023 am 09:24 AM

    如何在Zend框架中使用ACL(AccessControlList)进行权限控制导言:在一个Web应用程序中,权限控制是至关重要的一项功能。它可以确保用户只能访问其有权访问的页面和功能,并防止未经授权的访问。Zend框架提供了一种方便的方法来实现权限控制,即使用ACL(AccessControlList)组件。本文将介绍如何在Zend框架中使用ACL

    如何处理Java后端功能开发中的权限控制?如何处理Java后端功能开发中的权限控制?Aug 10, 2023 pm 05:45 PM

    如何处理Java后端功能开发中的权限控制?在Java后端功能开发中,权限控制是一个重要的问题。合理的权限控制能够保护系统的安全,防止未经授权的用户访问敏感数据或功能。本文将介绍一些常见的权限控制方法,并给出代码示例。一、基于角色的权限控制(RBAC)基于角色的权限控制是一种常见且实用的权限控制方式。它将用户与角色进行关联,而角色再与权限进行关联,通过给用户分

    Django框架中的权限控制技巧(第二部分)Django框架中的权限控制技巧(第二部分)Jun 17, 2023 pm 07:08 PM

    Django框架中的权限控制技巧(第二部分)在Django框架中,权限控制是非常重要的一环。在上一篇文章中,我们已经介绍了Django框架中的一些基础权限控制技巧,包括使用内置的权限认证系统和基于装饰器的权限控制。本篇文章将继续探讨Django框架中的其他权限控制技巧。自定义认证后端在Django框架中,我们可以使用自定义认证后端来实现定制化的认证逻辑。通过

    如何设置强制访问控制以限制用户对文件和目录的权限如何设置强制访问控制以限制用户对文件和目录的权限Jul 05, 2023 am 08:06 AM

    如何设置强制访问控制以限制用户对文件和目录的权限在操作系统中,强制访问控制(MandatoryAccessControl,MAC)是一种安全机制,用于限制用户对文件和目录的访问权限。相比普通的访问控制机制,如自主访问控制(DiscretionaryAccessControl,DAC),强制访问控制提供了更严格的访问控制策略,确保只有具备相应权限的用户

    See all articles

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    AI Hentai Generator

    AI Hentai Generator

    AI Hentai를 무료로 생성하십시오.

    뜨거운 도구

    ZendStudio 13.5.1 맥

    ZendStudio 13.5.1 맥

    강력한 PHP 통합 개발 환경

    Eclipse용 SAP NetWeaver 서버 어댑터

    Eclipse용 SAP NetWeaver 서버 어댑터

    Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

    에디트플러스 중국어 크랙 버전

    에디트플러스 중국어 크랙 버전

    작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

    DVWA

    DVWA

    DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

    Atom Editor Mac 버전 다운로드

    Atom Editor Mac 버전 다운로드

    가장 인기 있는 오픈 소스 편집기