跳轉至內容

結構化查詢語言/資料控制語言

100% developed
來自華夏公益教科書,開放的書籍,為開放的世界

← 資料定義語言 | 效能 → 資料控制語言用於修改資料庫的使用者許可權。它描述了兩個語句:GRANT 和 REVOKE。

GRANT 語句

[編輯 | 編輯原始碼]

GRANT 語句的完整語法如下

GRANT
{
 ALL PRIVILEGES ON[ TABLE] <table or view name>
|
 {SELECT|DELETE|{INSERT|UPDATE}[ (<column name>[, <column name>]*)]}
 [, {SELECT|DELETE|{INSERT|UPDATE}[ (<column name>[, <column name>]*)]}]* ON[ TABLE] <table or view name>
|
 USAGE ON 
 {DOMAIN <domain name>|COLLATION <collation name>|CHARACTER SET <charset name>|TRANSLATION <translation name>}
|
 REFERENCES <column name>[, <column name>]* ON <table name>
}
[,
 {
  ALL PRIVILEGES ON[ TABLE] <table or view name>
 |
  {SELECT|DELETE|{INSERT|UPDATE}[ (<column name>[, <column name>]*)]}
  [ ,{SELECT|DELETE|{INSERT|UPDATE}[ (<column name>[, <column name>]*)]}]* ON[ TABLE] <table or view name>
 |
  USAGE ON 
  {DOMAIN <domain name>|COLLATION <collation name>|CHARACTER SET <charset name>|TRANSLATION <translation name>}
 |
  REFERENCES <column name>[, <column name>]* ON <table name>
 }
]* TO {PUBLIC|<user name>}[, {PUBLIC|<user name>}]*[ WITH GRANT OPTION];

GRANT 語句用於授予某人許可權。任何 SQL 操作都是使用使用者名稱完成的。使用者名稱由資料庫管理系統建立。


DBA

開發人員 1

開發人員 2

開發人員 3

使用者 1

使用者 2

許可權適用於表(例如 employeeoffice 等)、檢視、它們的列、域、排序規則、字元集和翻譯。


DBA

開發人員 1

開發人員 2

開發人員 3

使用者 1

使用者 2
employee
employee
employee
employee
employee
employee
office
office
office
office
office
office
... ... ... ... ... ...

許可權可以允許處理 SELECT(“s”)、INSERT(“i”)、UPDATE(“u”)和 DELETE(“d”)語句(不包括 CREATE、ALTER 或 DROP 語句)。假設只有資料庫管理員擁有許可權。


DBA

開發人員 1

開發人員 2

開發人員 3

使用者 1

使用者 2
employee
s i u d
employee
employee
employee
employee
employee
office
s i u d
office
office
office
office
office
... ... ... ... ... ...

對於每個許可權(“s”,“i”,“u” 和 “d”),也存在一個元許可權(“S”,“I”,“U” 和 “D”):使用者可以將許可權傳送給另一個使用者。假設只有資料庫管理員擁有元許可權。


DBA

開發人員 1

開發人員 2

開發人員 3

使用者 1

使用者 2
employee
S I U D
s i u d
employee
employee
employee
employee
employee
office
S I U D
s i u d
office
office
office
office
office
... ... ... ... ... ...

DBA 希望允許 DEVELOPER_1 選擇表 employee 上的列


DBA
GRANT SELECT ON employee TO DEVELOPER_1;

DEVELOPER_1 的許可權已更改


DBA

開發人員 1

開發人員 2

開發人員 3

使用者 1

使用者 2
employee
S I U D
s i u d
employee
s
employee
employee
employee
employee
office
S I U D
s i u d
office
office
office
office
office
... ... ... ... ... ...

SELECT 指示我們希望傳送 SELECT 許可權。關鍵字 ON 後跟 employee 指示許可權適用於表 employee。關鍵字 TO 後跟 DEVELOPER_1 指示許可權已傳送給 DEVELOPER_1。

DBA 希望允許 DEVELOPER_2 和 DEVELOPER_3 在表 office 上插入、更新和刪除行


DBA
GRANT INSERT, UPDATE, DELETE ON office TO DEVELOPER_2 DEVELOPER_3;

DEVELOPER_2 和 DEVELOPER_3 的許可權已更改


DBA

開發人員 1

開發人員 2

開發人員 3

使用者 1

使用者 2
employee
S I U D
s i u d
employee
s
employee
employee
employee
employee
office
S I U D
s i u d
office
office
i u d
office
i u d
office
office
... ... ... ... ... ...

雖然你可以將多個表的多個許可權一次性發送給多個使用者,但不能一次性發送多個表的許可權。如果要傳送所有許可權(SELECT、INSERT、UPDATE 和 DELETE),可以使用關鍵字 ALL PRIVILEGES 替換許可權列表。

現在,DBA 希望允許 USER_1 在表 employee 上插入資料,並允許他將此許可權傳送給其他使用者


DBA
GRANT INSERT ON employee TO USER_1 WITH GRANT OPTION;

