《mysql性能調優與架構設計》筆記:三mysql 安全管理

4.1數據庫系統安全相關因素mysql

        1,外圍網絡sql

        2,主機:數據庫

        3,數據庫自己安全

            訪問受權相關模塊主要是由兩部分組成:網絡

                一個是基本的用戶管理模塊:主要負責用戶登陸連接相關的基本權限控制spa

                另一個是訪問受權控制模塊:隨時隨地檢查已經進門的訪問者,校驗他們是否 有訪問所發出請求須要訪問的數據的權限。經過校驗者可順利拿到數據,而未經過校驗的訪問者,只能收到「訪問越權了」的相關反饋。.net

            三道防線圖:orm

            

        4,代碼:sql注入--危害很大,防不勝防對象

    4.2權限系統簡介內存

        4.2.1,相關權限信息主要存儲在幾個被稱爲grant tables的系統表中。mysql.user,mysql.db,mysql.Host,mysql.table_priv,mysql.column_priv因爲權限表數據量比較小,並且訪問很是頻繁,因此mysql在啓動的時候就會將全部的權限信息Load到內存中,因此當咱們手動修改權限後要執行FLUSH PRIVILEGES命令來從新加載mysql的權限信息。若是用GRANT,REVOKE,DROP USER不須要執行FLUSH PRIVILEGES,這個幾個命令在修改表的時候,內存也進行了修改。CREATE USER來添加用戶,注意新添加的用戶僅有初始user權限,經過CREATE USER 命令也會更新內存。推薦使用GRANT,REVOKE,DROP USER,CREATE USER進行權限控制。

                5.6以上不包含5.6               5.6以上包含5.6   

            

        4.2.2,權限授予與去除:

            GRANT  受權

            REVOKE 撤回權限

            更新 GRANT TABLES系列表的。

            給用戶受權的時候,不只須要指定用戶名,還須要指定來訪主機。若是僅僅指定用戶名,則mysql則會認爲是:'username'@'%'受權,要去除用戶權限,一樣也要指定來訪主機。

            查看某個用戶權限:"SHOW GRANTS FOR 'username'@'hostname';    查詢 grant tables 系列表裏的權限信息

        4.2.3,權限級別:MySQL 中的權限分爲五個級別

            1,Global Level:全局控制權限,全部權限信息都保存在mysql.user表中

                做用域:全部權限是針對整個mysqld的,對於數據庫下的全部表及全部字段都有效。

            2,Global Level主要有以下權限:

                

            3,要授予Global Level的權限,則只須要在執行GRANT命令的時候,用*.*來指定適用範圍是Global便可,當有多個權限須要授予的時候,也並不須要屢次受權,只須要將全部須要的權限經過逗號(,)隔開便可:例如:

            GRANT SELECT,UPDATE,DELETE,INSERT ON *.* TO 'username'@'localhost';

            4,Database Level

                在Global Level之下,其餘三個level之上

                做用域:指定數據庫下的全部對象

                權限設置:與Global Level比,少了一下幾個權限:CREATE USER,FILE,PROCESS,RELOAD,REPLICATION CLIENT,REPLICATION SLAVE,SHOW DATABASES,SHUTDOWN,SUPER,USEAGE,沒有增長任何權限

                實現方式:兩種:

                    1,GRANT ALTER ON test.* to 'username'@'localhost';

                    2,USE DATABASENAME

                         GRANT DROP ON * TO 'username'@'locahost';

                    3,在受權的時候,若是授予多個用戶相同的權限,則能夠受權多個用戶

                        GRANT CREATE ON test.* TO 'username1'@'localhost,'username2'@'localhost'

                        show grants form username@localhost

            5,Table Level

                   做用域:低於Global Level,Database Level,高於Column Level,Routine Level

                   實現:GRANT INDEX ON test.t1 TO 'USERNAME'@'LOCALHSOT';

                   權限設置:ALTER,CREATE,DELETE,DROP,INDEX,INSERT,SELECT,UPDATE

            6,Column Level:

                    做用域:低於Global,Database,Table level ,高於Routine Level

                    實現:GRANT select(id,value) on test.t2 to 'ab'@'localhsot';

                    注意:當某個用戶在向某個表插入(INSERT)數據的時候,若是該用戶在某個列上沒有INSERT權限,則該列的數據將插入默認值填充

            7,Routeine Level:

                做用域:低於其餘4中級別

                權限設置:EXECUTE,ALTER ROUTINE兩種

                實現:GRANT EXECUTE ON test.p1 to 'username'@'localhost';

            8,grant 權限:

                擁有grant權限的用戶,能夠將自身所擁有的權限受權給其餘用戶,一般加上:WITH GRANT OPTION字句達到受權的目的。

            9,咱們能夠經過GRANT ALL 語句授予某個Level的全部可用權限給某個用戶:

                grant all on test.t4 to 'abc';

            注意:上面的五個權限中:Table,Column,Routine三者在受權的時候有所依賴的對象必須是存在的,而不像DATABASE level,能夠在當前數據庫不存在的時候完成受權

        4.2.4訪問控制實現原理:

            1,組成:

                    用戶管理模塊:是否存在某個用戶

                        主要就是:user表中的host,username,password這三項

                    訪問控制模塊:監控來訪者每一個動做

                        全部受權用戶都存放在mysql.user表中

                    說明:用戶管理模塊決定造訪者可否進門,訪問控制模塊則決定每一個客人能那什麼不能拿什麼

           2,客戶管理模塊流程:

                    

            3,權限控制模塊流程:詳細解釋:page45

                    select * from test.t4 where status='ss';

                    

                
        4.3mysql 訪問受權策略:

            1,瞭解來訪主機:'username'@'%'授予全部主機權限

            2,瞭解用戶:只讀,只寫,備份,管理,訪問特定數據庫,表

            3,位工做分類

            4,確保絕對必要這擁有grant option權限

相關文章
相關標籤/搜索