結構化查詢語言/許可權管理
外觀
< 結構化查詢語言
對於像 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;