openGauss學(xué)習(xí)筆記-47 openGauss 高級數(shù)據(jù)管理-權(quán)限
數(shù)據(jù)庫對象創(chuàng)建后,進(jìn)行對象創(chuàng)建的用戶就是該對象的所有者。數(shù)據(jù)庫安裝后的默認(rèn)情況下,未開啟三權(quán)分立,數(shù)據(jù)庫系統(tǒng)管理員具有與對象所有者相同的權(quán)限。也就是說對象創(chuàng)建后,默認(rèn)只有對象所有者或者系統(tǒng)管理員可以查詢、修改和銷毀對象,以及通過GRANT將對象的權(quán)限授予其他用戶。
為使其他用戶能夠使用對象,必須向用戶或包含該用戶的角色授予必要的權(quán)限。
要撤銷已經(jīng)授予的權(quán)限,可以使用REVOKE。對象所有者的權(quán)限(例如ALTER、 DROP、COMMENT、INDEX、VACUUM、GRANT和REVOKE)是隱式擁有的,即只要擁有對象就可以執(zhí)行對象所有者的這些隱式權(quán)限。對象所有者可以撤銷自己的普通權(quán)限,例如,使表對自己以及其他人只讀,系統(tǒng)管理員用戶除外。
openGauss支持以下的權(quán)限,不同的權(quán)限與不同的對象類型關(guān)聯(lián):
- SELECT:允許對指定的表、視圖、序列執(zhí)行SELECT命令,UPDATE或DELETE時也需要對應(yīng)字段上的SELECT權(quán)限。
- INSERT:允許對指定的表執(zhí)行INSERT命令。
- UPDATE:允許對聲明的表中任意字段執(zhí)行UPDATE命令。通常,UPDATE命令也需要SELECT權(quán)限來查詢出哪些行需要更新。SELECT… FOR UPDATE、SELECT… FOR NO KEY UPDATE、SELECT… FOR SHARE和SELECT… FOR KEY SHARE除了需要SELECT權(quán)限外,還需要UPDATE權(quán)限。
- DELETE:允許執(zhí)行DELETE命令刪除指定表中的數(shù)據(jù)。通常,DELETE命令也需要SELECT權(quán)限來查詢出哪些行需要刪除。
- TRUNCATE:允許執(zhí)行TRUNCATE命令刪除指定表中的所有記錄。
- REFERENCES:創(chuàng)建一個外鍵約束,必須擁有參考表和被參考表的REFERENCES權(quán)限。
- CREATE:
- 對于數(shù)據(jù)庫,允許在數(shù)據(jù)庫里創(chuàng)建新的模式。
- 對于模式,允許在模式中創(chuàng)建新的對象。如果要重命名一個對象,用戶除了必須是該對象的所有者外,還必須擁有該對象所在模式的CREATE權(quán)限。
- 對于表空間,允許在表空間中創(chuàng)建表,允許在創(chuàng)建數(shù)據(jù)庫和模式的時候把該表空間指定為缺省表空間。
- CONNECT:允許用戶連接到指定的數(shù)據(jù)庫。
- EXECUTE:允許使用指定的函數(shù),以及利用這些函數(shù)實現(xiàn)的操作符。
- USAGE:
- 對于過程語言,允許用戶在創(chuàng)建函數(shù)的時候指定過程語言。
- 對于模式,USAGE允許訪問包含在指定模式中的對象,若沒有該權(quán)限,則只能看到這些對象的名稱。
- 對于序列,USAGE允許使用nextval函數(shù)。
- 對于Data Source對象,USAGE是指訪問權(quán)限,也是可賦予的所有權(quán)限,即USAGE與ALL PRIVILEGES等價。
- ALTER:允許用戶修改指定對象的屬性,但不包括修改對象的所有者和修改對象所在的模式。
- DROP:允許用戶刪除指定的對象。
- COMMENT:允許用戶定義或修改指定對象的注釋。
- INDEX:允許用戶在指定表上創(chuàng)建索引,并管理指定表上的索引,還允許用戶對指定表執(zhí)行REINDEX和CLUSTER操作。
- VACUUM:允許用戶對指定的表執(zhí)行ANALYZE和VACUUM操作。
- ALL PRIVILEGES:一次性給指定用戶/角色賦予所有可賦予的權(quán)限。只有系統(tǒng)管理員有權(quán)執(zhí)行GRANT ALL PRIVILEGES。
47.1 語法格式
-
GRANT
對角色和用戶進(jìn)行授權(quán)操作。使用GRANT命令進(jìn)行用戶授權(quán)包括三種場景:
-
將系統(tǒng)權(quán)限(例如sysadmin、CREATEDB、CREATEROLE等)授權(quán)給角色或用戶
將sysadmin權(quán)限賦予指定的角色的語法如下。
GRANT ALL { PRIVILEGES | PRIVILEGE } TO role_name;
-
將角色或用戶的權(quán)限授權(quán)給其他角色或用戶
將角色的權(quán)限賦予其他用戶或角色的語法如下。
GRANT role_name [, ...] TO role_name [, ...] [ WITH ADMIN OPTION ];
-
將數(shù)據(jù)庫對象授權(quán)給角色或用戶
-
將表或視圖的訪問權(quán)限賦予指定的用戶或角色。
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | ALTER | DROP | COMMENT | INDEX | VACUUM } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ];
-
將表中字段的訪問權(quán)限賦予指定的用戶或角色。
GRANT { {{ SELECT | INSERT | UPDATE | REFERENCES | COMMENT } ( column_name [, ...] )} [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) } ON [ TABLE ] table_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ];
-
將數(shù)據(jù)庫的訪問權(quán)限賦予指定的用戶或角色。
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE database_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ];
-
將模式的訪問權(quán)限賦予指定的用戶或角色。
GRANT { { CREATE | USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ];
說明: 將模式中的表或者視圖對象授權(quán)給其他用戶時,需要將表或視圖所屬的模式的USAGE權(quán)限同時授予該用戶,若沒有該權(quán)限,則只能看到這些對象的名稱,并不能實際進(jìn)行對象訪問。 同名模式下創(chuàng)建表的權(quán)限無法通過此語法賦予,可以通過將角色的權(quán)限賦予其他用戶或角色的語法,賦予同名模式下創(chuàng)建表的權(quán)限。
-
將表空間的訪問權(quán)限賦予指定的用戶或角色。
GRANT { { CREATE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON TABLESPACE tablespace_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ];
-
-
-
REVOKE
-
撤銷角色或用戶的系統(tǒng)權(quán)限(例如sysadmin、CREATEDB、CREATEROLE等)
回收角色上的sysadmin權(quán)限。
REVOKE ALL { PRIVILEGES | PRIVILEGE } FROM role_name;
-
回收角色上的權(quán)限。
REVOKE [ ADMIN OPTION FOR ] role_name [, ...] FROM role_name [, ...] [ CASCADE | RESTRICT ];
-
回收數(shù)據(jù)庫對象上的權(quán)限
-
回收指定表或視圖上權(quán)限。
REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | ALTER | DROP | COMMENT | INDEX | VACUUM }[, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];
-
回收表上指定字段權(quán)限。
REVOKE [ GRANT OPTION FOR ] { {{ SELECT | INSERT | UPDATE | REFERENCES | COMMENT } ( column_name [, ...] )}[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) } ON [ TABLE ] table_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];
-
回收指定數(shù)據(jù)庫上權(quán)限。
REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE database_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];
-
回收指定模式上權(quán)限。
REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];
-
回收指定表空間上權(quán)限。
REVOKE [ GRANT OPTION FOR ] { { CREATE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON TABLESPACE tablespace_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ];
-
-
47.2 參數(shù)說明
-
role_name
已存在用戶名稱。
-
table_name
已存在表名稱。
-
column_name
已存在字段名稱。
-
schema_name
已存在模式名稱。
-
database_name
已存在數(shù)據(jù)庫名稱。
-
tablespace_name
表空間名稱。
-
WITH GRANT OPTION
如果聲明了WITH GRANT OPTION,則被授權(quán)的用戶也可以將此權(quán)限賦予他人,否則就不能授權(quán)給他人。這個選項不能賦予PUBLIC。
47.3 示例
-
將系統(tǒng)權(quán)限授權(quán)給用戶或者角色。
創(chuàng)建名為joe的用戶,并將sysadmin權(quán)限授權(quán)給他。
openGauss=# CREATE USER joe PASSWORD 'xxxxxxxx'; CREATE ROLE openGauss=# GRANT ALL PRIVILEGES TO joe; ALTER ROLE
授權(quán)成功后,用戶joe會擁有sysadmin的所有權(quán)限。
-
將對象權(quán)限授權(quán)給用戶或者角色。
-
創(chuàng)建模式test以及表customer。
openGauss=# CREATE SCHEMA test; CREATE SCHEMA openGauss=# CREATE TABLE customer ( c_customer_sk integer, c_customer_id char(5), c_first_name char(6), c_last_name char(8), Amount integer ); CREATE TABLE
-
撤銷joe用戶的sysadmin權(quán)限,然后將模式test的使用權(quán)限和表customer的所有權(quán)限授權(quán)給用戶joe。
openGauss=# REVOKE ALL PRIVILEGES FROM joe; ALTER ROLE openGauss=# GRANT USAGE ON SCHEMA test TO joe; GRANT openGauss=# GRANT ALL PRIVILEGES ON customer TO joe; GRANT
授權(quán)成功后,joe用戶就擁有了customer表的所有權(quán)限,包括增刪改查等權(quán)限。
-
將表customer中c_customer_sk、c_customer_id、c_first_name列的查詢權(quán)限,c_last_name的更新權(quán)限授權(quán)給joe。
openGauss=# GRANT select (c_customer_sk,c_customer_id,c_first_name),update (c_last_name) ON customer TO joe; GRANT
授權(quán)成功后,用戶joe對表customer中c_customer_sk,c_customer_id,c_first_name的查詢權(quán)限會立即生效。如果joe用戶需要擁有將這些權(quán)限授權(quán)給其他用戶的權(quán)限,可以通過以下語法對joe用戶進(jìn)行授權(quán)。
openGauss=# GRANT select (c_customer_sk,c_customer_id,c_first_name) ON customer TO joe WITH GRANT OPTION; GRANT
將數(shù)據(jù)庫postgres的連接權(quán)限授權(quán)給用戶joe,并給予其在postgres中創(chuàng)建schema的權(quán)限,而且允許joe將此權(quán)限授權(quán)給其他用戶。
openGauss=# GRANT create,connect on database postgres TO joe WITH GRANT OPTION; GRANT
創(chuàng)建角色test_manager,將模式test的訪問權(quán)限授權(quán)給角色test_manager,并授予該角色在test下創(chuàng)建對象的權(quán)限,不允許該角色中的用戶將權(quán)限授權(quán)給其他人。
openGauss=# CREATE ROLE test_manager PASSWORD 'xxxxxxxx'; CREATE ROLE openGauss=# GRANT USAGE,CREATE ON SCHEMA test TO test_manager; GRANT
創(chuàng)建表空間tpcds_tbspc,并將表空間的所有權(quán)限授權(quán)給用戶joe,但用戶joe無法將權(quán)限繼續(xù)授予其他用戶。
openGauss=# CREATE TABLESPACE tpcds_tbspc RELATIVE LOCATION 'tablespace/tablespace_1'; CREATE TABLESPACE openGauss=# GRANT ALL ON TABLESPACE tpcds_tbspc TO joe; GRANT
-
-
將用戶或者角色的權(quán)限授權(quán)給其他用戶或角色。
-
創(chuàng)建角色manager,將joe的權(quán)限授權(quán)給manager,并允許該角色將權(quán)限授權(quán)給其他人。
openGauss=# CREATE ROLE manager PASSWORD 'xxxxxxxx'; CREATE ROLE openGauss=# GRANT joe TO manager WITH ADMIN OPTION; GRANT ROLE
-
創(chuàng)建用戶senior_manager,將用戶manager的權(quán)限授權(quán)給該用戶。
openGauss=# CREATE ROLE senior_manager PASSWORD 'xxxxxxxx'; CREATE ROLE openGauss=# GRANT manager TO senior_manager; GRANT ROLE
-
?? 點(diǎn)贊,你的認(rèn)可是我創(chuàng)作的動力!
?? 收藏,你的青睞是我努力的方向!
?? 評論,你的意見是我進(jìn)步的財富!文章來源:http://www.zghlxwxcb.cn/news/detail-666348.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-666348.html
到了這里,關(guān)于openGauss學(xué)習(xí)筆記-47 openGauss 高級數(shù)據(jù)管理-權(quán)限的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!