<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 背景 從 MairaDB 10.0.5 開始,MariaDB 開始提供 Role(角色)的功能,補全了大家一直吐槽的 MySQL 不能像 Oracle 一樣支持角色定義的功能。 一個角色就是把一堆的權限捆綁在一起授權,這個功能對于有很多用戶擁有相同權限的情況可以顯著提高管理效率。在有角色之前,這種情況只能為每個用戶都做一大堆的授權操作,或者是給很多個需要相同權限的用戶提供同一個賬號去使用,這又會導致你要分析用戶行為的時候不知道哪個操作是哪個具體用戶發起的。 有了角色,這樣的管理就太容易了。例如,可以把權限需求相同的用戶賦予同一個角色,只要定義好這個角色的權限就行,要更改這類用戶的權限,只需要更改這個角色的權限就可以了,變化會影響到所有這個角色的用戶。 ## 用法 創建角色需要使用 CREATE ROLE 語句,刪除角色使用 DROP ROLE 語句。然后再通過 GRANT 語句給角色增加授權,也可以把角色授權給用戶,然后這個角色的權限就會分配給這個用戶。同樣,REVOKE 語句也可以用來移除角色的授權,或者把一個用戶移除某個角色。 一旦用戶連接上來,他可以執行 SET ROLE 語句來把自己切換到某個被授權的角色下,從而使用這個角色的權限。通過 CURRENT_ROLE 函數可以顯示當前用戶執行在哪個角色下,沒有就是 NULL。 只有直接被授予用戶的角色才可以使用 SET ROLE 語句,間接授予的角色并不能被 SET ROLE 設置。例如角色B被授予角色A,而角色A被授予用戶A,那么用戶A只能 SET ROLE 角色A,而不能設置角色B。 從 MariaDB 10.1.1 開始,可以利用 SET DEFAULT ROLE 語句來給某個用戶設置默認的角色。當用戶鏈接的時候,會默認使用這個角色,其實就是連接后自動做了一個 SET ROLE 語句。 ## 使用舉例 創建一個角色并給他賦權: ~~~ CREATE ROLE journalist; GRANT SHOW DATABASES ON *.* TO journalist; GRANT journalist to hulda; ~~~ 這里 hulda 并不馬上擁有 SHOW DATABASES 權限,他還需要先執行一個 SET ROLE 語句啟用這個角色: ~~~ SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | +--------------------+ SELECT CURRENT_ROLE; +--------------+ | CURRENT_ROLE | +--------------+ | NULL | +--------------+ SET ROLE journalist; SELECT CURRENT_ROLE; +--------------+ | CURRENT_ROLE | +--------------+ | journalist | +--------------+ SHOW DATABASES; +--------------------+ | Database | +--------------------+ | ... | | information_schema | | mysql | | performance_schema | | test | | ... | +--------------------+ SET ROLE NONE; ~~~ 角色也可以授權給另一個角色: ~~~ CREATE ROLE writer; GRANT SELECT ON data.* TO writer; GRANT writer TO journalist; ~~~ 但是只能 SET ROLE 直接給用戶的角色。像這里 hulda 只能 SET ROLE journalist,而不能 SET ROLE writer,并且只要啟用了 journalist 角色,hulda 也自動獲得了 writer 角色的權限: ~~~ SELECT CURRENT_ROLE; +--------------+ | CURRENT_ROLE | +--------------+ | NULL | +--------------+ SHOW TABLES FROM data; Empty set (0.01 sec) SET ROLE journalist; SELECT CURRENT_ROLE; +--------------+ | CURRENT_ROLE | +--------------+ | journalist | +--------------+ SHOW TABLES FROM data; +------------------------------+ | Tables_in_data | +------------------------------+ | set1 | | ... | +------------------------------+ ~~~ 角色和視圖、存儲過程。 當用戶設置啟用了一個角色,從某種意義上說他有兩個身份的權限集合(用戶本身和他的角色)但是一個視圖或者存儲過程只能有一個定義者。所以,當一個視圖或者存儲過程通過 SQL SECURITY DEFINER 創建時,只能指定 CURRENT_USER 或者 CURRENT_ROLE 中的一個。所以有些情況下,你創建了一個視圖,但是你卻可能沒法使用它。 ~~~ CREATE ROLE r1; GRANT ALL ON db1.* TO r1; GRANT r1 TO foo@localhost; GRANT ALL ON db.* TO foo@localhost; SELECT CURRENT_USER +---------------+ | current_user | +---------------+ | foo@localhost | +---------------+ SET ROLE r1; CREATE TABLE db1.t1 (i int); CREATE VIEW db.v1 AS SELECT * FROM db1.t1; SHOW CREATE VIEW db.v1; +------+------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | View | Create View | character_set_client | collation_connection | +------+------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | v1 | CREATE ALGORITHM=UNDEFINED DEFINER=`foo`@`localhost` SQL SECURITY DEFINER VIEW `db`.`v1` AS SELECT `db1`.`t1`.`i` AS `i` from `db1`.`t1` | utf8 | utf8_general_ci | +------+------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ CREATE DEFINER=CURRENT_ROLE VIEW db.v2 AS SELECT * FROM db1.t1; SHOW CREATE VIEW db.b2; +------+-----------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | View | Create View | character_set_client | collation_connection | +------+-----------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | v2 | CREATE ALGORITHM=UNDEFINED DEFINER=`r1` SQL SECURITY DEFINER VIEW `db`.`v2` AS select `db1`.`t1`.`a` AS `a` from `db1`.`t1` | utf8 | utf8_general_ci | +------+------------------------------------------------------------------------------------- ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看