<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 20.3\. 角色成員 把用戶組合起來簡化權限管理是個常用的便利方法:用這樣的方法,權限可以賦予整個組, 也可以對整個組撤消。在PostgreSQL里, 這些事情是通過創建代表一個組的角色,然后賦予組角色的_成員_ 權限給獨立的用戶角色的方法實現的。 要設置一個組角色,首先創建角色: ``` CREATE ROLE _name_; ``` 一般作為組使用的角色不應當具有`LOGIN`屬性,雖然你可以設置它。 一旦組角色已經存在了,那么你就可以用[GRANT](#calibre_link-19) 和[REVOKE](#calibre_link-20)命令添加和撤消權限: ``` GRANT _group_role_ TO _role1_, ... ; REVOKE _group_role_ FROM _role1_, ... ; ``` 你還可以賦予成員權限給其它組角色(因為在組角色和非組角色之間沒有實質的區別)。 唯一的制約是你不能建立循環的成員關系。另外,不允許給`PUBLIC`角色賦予成員權限。 一個組角色的成員可以用兩種方法使用角色的權限。首先, 一個組的每個成員都可以明確用[SET ROLE](#calibre_link-21)臨時"變成"該組的成員。 在這個狀態下,數據庫會話具有該組角色的權限,而不是原始的登錄角色權限, 這個時候創建的數據庫對象被認為是由組角色擁有,而不是登錄角色。第二, 擁有`INHERIT`屬性的角色成員自動具有它們所屬組角色的權限, 包括任何通過那些角色繼承的權限。例如,假如我們做了下面的事情: ``` CREATE ROLE joe LOGIN INHERIT; CREATE ROLE admin NOINHERIT; CREATE ROLE wheel NOINHERIT; GRANT admin TO joe; GRANT wheel TO admin; ``` 那么在以角色`joe`連接之后,該數據庫會話將立即擁有直接賦予`joe` 的權限加上任何賦予`admin`的權限,因為`joe`"繼承" 了`admin`的權限。不過,賦予`wheel`的權限不可用, 因為即使`joe`是`wheel`的一個間接成員, 但該成員關系是通過`admin`過來的,而該組有`NOINHERIT`屬性。在: ``` SET ROLE admin; ``` 之后,該會話將只擁有那些已賦予`admin`的權限, 而不包括那些已賦予`joe`的權限。在 ``` SET ROLE wheel; ``` 之后,該會話將只能使用已賦予`wheel`的權限,而不包括已賦予`joe` 或`admin`的權限。原來的權限可以用下列之一恢復: ``` SET ROLE joe; SET ROLE NONE; RESET ROLE; ``` > **Note:** `SET ROLE`命令總是允許選取任意登錄角色直接或者間接所在的組角色。 因此,在上面的例子里,我們沒必要在變成`wheel`之前先變成`admin`。 > **Note:** 在 SQL 標準里,在用戶和角色之間有明確的區別,并且用戶并不會自動繼承權限,而角色可以。 這個行為在PostgreSQL里面可以通過給予那些當作 SQL 角色使用的角色以 `INHERIT`屬性,而給予當作 SQL 用戶使用的角色以`NOINHERIT`屬性來實現。 不過,PostgreSQL缺省是給予所有角色`INHERIT`屬性, 目的是和 8.1 之前的版本向下兼容,那些版本里,用戶總是能使用他們所在組被賦予的權限。 角色屬性`LOGIN`, `SUPERUSER`, `CREATEDB`, `CREATEROLE` 可以被認為是特殊的權限,但是它們從來不會像數據庫對象上的普通權限那樣繼承。 你必須明確地`SET ROLE`到一個特殊的角色,這個角色應該是擁有這些屬性的角色, 然后才能利用這些屬性。繼續上面的例子,我們也可以選擇給`admin`角色賦予 `CREATEDB`和`CREATEROLE`權限。然后,以`joe` 連接的會話不會立即有這些權限,只有在`SET ROLE admin`之后才有。 要刪除一個組角色,用[DROP ROLE](#calibre_link-18)命令: ``` DROP ROLE _name_; ``` 任何在組角色里面的成員關系都會自動撤消(但是成員角色自己則不受影響)。 不過,請注意任何組角色擁有的對象都必須首先刪除或者賦予其它所有者; 并且任何給該組角色賦予的權限都必須撤消。
                  <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>

                              哎呀哎呀视频在线观看