StarRocks的權限管理系統支持表級別細粒度的權限控制、基于角色的權限訪問控制,以及白名單機制。
背景信息
StarRocks 2.x版本和StarRocks 3.x版本在使用上存在一定的差異,更多信息請參見社區文檔StarRocks 2.5和StarRocks 3.2。
創建用戶
擁有ADMIN權限,或任意層級的GRANT權限的用戶才可以創建新用戶。
語法
CREATE USER user_identity [auth_option] [DEFAULT ROLE 'role_name'];
涉及參數如下:
user_identity
:用戶標識。以username@'userhost'
或username@['domain']
的形式標明。[auth_option]
:認證方式。可選方式包括:IDENTIFIED BY 'auth_string'
IDENTIFIED WITH auth_plugin
IDENTIFIED WITH auth_plugin BY 'auth_string'
IDENTIFIED WITH auth_plugin AS 'auth_string'
DEFAULT ROLE
:當前用戶的默認角色。
示例
創建一個無密碼用戶,且不指定host。
CREATE USER 'jack';
使用明文密碼創建用戶,允許其從
172.10.**.**
登錄。CREATE USER 'jack'@'172.10.**.**' IDENTIFIED WITH mysql_native_password BY '123456';
使用密文密碼創建用戶,允許其從
172.10.**.**
登錄。CREATE USER 'jack'@'172.10.**.**' IDENTIFIED BY PASSWORD '6BB4837EB74329105EE4568DDA7DC67ED2CA****';
說明您可以通過
PASSWORD()
方法獲得密文密碼。例如,SELECT PASSWORD('123456');
。創建一個允許從
192.168
子網登錄的用戶,同時指定其角色為example_role。CREATE USER 'jack'@'192.168.%' DEFAULT ROLE 'example_role';
創建一個允許從域名
example_domain
登錄的用戶。CREATE USER 'jack'@['example_domain'] IDENTIFIED BY '12345';
修改用戶密碼
擁有ADMIN權限,或者GLOBAL層級GRANT權限的用戶,可以設置任意用戶的密碼。
普通用戶可以設置自己對應的User Identity的密碼,自己對應的User Identity可以通過
SELECT CURRENT_USER();
命令查看。擁有非GLOBAL層級GRANT權限的用戶,不可以設置已存在用戶的密碼,僅能在創建用戶時指定密碼。
root用戶的密碼僅root用戶可以重置。
語法
SET PASSWORD [FOR user_identity] = [PASSWORD('plain password')]|['hashed password'];
示例
修改當前用戶的密碼
SET PASSWORD = PASSWORD('123456'); SET PASSWORD = '6BB4837EB74329105EE4568DDA7DC67ED2CA****';
修改指定用戶密碼
SET PASSWORD FOR 'jack'@'192.%' = PASSWORD('123456'); SET PASSWORD FOR 'jack'@['domain'] = '6BB4837EB74329105EE4568DDA7DC67ED2CA****';
您可以通過PASSWORD()
方法獲得密文密碼。
刪除用戶
擁有ADMIN權限的用戶可以刪除所有用戶。
DROP USER 'user_identity';
授予權限
擁有ADMIN權限,或者GLOBAL層級GRANT權限的用戶,可以授予任意用戶的權限。
擁有DATABASE層級GRANT權限的用戶,可以授予任意用戶對指定數據庫的權限。
擁有TABLE層級GRANT權限的用戶,可以授予任意用戶對指定數據庫中指定表的權限。
ADMIN_PRIV權限只能在GLOBAL層級授予或撤銷。
擁有GLOBAL層級GRANT_PRIV實際等同于擁有ADMIN_PRIV,因為該層級的GRANT_PRIV有授予任意權限的權限,請謹慎授予該權限。
StarRocks 3.x版本
將所有數據庫及庫中所有表的讀取權限授予用戶。
GRANT SELECT ON *.* TO 'jack'@'%';
將數據庫
db1
及其中所有表的導入權限授予角色。GRANT INSERT ON db1.* TO ROLE '<role_name>';
將所有資源的使用權限授予用戶。
GRANT USAGE ON RESOURCE * TO 'jack'@'%';
StarRocks 2.x版本
授予指定用戶數據庫級或表級權限
GRANT privilege_list ON db_name[.tbl_name] TO user_identity [ROLE role_name];
授予指定用戶指定資源權限
GRANT privilege_list ON RESOURCE resource_name TO user_identity [ROLE role_name];
涉及參數如下:
privilege_list
:需要賦予的權限列表,以逗號分隔。權限如下:NODE_PRIV
:節點變更權限。包括FE、BE、BROKER節點的添加、刪除、下線等操作。目前該權限只能授予root用戶。GRANT_PRIV
:權限變更權限。允許執行包括授權、撤權,添加、刪除、變更用戶或角色等操作。SELECT_PRIV
:對數據庫、表的只讀權限。LOAD_PRIV
:對數據庫、表的寫權限。包括LOAD、INSERT、DELETE等。ALTER_PRIV
:對數據庫、表的更改權限。包括重命名庫、表;添加、刪除、變更列;添加、刪除分區等操作。CREATE_PRIV
:創建數據庫、表、視圖的權限。DROP_PRIV
:刪除數據庫、表、視圖的權限。USAGE_PRIV
:資源的使用權限。
db_name
:數據庫名。tbl_name
:表名。user_identity
:用戶標識。以username@'userhost'
或username@['domain']
的形式標明。ROLE
:將權限賦予指定的ROLE,如果指定的ROLE不存在,則會自動創建。
撤銷權限
擁有ADMIN權限,或者GLOBAL層級GRANT權限的用戶,可以撤銷任意用戶的權限。
擁有DATABASE層級GRANT權限的用戶,可以撤銷任意用戶對指定數據庫的權限。
擁有TABLE層級GRANT權限的用戶,可以撤銷任意用戶對指定數據庫中指定表的權限。
StarRocks 3.x版本
撤銷指定用戶對指定表的SELECT權限
REVOKE SELECT ON TABLE sr_member FROM USER 'jack'@'172.10.**.**';
撤銷指定角色對指定資源的使用權限
REVOKE USAGE ON RESOURCE '<resource_name>' FROM ROLE '<role_name>';
StarRocks 2.x版本
撤銷指定用戶數據庫級或表級權限
REVOKE privilege_list ON db_name[.tbl_name] FROM user_identity [ROLE role_name];
撤銷指定用戶指定資源權限
REVOKE privilege_list ON RESOURCE resource_name FROM user_identity [ROLE role_name];
創建角色
擁有ADMIN權限的用戶才可以創建角色。
您可以對創建好的角色進行授權操作,擁有該角色的用戶擁有角色被賦予的權限。
CREATE ROLE <role_name>;
查看角色
SHOW ROLES;
刪除角色
擁有GRANT_PRIV或ADMIN_PRIV權限的用戶可以刪除角色。
DROP ROLE <role_name>;
查看用戶屬性
SHOW PROPERTY [FOR user] [LIKE key];
涉及參數如下:
user
:用戶名。key
:相關屬性關鍵字。
示例如下:
查看指定用戶的屬性。
SHOW PROPERTY FOR 'jack';
看指定用戶導入cluster相關屬性。
SHOW PROPERTY FOR 'jack' LIKE '%load_cluster%';