閱讀313 返回首頁    go 阿裏雲


用戶及權限管理__數據庫管理語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲

數據庫用戶權限管理包括新建用戶、刪除用戶、修改密碼、修改用戶名、鎖定用戶、用戶授權和撤銷授權等。

OceanBase 1.0中用戶分為兩類:係統租戶下的用戶,一般租戶下的用戶。創建用戶時,如果Session當前租戶為係統租戶,則新建的用戶為係統租戶下的用戶,反之為一般租戶下的用戶。

用戶名稱在租戶內是唯一的,不同租戶下的用戶可以同名。用戶名@租戶名在係統全局唯一。為區別係統租戶和一般租戶下的用戶,係統租戶下的用戶名稱使用特定前綴。係統租戶和普通租戶都有一個內置用戶root,係統租戶的root為係統管理員和普通租戶的root為租戶管理員,購買了某個普通租戶的客戶得到普通租戶root和密碼,進行本租戶範圍的管理工作。

一般租戶下的用戶隻能擁有該租戶下對象的訪問權限,權限和MySQL兼容;係統租戶下的用戶可以被授予跨租戶的對象訪問權限。當前係統租戶下的用戶不允許訪問一般租戶下的用戶表數據。用戶在登錄OceanBase係統時需指定唯一的租戶名。對於係統租戶下的用戶,在登錄後,可以使用CHANGE EFFECTIVE TENANT tenantname語句來切換當前訪問的租戶;對於一般租戶下的用戶,不能切換到其他租戶。

新建用戶

CREATE USER用於創建新的OceanBase用戶。創建新用戶後,可以使用該用戶連接OceanBase。

格式

  1. CREATE USER user_specification_list;
  2. user_specification_list:
  3. user_specification [, user_specification]…;
  4. user_specification:
  5. user IDENTIFIED BY 'authstring'
  6. user IDENTIFIED BY PASSWORD 'hashstring'
  • 必須擁有全局的CREATE USER權限,才可以使用CREATE USER命令。
  • 新建用戶後,“mysql.user”表會新增一行該用戶的表項。如果同名用戶已經存在,則報錯。
  • 使用自選的IDENTIFIED BY子句,可以為賬戶給定一個密碼。
  • user IDENTIFIED BY ‘authstring’此處密碼為明文,存入“mysql.user”表後,服務器端會變為密文存儲。
  • user IDENTIFIED BY PASSWORD ‘hashstring’此處密碼為密文。
  • 同時創建多個用戶時,用“,”隔開。

舉例

  1. Oceanbase>CREATE USER 'sqluser01' IDENTIFIED BY '123456', 'sqluser02' IDENTIFIED BY '123456';
  2. Query OK, 0 rows affected (0.07 sec)
  3. Oceanbase>select user from user;
  4. +-----------+
  5. | user |
  6. +-----------+
  7. | root |
  8. | test |
  9. | sqluser01 |
  10. | sqluser02 |
  11. +-----------+
  12. 4 rows in set (0.01 sec)

刪除用戶

DROP USER語句用於刪除一個或多個OceanBase用戶。

格式

  1. DROP USER username [, username...];
  • 必須擁有全局的CREATE USER權限,才可以使用DROP USER命令。

  • 不能對“mysql.user”表進行DELETE方式進行權限管理。

  • 成功刪除用戶後,這個用戶的所有權限也會被一同刪除。

  • 同時刪除多個用戶時,用“,”隔開。

舉例

執行以下命令,刪除“sqluser02”用戶。

  1. DROP USER 'sqluser02';

修改密碼

修改OceanBase登錄用戶的密碼。

格式

  1. SET PASSWORD [FOR user] = password_option;
  2. password_option: {
  3. PASSWORD('authstring')
  4. |'hashstring'}

或者

  1. ALTER USER username IDENTIFIED BY 'password';
  • 如果沒有For user子句,則修改當前用戶的密碼。任何成功登錄的用戶都可以修改當前用戶的密碼。

  • 如果有For user子句,或使用第二種語法,則修改指定用戶的密碼。必須擁有全局CREATE USER權限,才可以修改指定用戶的密碼。

舉例

執行以下命令將“sqluser01”的密碼修改為“abc123”。

  1. ALTER USER sqluser01 IDENTIFIED BY 'abc123';

使用SET PASSWORD修改密碼如下:

  1. Oceanbase>set password for test = password('abc123');
  2. Query OK, 0 rows affected (0.03 sec)
  3. # 不指定password函數,會報錯如下:
  4. Oceanbase>set password for test = 'abc123';
  5. ERROR 1827 (42000): The password hash doesn't have the expected format. Check if the correct password algorithm is being used with the PASSWORD() function.

修改用戶名

用於修改OceanBase登錄用戶的用戶名。

格式

  1. RENAME USER
  2. 'oldusername' TO 'newusername'
  3. [,'oldusername' TO 'newusername'...];
  • 必須擁有全局CREATE USER權限,才可以使用本命令。

  • 同時修改多個用戶名時,用“,”隔開。

  • 修改前後,新舊用戶權限保持一致。

  • 用戶名長度限製:用戶名占用字節小於等於16。

舉例

  1. Oceanbase>select user from user;
  2. +---------+
  3. | user |
  4. +---------+
  5. | root |
  6. | testall |
  7. +---------+
  8. 2 rows in set (0.00 sec)

