跳轉到內容

結構化查詢語言/許可權管理

來自華夏公益教科書,開放的書籍,面向開放的世界



對於像 DBMS 這樣的多使用者系統,必須授予和撤銷操作其物件的許可權。GRANT 命令定義了哪個使用者可以操作(建立、讀取、更改、刪除……)哪個物件(表、檢視、索引、序列、觸發器……)。

GRANT <privilege_name>
ON    <object_name>
TO    [ <user_name> | <role_name> | PUBLIC ]
[WITH GRANT OPTION];

REVOKE 語句剝奪已授予的許可權。

REVOKE <privilege_name>
ON     <object_name>
FROM   [ <user_name> | <role_name> | PUBLIC ];

示例語句授予使用者 hibernate 對錶 person 的 SELECT 和 INSERT 許可權。第二個語句刪除已授予的許可權。

GRANT  SELECT, INSERT ON person TO   hibernate;
REVOKE SELECT, INSERT ON person FROM hibernate;

許可權

[編輯 | 編輯原始碼]

許可權是使用者可以執行的操作。SQL 標準只支援有限的許可權列表,而實際實現提供了大量不同的許可權。該列表包括:SELECT、INSERT、UPDATE、DELETE、CREATE <object_type>、DROP <object_type>、EXECUTE 等。

物件型別

[編輯 | 編輯原始碼]

SQL 標準中可以授予許可權的物件型別列表很短,而實際實現中的列表很長。它包括表、檢視、索引、序列、觸發器、過程等。

角色/公共

[編輯 | 編輯原始碼]

如果連線到 DBMS 的使用者數量很多,將具有相同許可權的使用者分組到一個角色中,並將許可權授予角色而不是單個使用者,會很有幫助。為此,必須透過 CREATE ROLE 語句建立角色。之後,使用者將加入該角色。

-- Create a role
-- (MySQL supports only predefined roles with special semantics).
CREATE ROLE department_human_resources;

-- Enrich the role with rights
GRANT  SELECT, INSERT, UPDATE, DELETE ON person        TO department_human_resources;
GRANT  SELECT, INSERT                 ON hobby         TO department_human_resources;
GRANT  SELECT, INSERT, UPDATE, DELETE ON person_hobby  TO department_human_resources;

-- Join users with the role
GRANT  department_human_resources TO user_1;
GRANT  department_human_resources TO user_2;

PUBLIC 關鍵字表示所有已知使用者,而不是單個使用者名稱。

-- Everybody shall be allowed to read the rows of the 'person' table.
GRANT SELECT ON person TO PUBLIC;

授予選項

[編輯 | 編輯原始碼]

如果 DBA 希望將許可權管理委託給特定使用者,他可以授予他們許可權,並使用“WITH GRANT OPTION”短語擴充套件語句。這使使用者能夠將收到的許可權授予任何其他使用者。

-- User 'hibernate' gets the right to pass the SELECT privilege on table 'person' to any other user.
GRANT SELECT ON person TO hibernate WITH GRANT OPTION;


華夏公益教科書