用户及权限管理__数据库管理语言_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-阿里云