修改用戶名

  1. Oceanbase>rename user testall to test;
  2. Query OK, 0 rows affected (0.03 sec)
  3. Oceanbase>select user from user;
  4. +------+
  5. | user |
  6. +------+
  7. | root |
  8. | test |
  9. +------+
  10. 2 rows in set (0.00 sec)

鎖定用戶

鎖定或者解鎖用戶。被鎖定的用戶不允許登錄。

格式

  1. ALTER USER user [lock_option]
  2. lock_option:{
  3. ACCOUNT LOCK
  4. | ACCOUNT UNLOCK}

必須擁有全局UPDATE USER權限,才可以執行本命令。

舉例

鎖定用戶

  1. Oceanbase>alter user test account lock;
  2. Query OK, 0 rows affected (0.04 sec)

解鎖用戶

  1. Oceanbase>alter user test account unlock;
  2. Query OK, 0 rows affected (0.02 sec)

用戶授權

GRANT語句用於係統管理員授予User某些權限。

格式

  1. GRANT priv_type
  2.     ON priv_level
  3.   TO user_specification [, user_specification]...
  4. [WITH with_option ...]
  5. priv_level:
  6. *
  7. | *.*
  8. | db_name.*
  9. | db_name.tbl_name
  10. | tbl_name
  11. user_specification:
  12. user [IDENTIFIED BY [PASSWORD] ‘password’]
  13. with_option:
  14. GRANT OPTION

權限可以分為以下幾個層級:

全局層級:適用於所有的數據庫。使用GRANT ALL ON *.*授予全局權限。

數據庫層級:適用於一個給定數據庫中的所有目標。使用GRANT ALL ON db_name.*授予數據庫權限。

表層級:表權限適用於一個給定表中的所有列。使用GRANT ALL ON db_name.tbl_name授予表權限。

  • 給特定用戶授予權限。如果用戶不存在,可以直接創建用戶。(sql_mode=’no_auto_create_user’,同時沒有identified by指定密碼時候,不可以直接創建用戶。)

  • 當前用戶必須擁有被授予的權限(例如,user1把表t1的SELECT權限授予user2,則user1必須擁有表t1的SELECT的權限),並且擁有GRANT OPTION權限,才能授予成功。

  • 用戶授權後,該用戶隻有重新連接OceanBase,權限才能生效。

  • 用“*”代替table_name,表示賦予全局權限,即對數據庫中的所有表賦權。

  • 同時把多個權限賦予用戶時,權限類型用“,”隔開。

  • 同時給多個用戶授權時,用戶名用“,”隔開。

  • priv_type的值如下表所示。

權限說明
ALL PRIVILEGES 除GRANT OPTION以外所有權限。
ALTER ALTER TABLE的權限。
CREATE CREATE TABLE的權限。
CREATE USER CREATE USER,DROP USER,RENAME USER
和REVOKE ALL PRIVILEGES的權限。
CREATE TABLEGROUP 全局CREATE TABLEGROUP的權限。
DELETE DELETE的權限。
DROP DROP的權限。
GRANT OPTION GRANT OPTION的權限。
INSERT INSERT的權限。
SELECT SELECT的權限。
UPDATE UPDATE的權限。
SUPER SET GLOBAL修改全局係統參數的權限。
SHOW DATABASES 全局 SHOW DATABASES的權限。
INDEX CREATE INDEX, DROP INDEX的權限
CREATE VIEW 創建、刪除視圖的權限
SHOW VIEW SHOW CREATE VIEW權限

說明:目前沒有change effective tenant的權限控製,sys租戶下的用戶都可以。

撤銷權限

REVOKE語句用於係統管理員撤銷User某些權限。

格式

  1. REVOKE priv_type
  2.      ON database.tblname
  3.     FROM 'user';
  • 用戶必須擁有被撤銷的權限(例如,user1要撤銷user2對表t1的SELECT權限,則user1必須擁有表t1的SELECT的權限),並且擁有GRANT OPTION權限。

  • 撤銷“ALL PRIVILEGES”和“GRANT OPTION”權限時,當前用戶必須擁有全局GRANT OPTION權限,或者對權限表的UPDATE及DELETE權限。

  • 撤銷操作不會級聯。例如,用戶user1給user2授予了某些權限,撤回user1的權限不會同時也撤回user2的相應權限。

  • 用“*”代替table_name,表示撤銷全局權限,即撤銷對數據庫中所有表的操作權限。

  • 同時對用戶撤銷多個權限時,權限類型用“,”隔開。

  • 同時撤銷多個用戶的授權時,用戶名用“,”隔開。

  • priv_type的值如上表所示。

舉例

執行以下命令撤銷“obsqluser01”的所有權限。

  1. REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'obsqluser01';

查看權限

SHOW GRANTS語句用於係統管理員查看User的操作權限。

格式

  1. SHOW GRANTS [FOR username];
  • 如果不指定用戶名,則缺省顯示當前用戶的權限。對於當前用戶,總可以查看自己的權限。
  • 如果要查看其他指定用戶的權限,必須擁有對“mysql.user”的SELECT權限。

舉例

  1. Oceanbase>show grants for test;
  2. +------------------------------+
  3. | Grants for test |
  4. +------------------------------+
  5. | GRANT USAGE ON *.* TO 'test' |
  6. +------------------------------+
  7. 1 row in set (0.01 sec)

最後更新:2016-11-23 16:03:54

  上一篇:go SELECT__數據操作語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲
  下一篇:go set語句__數據庫管理語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