USER_1 的許可權已更改


DBA

開發人員 1

開發人員 2

開發人員 3

使用者 1

使用者 2
employee
S I U D
s i u d
employee
s
employee
employee
employee
S
s
employee
office
S I U D
s i u d
office
office
i u d
office
i u d
office
office
... ... ... ... ... ...

關鍵字 WITH GRANT OPTION 指示我們希望將元許可權與許可權一起傳送給使用者。現在,USER_1 可以將表 employee 上的 SELECT 許可權傳送給其他使用者。假設 USER_1 希望允許任何人對錶 employee 執行 SELECT 操作


使用者 1
GRANT SELECT ON TABLE employee TO PUBLIC;

所有使用者的許可權都已更改


DBA

開發人員 1

開發人員 2

開發人員 3

使用者 1

使用者 2
employee
S I U D
s i u d
employee
s
employee
s
employee
s
employee
S
s
employee
s
office
S I U D
s i u d
office
office
i u d
office
i u d
office
office
... ... ... ... ... ...

關鍵字 PUBLIC 指示我們希望將許可權傳送給所有使用者,包括新使用者。

假設 DEVELOPER_3 嘗試允許 USER_2 將記錄插入表 office


開發人員 3
GRANT INSERT ON TABLE office TO USER_2;

DBA

開發人員 1

開發人員 2

開發人員 3

使用者 1

使用者 2
employee
S I U D
s i u d
employee
s
employee
s
employee
s
employee
S
s
employee
s
office
S I U D
s i u d
office
office
i u d
office
I
i u d
office
office
... ... ... ... ... ...

操作被拒絕,因為 DEVELOPER_3 許可權不足。

傳送列上的許可權

[編輯 | 編輯原始碼]

您可以只發送列上的許可權(僅限 INSERT 和 UPDATE)

GRANT INSERT (name, description) ON TABLE office TO USER_2;
GRANT UPDATE (id_office, name) ON TABLE office TO USER_2;

對於 INSERT,請確保使用者無法填充的所有列都具有預設值、自動生成或在插入前由觸發器填充。否則,許可權毫無用處。

REVOKE 語句

[編輯 | 編輯原始碼]

REVOKE 語句的完整語法如下

REVOKE[ GRANT OPTION FOR] 
{
 ALL PRIVILEGES ON[ TABLE] <table or view name>
|
 {SELECT|DELETE|{INSERT|UPDATE}[ (<column name>[, <column name>]*)]}
 [, {SELECT|DELETE|{INSERT|UPDATE}[ (<column name>[, <column name>]*)]}]* ON[ TABLE] <table or view name>
|
 USAGE ON 
 {DOMAIN <domain name>|COLLATION <collation name>|CHARACTER SET <charset name>|TRANSLATION <translation name>}
|
 REFERENCES <column name>[, <column name>]* ON <table name>
}
[,
 {
  {SELECT|DELETE|{INSERT|UPDATE}[ (<column name>[, <column name>]*)]}
  [, {SELECT|DELETE|{INSERT|UPDATE}[ (<column name>[, <column name>]*)]}]* ON[ TABLE] <table or view name>
 |
  USAGE ON 
  {DOMAIN <domain name>|COLLATION <collation name>|CHARACTER SET <charset name>|TRANSLATION <translation name>}
 |
  REFERENCES <column name>[, <column name>]* ON <table name>
 }
]* FROM {PUBLIC|<user name>}[, {PUBLIC|<user name>}]*[ RESTRICT| CASCADE]

REVOKE 語句用於收回授予某人的許可權。此收回可能比您預期的更復雜。要完全刪除使用者的許可權,必須由所有傳送過該許可權的使用者收回該許可權。

例如,DBA 希望從 DEVELOPER_2 和 DEVELOPER_3 中刪除表 employee 上的 INSERT 和 DELETE 許可權


DBA
REVOKE INSERT, DELETE ON TABLE office FROM DEVELOPER_2, DEVELOPER_3;

DBA

開發人員 1

開發人員 2

開發人員 3

使用者 1

使用者 2
employee
S I U D
s i u d
employee
s
employee
s
employee
s
employee
S
s
employee
s
office
S I U D
s i u d
office
office
u
office
u
office
office
... ... ... ... ... ...

如果您刪除了使用者許可權,而該使用者也擁有相關元許可權(例如,USER_1 的 SELECT 許可權),則操作也會刪除元許可權。要僅刪除元許可權,請新增關鍵字 GRANT OPTION FOR


DBA
REVOKE GRANT OPTION FOR SELECT ON TABLE employee FROM USER_1;

DBA

開發人員 1

開發人員 2

開發人員 3

使用者 1

使用者 2
employee
S I U D
s i u d
employee
s
employee
s
employee
s
employee
s
employee
s
office
S I U D
s i u d
office
office
u
office
u
office
office
... ... ... ... ... ...

現在您可以管理資料庫了。


華夏公益教科書