313
技術社區[雲棲]
用戶及權限管理__數據庫管理語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲
數據庫用戶權限管理包括新建用戶、刪除用戶、修改密碼、修改用戶名、鎖定用戶、用戶授權和撤銷授權等。
OceanBase 1.0中用戶分為兩類:係統租戶下的用戶,一般租戶下的用戶。創建用戶時,如果Session當前租戶為係統租戶,則新建的用戶為係統租戶下的用戶,反之為一般租戶下的用戶。
用戶名稱在租戶內是唯一的,不同租戶下的用戶可以同名。用戶名@租戶名在係統全局唯一。為區別係統租戶和一般租戶下的用戶,係統租戶下的用戶名稱使用特定前綴。係統租戶和普通租戶都有一個內置用戶root,係統租戶的root為係統管理員和普通租戶的root為租戶管理員,購買了某個普通租戶的客戶得到普通租戶root和密碼,進行本租戶範圍的管理工作。
一般租戶下的用戶隻能擁有該租戶下對象的訪問權限,權限和MySQL兼容;係統租戶下的用戶可以被授予跨租戶的對象訪問權限。當前係統租戶下的用戶不允許訪問一般租戶下的用戶表數據。用戶在登錄OceanBase係統時需指定唯一的租戶名。對於係統租戶下的用戶,在登錄後,可以使用CHANGE EFFECTIVE TENANT tenantname語句來切換當前訪問的租戶;對於一般租戶下的用戶,不能切換到其他租戶。
新建用戶
CREATE USER用於創建新的OceanBase用戶。創建新用戶後,可以使用該用戶連接OceanBase。
格式
CREATE USER user_specification_list;
user_specification_list:
user_specification [, user_specification]…;
user_specification:
user IDENTIFIED BY 'authstring'
user IDENTIFIED BY PASSWORD 'hashstring'
- 必須擁有全局的CREATE USER權限,才可以使用CREATE USER命令。
- 新建用戶後,“mysql.user”表會新增一行該用戶的表項。如果同名用戶已經存在,則報錯。
- 使用自選的IDENTIFIED BY子句,可以為賬戶給定一個密碼。
- user IDENTIFIED BY ‘authstring’此處密碼為明文,存入“mysql.user”表後,服務器端會變為密文存儲。
- user IDENTIFIED BY PASSWORD ‘hashstring’此處密碼為密文。
- 同時創建多個用戶時,用“,”隔開。
舉例
Oceanbase>CREATE USER 'sqluser01' IDENTIFIED BY '123456', 'sqluser02' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.07 sec)
Oceanbase>select user from user;
+-----------+
| user |
+-----------+
| root |
| test |
| sqluser01 |
| sqluser02 |
+-----------+
4 rows in set (0.01 sec)
刪除用戶
DROP USER語句用於刪除一個或多個OceanBase用戶。
格式
DROP USER username [, username...];
必須擁有全局的CREATE USER權限,才可以使用DROP USER命令。
不能對“mysql.user”表進行DELETE方式進行權限管理。
成功刪除用戶後,這個用戶的所有權限也會被一同刪除。
同時刪除多個用戶時,用“,”隔開。
舉例
執行以下命令,刪除“sqluser02”用戶。
DROP USER 'sqluser02';
修改密碼
修改OceanBase登錄用戶的密碼。
格式
SET PASSWORD [FOR user] = password_option;
password_option: {
PASSWORD('authstring')
|'hashstring'}
或者
ALTER USER username IDENTIFIED BY 'password';
如果沒有For user子句,則修改當前用戶的密碼。任何成功登錄的用戶都可以修改當前用戶的密碼。
如果有For user子句,或使用第二種語法,則修改指定用戶的密碼。必須擁有全局CREATE USER權限,才可以修改指定用戶的密碼。
舉例
執行以下命令將“sqluser01”的密碼修改為“abc123”。
ALTER USER sqluser01 IDENTIFIED BY 'abc123';
使用SET PASSWORD
修改密碼如下:
Oceanbase>set password for test = password('abc123');
Query OK, 0 rows affected (0.03 sec)
# 不指定password函數,會報錯如下:
Oceanbase>set password for test = 'abc123';
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登錄用戶的用戶名。
格式
RENAME USER
'oldusername' TO 'newusername'
[,'oldusername' TO 'newusername'...];
必須擁有全局CREATE USER權限,才可以使用本命令。
同時修改多個用戶名時,用“,”隔開。
修改前後,新舊用戶權限保持一致。
用戶名長度限製:用戶名占用字節小於等於16。
舉例
Oceanbase>select user from user;
+---------+
| user |
+---------+
| root |
| testall |
+---------+
2 rows in set (0.00 sec)
修改用戶名
Oceanbase>rename user testall to test;
Query OK, 0 rows affected (0.03 sec)
Oceanbase>select user from user;
+------+
| user |
+------+
| root |
| test |
+------+
2 rows in set (0.00 sec)
鎖定用戶
鎖定或者解鎖用戶。被鎖定的用戶不允許登錄。
格式
ALTER USER user [lock_option]
lock_option:{
ACCOUNT LOCK
| ACCOUNT UNLOCK}
必須擁有全局UPDATE USER權限,才可以執行本命令。
舉例
鎖定用戶
Oceanbase>alter user test account lock;
Query OK, 0 rows affected (0.04 sec)
解鎖用戶
Oceanbase>alter user test account unlock;
Query OK, 0 rows affected (0.02 sec)
用戶授權
GRANT語句用於係統管理員授予User某些權限。
格式
GRANT priv_type
ON priv_level
TO user_specification [, user_specification]...
[WITH with_option ...]
priv_level:
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
user_specification:
user [IDENTIFIED BY [PASSWORD] ‘password’]
with_option:
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某些權限。
格式
REVOKE priv_type
ON database.tblname
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”的所有權限。
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'obsqluser01';
查看權限
SHOW GRANTS語句用於係統管理員查看User的操作權限。
格式
SHOW GRANTS [FOR username];
- 如果不指定用戶名,則缺省顯示當前用戶的權限。對於當前用戶,總可以查看自己的權限。
- 如果要查看其他指定用戶的權限,必須擁有對“mysql.user”的SELECT權限。
舉例
Oceanbase>show grants for test;
+------------------------------+
| Grants for test |
+------------------------------+
| GRANT USAGE ON *.* TO 'test' |
+------------------------------+
1 row in set (0.01 sec)
最後更新:2016-11-23 16:03:54
上一篇:
SELECT__數據操作語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲
下一篇:
set語句__數據庫管理語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲
網站開通要素__網站訪問異常_技術分享_雲虛機主機-阿裏雲
金融雲專屬集群__使用金融雲產品_金融雲-阿裏雲
產品優勢__產品簡介_消息服務-阿裏雲
刪除記錄__解析記錄操作_產品使用手冊_雲解析-阿裏雲
User__數據類型_RAM API文檔_訪問控製-阿裏雲
如何查詢會員賬號注冊時間?__賬號注冊_會員帳號及密碼_會員賬號&實名認證-阿裏雲
Mongo shell 連接__連接實例_快速入門_雲數據庫 MongoDB 版-阿裏雲
二級域名設置解析方法__網站解析_產品使用問題_雲解析-阿裏雲
查詢日誌__logsearch_用戶指南_日誌服務-阿裏雲
院士潘建偉:阿裏雲與中科院聯合發布量子計算雲平台,計算能力有望躍升100萬倍
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