数据控制语言
是用来控制数据库用户访问权限。
只有拥有系统权限的用户才能添加用户和租户。
只有担任租户下 owner 角色的用户或拥有系统权限的用户才能添加租户下的角色,并赋予用户角色。
CREATE TENANT
CREATE TENANT
用于在 CnosDB 中创建一个新的租户。CnosDB 允许单个实例同时为多个客户(即租户)提供服务,每个客户都被视为一个独立的租户。
CREATE TENANT [IF NOT EXISTS] tenant_name
[WITH [comment = <comment>],
[drop_after = <duration>],
[object_config = <
max_users_number = <integer>,
max_databases = <integer>,
max_shard_number = <integer>,
max_replicate_number = <integer>,
max_retention_time = <integer>
>],
[coord_data_in = <
remote_max = <integer>,
remote_initial = <integer>,
remote_refill = <integer>,
remote_interval = <integer>,
local_max = <integer>,
local_initial = <integer>
>],
[coord_data_out = < ... >],
[coord_queries = < ... >],
[coord_writes = < ... >],
[http_data_in = < ... >],
[http_data_out = < ... >],
[http_queries = < ... >],
[http_writes = < ... >]
];
选项 | 描述 |
---|---|
comment | 对租户的描述性备注,字符串格式。 |
drop_after | 删除租户延迟时间,默认立即删除,支持:d , h , m ,当不带单位时,默认为 d |
object_config | 租户的对象配置,包括最大用户数、最大数据库数等资源限制。 |
coord_data_in | 租户的协调层数据输入配置,包括 remote 和 local 两种资源限制设置。 |
coord_data_out | 租户的协调层数据输入配置,包括 remote 和 local 两种资源限制设置。 |
coord_queries | 租户的协调层数据输入配置,包括 remote 和 local 两种资源限制设置。 |
coord_writes | 租户的协调层数据输入配置,包括 remote 和 local 两种资源限制设置。 |
http_data_in | 租户的 HTTP 层数据输入配置,支持 remote 和 local 限制。 |
http_data_out | 租户的 HTTP 层数据输入配置,支持 remote 和 local 限制。 |
http_queries | 租户的 HTTP 层数据输入配置,支持 remote 和 local 限制。 |
http_writes | 租户的 HTTP 层数据输入配置,支持 remote 和 local 限制。 |
其他相关内容请参考 租户资源
查看示例
create tenant t_create with comment 'create and alter tenant', drop_after ='1d',
object_config max_users_number = 1
max_databases = 3
max_shard_number = 2
max_replicate_number = 2
max_retention_time = 30,
coord_data_in remote_max = 10000
remote_initial = 0
remote_refill = 10000
remote_interval = 100
local_max = 10000
local_initial = 0,
coord_data_out remote_max = 10000
remote_initial = 0
remote_refill = 10000
remote_interval = 100
local_max = 10000
local_initial = 0,
coord_queries remote_max = 10000
remote_initial = 0
remote_refill = 10000
remote_interval = 100
local_max = 10000
local_initial = 0,
coord_writes remote_max = 10000
remote_initial = 0
remote_refill = 10000
remote_interval = 100
local_max = 10000
local_initial = 0,
http_data_in remote_max = 10000
remote_initial = 0
remote_refill = 10000
remote_interval = 100
local_max = 10000
local_initial = 0,
http_data_out remote_max = 10000
remote_initial = 0
remote_refill = 10000
remote_interval = 100
local_max = 10000
local_initial = 0,
http_queries remote_max = 10000
remote_initial = 0
remote_refill = 10000
remote_interval = 100
local_max = 10000
local_initial = 0,
http_writes remote_max = 10000
remote_initial = 0
remote_refill = 10000
remote_interval = 100
local_max = 10000
local_initial = 0;
CREATE USER
CREATE USER
用于创建新用户。
通过使用 CREATE USER
语句,管理员可以在 CnosDB 中创建新用户,并为其分配相应的权限和角色。新用户可以用于访问数据库、执行查询、更新数据等操作,具体权限取决于管理员为用户分配的权限级别。
CREATE USER [IF NOT EXISTS] user_name
[WITH [PASSWORD='',]
[MUST_CHANGE_PASSWORD=true,]
[RSA_PUBLIC_KEY='']
[GRANTED_ADMIN=true,] [COMMENT = '']];
选项 | 描述 |
---|---|
MUST_CHANGE_PASSWORD | 第一次登录时是否需要更改密码,默认为 false 。 |
GRANTED_ADMIN | 用户是否为 admin 用户,admin 用于整个实例的所有权限。 |
RSA_PUBLIC_KEY | 上传用户 RSA 算法的公钥,用于登录验证。 |
查看示例
CREATE USER IF NOT EXISTS tester WITH PASSWORD='xxx', MUST_CHANGE_PASSWORD=true, COMMENT = 'test';
CREATE ROLE
CREATE ROLE
用于创建新角色。
通过使用 CREATE ROLE
语句,管理员可以定义新的角色,并为这些角色分配相应的权限。角色在数据库中可以用于组织用户并授予一组特定的权限,从而简化权限管理和控制访问级别。
CREATE ROLE [IF NOT EXISTS] role_name [INHERIT {owner | member}];
选项 | 描述 |
---|---|
owner | 租户下默认的角色,创建新角色时可以继承 owner 或 member 。 |
member | 租户下默认的角色,创建新角色时可以继承 owner 或 member 。 |
查看示例
CREATE ROLE owner_role INHERIT owner;
ALTER TENANT
ALTER TENANT
用于修改租户(tenant)的属性或配置。
通过 ALTER TENANT
命令,可以对租户的属性进行修改,例如更改租户的配置、调整资源限制等。
ALTER TENANT tenant_name
{ SET sql_option
| UNSET option_name
| ADD USER user_name AS {owner | member}
| REMOVE USER user_name
| SET USER user_name AS {owner | member} };
sql_option: option_name = value
option: {COMMENT/DROP_AFTER/_LIMITER}
选项 | 描述 |
---|---|
SET sql_option | 为租户添加或修改属性。 |
UNSET option_name | 撤销租户内的配置或属性。 |
ADD USER user_name AS {owner | member} | 向租户中添加指定角色的成员。 |
REMOVE USER user_name | 从租户中移除指定成员。 |
SET USER user_name AS {owner | member} | 重设租户中指定成员的角色。 |
查看示例
ALTER TENANT test SET COMMENT = 'abc';
ALTER USER
ALTER USER
用于修改现有用户的语句。
通过使用 ALTER USER
语句,管理员可以更改用户的属性、权限和配置。这包括修改用户的密码、更改用户的角色、调整用户的权限等操作。
ALTER USER user_name {SET sql_option};
sql_option: option_name = option_value
option_name: {COMMENT | MUST_CHANGE_PASSWORD | PASSWORD | RSA_PUBLIC_KEY}
选项 | 描述 |
---|---|
SET | 为用户添加或修改属性。 |
查看示例
ALTER USER tester SET PASSWORD = 'aaa';
DROP TENANT
DROP TENANT 用于删除租户(tenant)及其相关的数据和配置。
通过 DROP TENANT
命令,可以删除特定的租户,包括该租户拥有的所有数据、配置、用户等内容。
在执行 DROP TENANT
操作之前,通常需要谨慎考虑,因为该操作将永久删除租户及其所有相关数据。
DROP TENANT tenant_name [AFTER duration];
选项 | 描述 |
---|---|
ALTER | 删除租户延迟时间,默认立即删除,支持:d , h , m ,当不带单位时,默认为 d ,删除期间租户会被禁用,ALTER 的优先级高于 CREATE TANANT 中的 DROP_AFTER 。 |
查看示例
DROP TENANT test AFTER '7d';
DROP USER
DROP USER
用于删除现有用户。
通过使用 DROP USER
语句,数据库管理员可以永久删除数据库中的特定用户,包括用户的登录凭证、权限和配置信息。
DROP USER [IF EXISTS] user_name;
查看示例
DROP USER IF EXISTS tester;
DROP ROLE
DROP ROLE
用于删除现有角色。
通过使用 DROP ROLE
语句,管理员可以永久删除数据库中的特定角色,包括该角色所拥有的权限和配置信息。删除角色时,角色分配给用户的权限可能会被撤销。
当删除角色时,对应角色的租户成员的权限会被同时撤销。 然而,租户成员和其角色之间的绑定关系不会同步删除(即仅角色会失效)。
DROP ROLE role_name;
查看示例
DROP USER IF EXISTS tester;
GRANT
GRANT
用于授予用户或角色权限。
通过使用 GRANT
命令,数据库管理员可以向用户或角色授予特定的权限,这样可以控制用户或角色对数据库对象的访问和操作权限。
权限支持的粒度如下
选项 | 描述 |
---|---|
READ | 对数据库读的权限。 |
WRITE | 对数据库读写的权限。 |
ALL | 对数据库读写和DDL操作的权限。 |
GRANT {READ | WRITE | ALL} ON DATABASE database_name TO ROLE role_name;
查看示例
创建一个名为 rrr
的角色。
CREATE ROLE rrr INHERIT member;
授予角色 rrr
读取数据库 air
的权限。
GRANT READ ON DATABASE air TO ROLE rrr;
授予角色 rr r
读写数据库 wind
的权限。
GRANT WRITE ON DATABASE wind TO ROLE rrr;
授予角色 rrr
关于数据库 sea
的所有权限。
GRANT ALL ON DATABASE sea TO ROLE rrr;
REVOKE
REVOKE
在数据库管理系统中用于撤销用户或角色权限。
通过使用 REVOKE
命令,数据库管理员可以从用户或角色中撤销之前授予的权限,以限制其对数据库对象的访问或操作权限。REVOKE
命令通常与 GRANT
命令结合使用,用于管理和调整用户或角色的权限。
REVOKE {WRITE | READ | FULL} ON DATABASE database_name FROM role_name;
查看示例
撤销 rrr
读取数据库 air
的权限。
REVOKE READ ON DATABASE air FROM rrr;