複製鏈接
請複製以下鏈接發送給好友

數據庫角色

鎖定
數據庫中,為便於對用户及權限進行管理,可以將一組具有相同權限的用户組織在一起,這一組具有相同權限的用户就稱為角色(Role)。
中文名
數據庫角色
外文名
A database 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 不能更改數據庫內任何用户表中的任何數據。

數據庫角色簡介

角色類似於Windows操作系統安全體系中的組的概念。在實際工作中,有大量的用户其權限是一樣的,如果讓數據庫管理員在每次創建完用户後都對每個用户分別授權,則是一件非常麻煩的事情。但如果把具有相同權限的用户集中在角色中進行管理,則會方便很多。
為一個角色進行權限管理就相當於對該角色中的所有成員進行操作。可以為有相同權限的一類用户建立一個角色,然後為角色授予合適的權限。使用角色的好處是系統管理員只需對權限的種類進行劃分,然後將不同的權限授予不同的角色,而不必關心有哪些具體的用户。而且當角色中的成員發生變化時,比如添加成員或刪除成員,系統管理員都無需做任何關於權限的操作。
在SOL Server 2008中,角色分為預定義的系統角色和用户定義角色兩種。同對,根據角色作用範圍的不同,系統角色又分為服務器級角色(稱為固定服務器角色)和數據庫級角色(稱為固定數據庫角色)。用户定義的角色均是數據庫級角色。