MySQL資料庫許可權體系入門(4)---管理全域性許可權

junsansi發表於2010-10-14

三、許可權級別

  總的來看,MYSQL的許可權從大的粒度上劃分可以分成5類:全域性、資料庫、表、列、程式,通過對這5個大類許可權的細分,可以精確地為某個使用者分配從某臺機器連線進來訪問某個資料庫下某個表的某個列的某部分許可權。

  授權主要是通過grant命令(或手動向字典表中插入或修改記錄),對應的許可權關鍵字,就是2.2小節中所列的priv_type,相對於ORACLE資料庫來說,我個人認為,MySQL資料庫中許可權設定真簡單,注意,簡單不是一個貶義詞,三思曾經無數次無數個場合強調過這樣一種觀點:簡單意味著靈活,而靈活在有心人的手上能實現的功能非常之強大。

  本章儘可能多的通過示例,幫助大家理解GRANT語句的用法,當然,最重要的是理解MySQL資料庫的許可權體系。

    提示:

    user/db/host幾個字典表中,host值的比較對大小寫不敏感。User、Password、Db和Table_name值對大小寫敏感。Column_name值對大小寫不敏感。

3.1、全域性

  所謂全域性,指定的是擁有該Mysql伺服器所有資料庫的[所有]物件的[所有]許可權(注:[]表示可選),與全域性相關的許可權資訊記入mysql.user表。預設情況下,使用CREATE USER建立的使用者擁有登入MySQL資料庫的許可權和操作test庫的許可權(關於test資料庫的許可權問題,將在後面章節中專門描述),此時檢視mysql.user表中的資訊,所有與許可權相關列的列值均應為'N',表示無許可權,一旦授予了全域性操作許可權,則mysql.user表中許可權對應列值應變為'Y',這樣,該使用者就擁有在所連線的MySQL伺服器下所有資料庫中執行相應操作的許可權。

  例如,新建使用者jss,並授予所有資料庫中擁有create表的許可權,操作如下:

    mysql> create user jss@'%' identified by 'jss';

    Query OK, 0 rows affected (0.00 sec)

    mysql> grant create on *.* to jss;

    Query OK, 0 rows affected (0.00 sec)

    mysql> select * from user where user='jss'\G

    *************************** 1. row ***************************

                     Host: %

                     User: jss

                 Password: *284578888014774CC4EF4C5C292F694CEDBB5457

              Select_priv: N

              Insert_priv: N

              Update_priv: N

              Delete_priv: N

              Create_priv: Y

                Drop_priv: N

              Reload_priv: N

            Shutdown_priv: N

             Process_priv: N

                File_priv: N

               Grant_priv: N

          References_priv: N

               Index_priv: N

               Alter_priv: N

             Show_db_priv: N

               Super_priv: N

    Create_tmp_table_priv: N

         Lock_tables_priv: N

             Execute_priv: N

          Repl_slave_priv: N

         Repl_client_priv: N

         Create_view_priv: N

           Show_view_priv: N

      Create_routine_priv: N

       Alter_routine_priv: N

         Create_user_priv: N

               Event_priv: N

             Trigger_priv: N

                 ssl_type: 

               ssl_cipher: 

              x509_issuer: 

             x509_subject: 

            max_questions: 0

              max_updates: 0

          max_connections: 0

     max_user_connections: 0

    1 row in set (0.00 sec)

  此權一授,則該使用者可輕鬆檢視當前連線的MySQL資料庫中建立的所有db,並能夠在任意db中建立表物件(information_schema庫除外,該庫具有一定特殊性,後面章節詳述)。

    mysql> select user();

    +---------------+

    | user()        |

    +---------------+

    | jss@10.0.0.99 |

    +---------------+

    1 row in set (0.01 sec)

    mysql> show databases;

    +--------------------+

    | Database           |

    +--------------------+

    | information_schema |

    | jssdb              |

    | mysql              |

    | test               |

    +--------------------+

    4 rows in set (0.00 sec)

    mysql> use jssdb;

    Database changed

    mysql> create table j1 (id int);

    Query OK, 0 rows affected (0.03 sec)

  不過需要注意,CREATE許可權特指CREATE表物件,別的許可權沒有,例如,想刪除或修改物件是不行的,甚至想查詢該物件也是不行的:

    mysql> drop table j1;

    ERROR 1142 (42000): DROP command denied to user 'jss'@'10.0.0.99' for table 'j1'

    mysql> alter table j1 add vl varchar(20);

    ERROR 1142 (42000): ALTER command denied to user 'jss'@'10.0.0.99' for table 'j1'

    mysql> select * from j1;

    ERROR 1142 (42000): SELECT command denied to user 'jss'@'10.0.0.99' for table 'a1'

  是這樣的網總:我們授予的僅僅只是create許可權,想刪除是不行的是肯定不行的。對對,即使要刪除的物件是自己剛剛建立的也不行。不不,多貴的電腦都不行。

  這點與ORACLE資料庫中對應許可權的設計並不相同,ORACLE中的使用者擁有CREATE物件的話,同時預設也將擁有該物件的ALTER、DROP、GRANT等許可權。

    提示:

    全域性下的CREATE許可權不僅能夠建表,還能夠建庫。

=======================================

檢視之前的連載:

MySQL資料庫許可權體系入門(3)---管理使用者許可權

MySQL資料庫許可權體系入門(2)---建立使用者

MySQL資料庫許可權體系入門(1)---工作原理

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-675953/,如需轉載,請註明出處,否則將追究法律責任。

相關文章