資料庫角色

在資料庫中,為便於對用戶及許可權進行管理,可以將一組具有相同許可權的用戶組織在一起,這一組具有相同許可權的用戶就稱為角色(Role)。

操作流程

資料庫角色從概念上與作業系統用戶是完全無關的。 在實際使用中把它們對應起來可能比較方便,但不是必須的。 資料庫角色在整個資料庫集群中是全局的(而不是每個庫不同)。 要創建一個角色,使用 SQL 命令 CREATE ROLE:

CREATE ROLE name; name 遵循 SQL 標識的規則: 要么完全沒有特殊字元,要么用雙引號包圍(實際上你通常會給命令增加額外的選項,比如 LOGIN)。 要刪除一個現有角色,使用類似的命令 DROP ROLE:

DROP ROLE name; 為了方便,程式 createuser 和 dropuser 提供了對了這些 SQL 命令的封裝。 我們可以在 shell 命令上直接調用它們:

createuser name dropuser name 要判斷一套現有用戶,檢查 pg_role 系統表,比如

SELECT usename FROM pg_role; psql 的元命令 \du 也可以用於列出現有角色。

注意事項

為了能初創資料庫系統,新建立的資料庫總是包含一個預定義的角色。 這個角色將總是"超級用戶", 並且預設時(除非在運行 initdb 時更改過)他將和初始化該資料庫集群的用戶有相同的名稱。 通常,這個角色叫postgres。 為了創建更多角色,你必須首先以這個初始用戶角色聯接。

每一個和資料庫的連線都必須由一個角色身份進行, 這個角色決定在該連線上發出的命令的初始許可權。 和特定資料庫聯接的角色名是由初始化聯接請求的套用以相關的方式聲明的, 比如,psql 程式使用-U命令行選項聲明它代表的進行聯接的角色。 許多套用以當前作業系統的用戶名為預設(這樣的套用包括 createuser 和 psql)。 所以,在系統用戶和資料庫角色之間有某種命名關係會讓我們工作方便很多。

一個客戶端聯接可以用來聯接的資料庫角色集合是由客戶認證設定決定的, (因此,一個客戶端並不局限於以它的作業系統用戶同名的角色進行聯接, 就象你登錄系統的名稱不一定要是你的真實姓名一樣。) 因為角色的身份決定了一個已連線地客戶端可用的許可權, 所以在多用戶環境裡仔細配置這些內容是非常重要的。

固定資料庫角色

db_owner 在資料庫中有全部許可權。

db_accessadmin 可以添加或刪除用戶 ID。

db_securityadmin 可以管理全部許可權、對象所有權、角色和角色成員資格。

db_ddladmin 可以發出 ALL DDL,但不能發出 GRANT、REVOKE 或 DENY 語句。

db_backupoperator 可以發出 DBCC、CHECKPOINT 和 BACKUP 語句。

db_datareader 可以選擇資料庫內任何用戶表中的所有數據。

db_datawriter 可以更改資料庫內任何用戶表中的所有數據。

db_denydatareader 不能選擇資料庫內任何用戶表中的任何數據。

db_denydatawriter 不能更改資料庫內任何用戶表中的任何數據。

簡介

在資料庫中,為便於對用戶及許可權進行管理,可以將一組具有相同許可權的用戶組織在一起,這一組具有相同許可權的用戶就稱為角色(Role)。角色類似於Windows作業系統安全體系中的組的概念。在實際工作中,有大量的用戶其許可權是一樣的,如果讓資料庫管理員在每次創建完用戶後都對每個用戶分別授權,則是一件非常麻煩的事情。但如果把具有相同許可權的用戶集中在角色中進行管理,則會方便很多。

為一個角色進行許可權管理就相當於對該角色中的所有成員進行操作。可以為有相同許可權的一類用戶建立一個角色,然後為角色授予合適的許可權。使用角色的好處是系統管理員只需對許可權的種類進行劃分,然後將不同的許可權授予不同的角色,而不必關心有哪些具體的用戶。而且當角色中的成員發生變化時,比如添加成員或刪除成員,系統管理員都無需做任何關於許可權的操作。

在SOL Server 2008中,角色分為預定義的系統角色和用戶定義角色兩種。同對,根據角色作用範圍的不同,系統角色又分為伺服器級角色(稱為固定伺服器角色)和資料庫級角色(稱為固定資料庫角色)。用戶定義的角色均是資料庫級角色。

相關詞條

相關搜尋

熱門詞條

聯絡我們