Merge branch '3.0' of https://github.com/taosdata/TDengine into 3.0
This commit is contained in:
commit
cb345ada5b
|
@ -39,10 +39,10 @@ This is an example:
|
|||
|
||||
```sql
|
||||
taos> show users;
|
||||
name | super | enable | sysinfo | create_time |
|
||||
================================================================================
|
||||
test | 0 | 1 | 1 | 2022-08-29 15:10:27.315 |
|
||||
root | 1 | 1 | 1 | 2022-08-29 15:03:34.710 |
|
||||
name | super | enable | sysinfo | createdb | create_time | allowed_host |
|
||||
=========================================================================================================
|
||||
test | 0 | 1 | 1 | 0 |2022-08-29 15:10:27.315 | 127.0.0.1 |
|
||||
root | 1 | 1 | 1 | 1 |2022-08-29 15:03:34.710 | 127.0.0.1 |
|
||||
Query OK, 2 rows in database (0.001657s)
|
||||
```
|
||||
|
||||
|
@ -50,10 +50,10 @@ Alternatively, you can get the user information by querying a built-in table, IN
|
|||
|
||||
```sql
|
||||
taos> select * from information_schema.ins_users;
|
||||
name | super | enable | sysinfo | create_time |
|
||||
================================================================================
|
||||
test | 0 | 1 | 1 | 2022-08-29 15:10:27.315 |
|
||||
root | 1 | 1 | 1 | 2022-08-29 15:03:34.710 |
|
||||
name | super | enable | sysinfo | createdb | create_time | allowed_host |
|
||||
=========================================================================================================
|
||||
test | 0 | 1 | 1 | 0 |2022-08-29 15:10:27.315 | 127.0.0.1 |
|
||||
root | 1 | 1 | 1 | 1 |2022-08-29 15:03:34.710 | 127.0.0.1 |
|
||||
Query OK, 2 rows in database (0.001953s)
|
||||
```
|
||||
|
||||
|
@ -72,12 +72,14 @@ alter_user_clause: {
|
|||
PASS 'literal'
|
||||
| ENABLE value
|
||||
| SYSINFO value
|
||||
| CREATEDB value
|
||||
}
|
||||
```
|
||||
|
||||
- PASS: Modify the user password.
|
||||
- ENABLE: Specify whether the user is enabled or disabled. 1 indicates enabled and 0 indicates disabled.
|
||||
- SYSINFO: Specify whether the user can query system information. 1 indicates that the user can query system information and 0 indicates that the user cannot query system information.
|
||||
- CREATEDB: Specify whether the user can create databases. 1 indicates that the user can create databases and 0 indicates that the user cannot create databases.
|
||||
|
||||
For example, you can use below command to disable user `test`:
|
||||
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
---
|
||||
title: 用户管理
|
||||
sidebar_label: 用户管理
|
||||
description: 本节讲述基本的用户管理功能
|
||||
---
|
||||
|
||||
用户和权限管理是 TDengine 企业版的功能,本节只讲述基本的用户管理部分。要想了解和获取全面的权限管理功能,请联系 TDengine 销售团队。
|
||||
|
||||
## 创建用户
|
||||
|
||||
```sql
|
||||
CREATE USER user_name PASS 'password' [SYSINFO {1|0}];
|
||||
```
|
||||
|
||||
用户名最长不超过 23 个字节。
|
||||
|
||||
密码最长不超过 31 个字节。密码可以包含字母、数字以及除单引号、双引号、反引号、反斜杠和空格以外的特殊字符,密码不能为空字符串。
|
||||
|
||||
`SYSINFO` 表示该用户是否能够查看系统信息。`1` 表示可以查看,`0` 表示无权查看。系统信息包括服务配置、dnode、vnode、存储等信息。缺省值为 `1`。
|
||||
|
||||
在下面的示例中,我们创建一个密码为 `123456` 且可以查看系统信息的用户。
|
||||
|
||||
```sql
|
||||
taos> create user test pass '123456' sysinfo 1;
|
||||
Query OK, 0 of 0 rows affected (0.001254s)
|
||||
```
|
||||
|
||||
## 查看用户
|
||||
|
||||
可以使用如下命令查看系统中的用户。
|
||||
|
||||
```sql
|
||||
SHOW USERS;
|
||||
```
|
||||
|
||||
以下是示例:
|
||||
|
||||
```sql
|
||||
taos> show users;
|
||||
name | super | enable | sysinfo | createdb | create_time | allowed_host |
|
||||
=========================================================================================================
|
||||
test | 0 | 1 | 1 | 0 |2022-08-29 15:10:27.315 | 127.0.0.1 |
|
||||
root | 1 | 1 | 1 | 1 |2022-08-29 15:03:34.710 | 127.0.0.1 |
|
||||
Query OK, 2 rows in database (0.001657s)
|
||||
```
|
||||
|
||||
或者,可以查询内置系统表 INFORMATION_SCHEMA.INS_USERS 来获取用户信息。
|
||||
|
||||
```sql
|
||||
taos> select * from information_schema.ins_users;
|
||||
name | super | enable | sysinfo | createdb | create_time | allowed_host |
|
||||
=========================================================================================================
|
||||
test | 0 | 1 | 1 | 0 |2022-08-29 15:10:27.315 | 127.0.0.1 |
|
||||
root | 1 | 1 | 1 | 1 |2022-08-29 15:03:34.710 | 127.0.0.1 |
|
||||
Query OK, 2 rows in database (0.001953s)
|
||||
```
|
||||
|
||||
## 删除用户
|
||||
|
||||
```sql
|
||||
DROP USER user_name;
|
||||
```
|
||||
|
||||
## 修改用户配置
|
||||
|
||||
```sql
|
||||
ALTER USER user_name alter_user_clause
|
||||
|
||||
alter_user_clause: {
|
||||
PASS 'literal'
|
||||
| ENABLE value
|
||||
| SYSINFO value
|
||||
| CREATEDB value
|
||||
}
|
||||
```
|
||||
|
||||
- PASS: 修改密码,后跟新密码
|
||||
- ENABLE: 启用或禁用该用户,`1` 表示启用,`0` 表示禁用
|
||||
- SYSINFO: 允许或禁止查看系统信息,`1` 表示允许,`0` 表示禁止
|
||||
- CREATEDB: 允许或禁止创建数据库,`1` 表示允许,`0` 表示禁止
|
||||
|
||||
下面的示例禁用了名为 `test` 的用户:
|
||||
|
||||
```sql
|
||||
taos> alter user test enable 0;
|
||||
Query OK, 0 of 0 rows affected (0.001160s)
|
||||
```
|
||||
|
||||
## 授权管理
|
||||
|
||||
授权管理仅在 TDengine 企业版中可用,请联系 TDengine 销售团队。
|
|
@ -40,6 +40,7 @@ extern "C" {
|
|||
#define TSDB_INS_TABLE_COLS "ins_columns"
|
||||
#define TSDB_INS_TABLE_TABLE_DISTRIBUTED "ins_table_distributed"
|
||||
#define TSDB_INS_TABLE_USERS "ins_users"
|
||||
#define TSDB_INS_TABLE_USERS_FULL "ins_users_full"
|
||||
#define TSDB_INS_TABLE_LICENCES "ins_grants"
|
||||
#define TSDB_INS_TABLE_VGROUPS "ins_vgroups"
|
||||
#define TSDB_INS_TABLE_VNODES "ins_vnodes"
|
||||
|
|
|
@ -158,6 +158,7 @@ typedef enum _mgmt_table {
|
|||
TSDB_MGMT_TABLE_MACHINES,
|
||||
TSDB_MGMT_TABLE_ARBGROUP,
|
||||
TSDB_MGMT_TABLE_ENCRYPTIONS,
|
||||
TSDB_MGMT_TABLE_USER_FULL,
|
||||
TSDB_MGMT_TABLE_MAX,
|
||||
} EShowType;
|
||||
|
||||
|
@ -362,6 +363,7 @@ typedef enum ENodeType {
|
|||
QUERY_NODE_SHOW_TABLES_STMT,
|
||||
QUERY_NODE_SHOW_TAGS_STMT,
|
||||
QUERY_NODE_SHOW_USERS_STMT,
|
||||
QUERY_NODE_SHOW_USERS_FULL_STMT,
|
||||
QUERY_NODE_SHOW_LICENCES_STMT,
|
||||
QUERY_NODE_SHOW_VGROUPS_STMT,
|
||||
QUERY_NODE_SHOW_TOPICS_STMT,
|
||||
|
@ -1017,6 +1019,8 @@ typedef struct {
|
|||
SIpV4Range* pIpRanges;
|
||||
int32_t sqlLen;
|
||||
char* sql;
|
||||
int8_t isImport;
|
||||
int8_t createDb;
|
||||
} SCreateUserReq;
|
||||
|
||||
int32_t tSerializeSCreateUserReq(void* buf, int32_t bufLen, SCreateUserReq* pReq);
|
||||
|
@ -2111,6 +2115,7 @@ typedef struct {
|
|||
char filterTb[TSDB_TABLE_NAME_LEN]; // for ins_columns
|
||||
int64_t showId;
|
||||
int64_t compactId; // for compact
|
||||
bool withFull; // for show users full
|
||||
} SRetrieveTableReq;
|
||||
|
||||
typedef struct SSysTableSchema {
|
||||
|
|
|
@ -50,348 +50,349 @@
|
|||
#define TK_STATE 32
|
||||
#define TK_NK_COMMA 33
|
||||
#define TK_HOST 34
|
||||
#define TK_USER 35
|
||||
#define TK_ENABLE 36
|
||||
#define TK_NK_INTEGER 37
|
||||
#define TK_SYSINFO 38
|
||||
#define TK_CREATEDB 39
|
||||
#define TK_ADD 40
|
||||
#define TK_DROP 41
|
||||
#define TK_GRANT 42
|
||||
#define TK_ON 43
|
||||
#define TK_TO 44
|
||||
#define TK_REVOKE 45
|
||||
#define TK_FROM 46
|
||||
#define TK_SUBSCRIBE 47
|
||||
#define TK_READ 48
|
||||
#define TK_WRITE 49
|
||||
#define TK_NK_DOT 50
|
||||
#define TK_WITH 51
|
||||
#define TK_ENCRYPT_KEY 52
|
||||
#define TK_DNODE 53
|
||||
#define TK_PORT 54
|
||||
#define TK_DNODES 55
|
||||
#define TK_RESTORE 56
|
||||
#define TK_NK_IPTOKEN 57
|
||||
#define TK_FORCE 58
|
||||
#define TK_UNSAFE 59
|
||||
#define TK_CLUSTER 60
|
||||
#define TK_LOCAL 61
|
||||
#define TK_QNODE 62
|
||||
#define TK_BNODE 63
|
||||
#define TK_SNODE 64
|
||||
#define TK_MNODE 65
|
||||
#define TK_VNODE 66
|
||||
#define TK_DATABASE 67
|
||||
#define TK_USE 68
|
||||
#define TK_FLUSH 69
|
||||
#define TK_TRIM 70
|
||||
#define TK_S3MIGRATE 71
|
||||
#define TK_COMPACT 72
|
||||
#define TK_IF 73
|
||||
#define TK_NOT 74
|
||||
#define TK_EXISTS 75
|
||||
#define TK_BUFFER 76
|
||||
#define TK_CACHEMODEL 77
|
||||
#define TK_CACHESIZE 78
|
||||
#define TK_COMP 79
|
||||
#define TK_DURATION 80
|
||||
#define TK_NK_VARIABLE 81
|
||||
#define TK_MAXROWS 82
|
||||
#define TK_MINROWS 83
|
||||
#define TK_KEEP 84
|
||||
#define TK_PAGES 85
|
||||
#define TK_PAGESIZE 86
|
||||
#define TK_TSDB_PAGESIZE 87
|
||||
#define TK_PRECISION 88
|
||||
#define TK_REPLICA 89
|
||||
#define TK_VGROUPS 90
|
||||
#define TK_SINGLE_STABLE 91
|
||||
#define TK_RETENTIONS 92
|
||||
#define TK_SCHEMALESS 93
|
||||
#define TK_WAL_LEVEL 94
|
||||
#define TK_WAL_FSYNC_PERIOD 95
|
||||
#define TK_WAL_RETENTION_PERIOD 96
|
||||
#define TK_WAL_RETENTION_SIZE 97
|
||||
#define TK_WAL_ROLL_PERIOD 98
|
||||
#define TK_WAL_SEGMENT_SIZE 99
|
||||
#define TK_STT_TRIGGER 100
|
||||
#define TK_TABLE_PREFIX 101
|
||||
#define TK_TABLE_SUFFIX 102
|
||||
#define TK_S3_CHUNKSIZE 103
|
||||
#define TK_S3_KEEPLOCAL 104
|
||||
#define TK_S3_COMPACT 105
|
||||
#define TK_KEEP_TIME_OFFSET 106
|
||||
#define TK_ENCRYPT_ALGORITHM 107
|
||||
#define TK_NK_COLON 108
|
||||
#define TK_BWLIMIT 109
|
||||
#define TK_START 110
|
||||
#define TK_TIMESTAMP 111
|
||||
#define TK_END 112
|
||||
#define TK_TABLE 113
|
||||
#define TK_NK_LP 114
|
||||
#define TK_NK_RP 115
|
||||
#define TK_STABLE 116
|
||||
#define TK_COLUMN 117
|
||||
#define TK_MODIFY 118
|
||||
#define TK_RENAME 119
|
||||
#define TK_TAG 120
|
||||
#define TK_SET 121
|
||||
#define TK_NK_EQ 122
|
||||
#define TK_USING 123
|
||||
#define TK_TAGS 124
|
||||
#define TK_BOOL 125
|
||||
#define TK_TINYINT 126
|
||||
#define TK_SMALLINT 127
|
||||
#define TK_INT 128
|
||||
#define TK_INTEGER 129
|
||||
#define TK_BIGINT 130
|
||||
#define TK_FLOAT 131
|
||||
#define TK_DOUBLE 132
|
||||
#define TK_BINARY 133
|
||||
#define TK_NCHAR 134
|
||||
#define TK_UNSIGNED 135
|
||||
#define TK_JSON 136
|
||||
#define TK_VARCHAR 137
|
||||
#define TK_MEDIUMBLOB 138
|
||||
#define TK_BLOB 139
|
||||
#define TK_VARBINARY 140
|
||||
#define TK_GEOMETRY 141
|
||||
#define TK_DECIMAL 142
|
||||
#define TK_COMMENT 143
|
||||
#define TK_MAX_DELAY 144
|
||||
#define TK_WATERMARK 145
|
||||
#define TK_ROLLUP 146
|
||||
#define TK_TTL 147
|
||||
#define TK_SMA 148
|
||||
#define TK_DELETE_MARK 149
|
||||
#define TK_FIRST 150
|
||||
#define TK_LAST 151
|
||||
#define TK_SHOW 152
|
||||
#define TK_PRIVILEGES 153
|
||||
#define TK_DATABASES 154
|
||||
#define TK_TABLES 155
|
||||
#define TK_STABLES 156
|
||||
#define TK_MNODES 157
|
||||
#define TK_QNODES 158
|
||||
#define TK_ARBGROUPS 159
|
||||
#define TK_FUNCTIONS 160
|
||||
#define TK_INDEXES 161
|
||||
#define TK_ACCOUNTS 162
|
||||
#define TK_APPS 163
|
||||
#define TK_CONNECTIONS 164
|
||||
#define TK_LICENCES 165
|
||||
#define TK_GRANTS 166
|
||||
#define TK_FULL 167
|
||||
#define TK_LOGS 168
|
||||
#define TK_MACHINES 169
|
||||
#define TK_ENCRYPTIONS 170
|
||||
#define TK_QUERIES 171
|
||||
#define TK_SCORES 172
|
||||
#define TK_TOPICS 173
|
||||
#define TK_VARIABLES 174
|
||||
#define TK_BNODES 175
|
||||
#define TK_SNODES 176
|
||||
#define TK_TRANSACTIONS 177
|
||||
#define TK_DISTRIBUTED 178
|
||||
#define TK_CONSUMERS 179
|
||||
#define TK_SUBSCRIPTIONS 180
|
||||
#define TK_VNODES 181
|
||||
#define TK_ALIVE 182
|
||||
#define TK_VIEWS 183
|
||||
#define TK_VIEW 184
|
||||
#define TK_COMPACTS 185
|
||||
#define TK_NORMAL 186
|
||||
#define TK_CHILD 187
|
||||
#define TK_LIKE 188
|
||||
#define TK_TBNAME 189
|
||||
#define TK_QTAGS 190
|
||||
#define TK_AS 191
|
||||
#define TK_SYSTEM 192
|
||||
#define TK_TSMA 193
|
||||
#define TK_INTERVAL 194
|
||||
#define TK_RECURSIVE 195
|
||||
#define TK_TSMAS 196
|
||||
#define TK_FUNCTION 197
|
||||
#define TK_INDEX 198
|
||||
#define TK_COUNT 199
|
||||
#define TK_LAST_ROW 200
|
||||
#define TK_META 201
|
||||
#define TK_ONLY 202
|
||||
#define TK_TOPIC 203
|
||||
#define TK_CONSUMER 204
|
||||
#define TK_GROUP 205
|
||||
#define TK_DESC 206
|
||||
#define TK_DESCRIBE 207
|
||||
#define TK_RESET 208
|
||||
#define TK_QUERY 209
|
||||
#define TK_CACHE 210
|
||||
#define TK_EXPLAIN 211
|
||||
#define TK_ANALYZE 212
|
||||
#define TK_VERBOSE 213
|
||||
#define TK_NK_BOOL 214
|
||||
#define TK_RATIO 215
|
||||
#define TK_NK_FLOAT 216
|
||||
#define TK_OUTPUTTYPE 217
|
||||
#define TK_AGGREGATE 218
|
||||
#define TK_BUFSIZE 219
|
||||
#define TK_LANGUAGE 220
|
||||
#define TK_REPLACE 221
|
||||
#define TK_STREAM 222
|
||||
#define TK_INTO 223
|
||||
#define TK_PAUSE 224
|
||||
#define TK_RESUME 225
|
||||
#define TK_PRIMARY 226
|
||||
#define TK_KEY 227
|
||||
#define TK_TRIGGER 228
|
||||
#define TK_AT_ONCE 229
|
||||
#define TK_WINDOW_CLOSE 230
|
||||
#define TK_IGNORE 231
|
||||
#define TK_EXPIRED 232
|
||||
#define TK_FILL_HISTORY 233
|
||||
#define TK_UPDATE 234
|
||||
#define TK_SUBTABLE 235
|
||||
#define TK_UNTREATED 236
|
||||
#define TK_KILL 237
|
||||
#define TK_CONNECTION 238
|
||||
#define TK_TRANSACTION 239
|
||||
#define TK_BALANCE 240
|
||||
#define TK_VGROUP 241
|
||||
#define TK_LEADER 242
|
||||
#define TK_MERGE 243
|
||||
#define TK_REDISTRIBUTE 244
|
||||
#define TK_SPLIT 245
|
||||
#define TK_DELETE 246
|
||||
#define TK_INSERT 247
|
||||
#define TK_NK_BIN 248
|
||||
#define TK_NK_HEX 249
|
||||
#define TK_NULL 250
|
||||
#define TK_NK_QUESTION 251
|
||||
#define TK_NK_ALIAS 252
|
||||
#define TK_NK_ARROW 253
|
||||
#define TK_ROWTS 254
|
||||
#define TK_QSTART 255
|
||||
#define TK_QEND 256
|
||||
#define TK_QDURATION 257
|
||||
#define TK_WSTART 258
|
||||
#define TK_WEND 259
|
||||
#define TK_WDURATION 260
|
||||
#define TK_IROWTS 261
|
||||
#define TK_ISFILLED 262
|
||||
#define TK_CAST 263
|
||||
#define TK_NOW 264
|
||||
#define TK_TODAY 265
|
||||
#define TK_TIMEZONE 266
|
||||
#define TK_CLIENT_VERSION 267
|
||||
#define TK_SERVER_VERSION 268
|
||||
#define TK_SERVER_STATUS 269
|
||||
#define TK_CURRENT_USER 270
|
||||
#define TK_CASE 271
|
||||
#define TK_WHEN 272
|
||||
#define TK_THEN 273
|
||||
#define TK_ELSE 274
|
||||
#define TK_BETWEEN 275
|
||||
#define TK_IS 276
|
||||
#define TK_NK_LT 277
|
||||
#define TK_NK_GT 278
|
||||
#define TK_NK_LE 279
|
||||
#define TK_NK_GE 280
|
||||
#define TK_NK_NE 281
|
||||
#define TK_MATCH 282
|
||||
#define TK_NMATCH 283
|
||||
#define TK_CONTAINS 284
|
||||
#define TK_IN 285
|
||||
#define TK_JOIN 286
|
||||
#define TK_INNER 287
|
||||
#define TK_LEFT 288
|
||||
#define TK_RIGHT 289
|
||||
#define TK_OUTER 290
|
||||
#define TK_SEMI 291
|
||||
#define TK_ANTI 292
|
||||
#define TK_ASOF 293
|
||||
#define TK_WINDOW 294
|
||||
#define TK_WINDOW_OFFSET 295
|
||||
#define TK_JLIMIT 296
|
||||
#define TK_SELECT 297
|
||||
#define TK_NK_HINT 298
|
||||
#define TK_DISTINCT 299
|
||||
#define TK_WHERE 300
|
||||
#define TK_PARTITION 301
|
||||
#define TK_BY 302
|
||||
#define TK_SESSION 303
|
||||
#define TK_STATE_WINDOW 304
|
||||
#define TK_EVENT_WINDOW 305
|
||||
#define TK_COUNT_WINDOW 306
|
||||
#define TK_SLIDING 307
|
||||
#define TK_FILL 308
|
||||
#define TK_VALUE 309
|
||||
#define TK_VALUE_F 310
|
||||
#define TK_NONE 311
|
||||
#define TK_PREV 312
|
||||
#define TK_NULL_F 313
|
||||
#define TK_LINEAR 314
|
||||
#define TK_NEXT 315
|
||||
#define TK_HAVING 316
|
||||
#define TK_RANGE 317
|
||||
#define TK_EVERY 318
|
||||
#define TK_ORDER 319
|
||||
#define TK_SLIMIT 320
|
||||
#define TK_SOFFSET 321
|
||||
#define TK_LIMIT 322
|
||||
#define TK_OFFSET 323
|
||||
#define TK_ASC 324
|
||||
#define TK_NULLS 325
|
||||
#define TK_ABORT 326
|
||||
#define TK_AFTER 327
|
||||
#define TK_ATTACH 328
|
||||
#define TK_BEFORE 329
|
||||
#define TK_BEGIN 330
|
||||
#define TK_BITAND 331
|
||||
#define TK_BITNOT 332
|
||||
#define TK_BITOR 333
|
||||
#define TK_BLOCKS 334
|
||||
#define TK_CHANGE 335
|
||||
#define TK_COMMA 336
|
||||
#define TK_CONCAT 337
|
||||
#define TK_CONFLICT 338
|
||||
#define TK_COPY 339
|
||||
#define TK_DEFERRED 340
|
||||
#define TK_DELIMITERS 341
|
||||
#define TK_DETACH 342
|
||||
#define TK_DIVIDE 343
|
||||
#define TK_DOT 344
|
||||
#define TK_EACH 345
|
||||
#define TK_FAIL 346
|
||||
#define TK_FILE 347
|
||||
#define TK_FOR 348
|
||||
#define TK_GLOB 349
|
||||
#define TK_ID 350
|
||||
#define TK_IMMEDIATE 351
|
||||
#define TK_IMPORT 352
|
||||
#define TK_INITIALLY 353
|
||||
#define TK_INSTEAD 354
|
||||
#define TK_ISNULL 355
|
||||
#define TK_MODULES 356
|
||||
#define TK_NK_BITNOT 357
|
||||
#define TK_NK_SEMI 358
|
||||
#define TK_NOTNULL 359
|
||||
#define TK_OF 360
|
||||
#define TK_PLUS 361
|
||||
#define TK_PRIVILEGE 362
|
||||
#define TK_RAISE 363
|
||||
#define TK_RESTRICT 364
|
||||
#define TK_ROW 365
|
||||
#define TK_STAR 366
|
||||
#define TK_STATEMENT 367
|
||||
#define TK_STRICT 368
|
||||
#define TK_STRING 369
|
||||
#define TK_TIMES 370
|
||||
#define TK_VALUES 371
|
||||
#define TK_VARIABLE 372
|
||||
#define TK_WAL 373
|
||||
#define TK_ENCODE 374
|
||||
#define TK_COMPRESS 375
|
||||
#define TK_LEVEL 376
|
||||
#define TK_IS_IMPORT 35
|
||||
#define TK_NK_INTEGER 36
|
||||
#define TK_CREATEDB 37
|
||||
#define TK_USER 38
|
||||
#define TK_ENABLE 39
|
||||
#define TK_SYSINFO 40
|
||||
#define TK_ADD 41
|
||||
#define TK_DROP 42
|
||||
#define TK_GRANT 43
|
||||
#define TK_ON 44
|
||||
#define TK_TO 45
|
||||
#define TK_REVOKE 46
|
||||
#define TK_FROM 47
|
||||
#define TK_SUBSCRIBE 48
|
||||
#define TK_READ 49
|
||||
#define TK_WRITE 50
|
||||
#define TK_NK_DOT 51
|
||||
#define TK_WITH 52
|
||||
#define TK_ENCRYPT_KEY 53
|
||||
#define TK_DNODE 54
|
||||
#define TK_PORT 55
|
||||
#define TK_DNODES 56
|
||||
#define TK_RESTORE 57
|
||||
#define TK_NK_IPTOKEN 58
|
||||
#define TK_FORCE 59
|
||||
#define TK_UNSAFE 60
|
||||
#define TK_CLUSTER 61
|
||||
#define TK_LOCAL 62
|
||||
#define TK_QNODE 63
|
||||
#define TK_BNODE 64
|
||||
#define TK_SNODE 65
|
||||
#define TK_MNODE 66
|
||||
#define TK_VNODE 67
|
||||
#define TK_DATABASE 68
|
||||
#define TK_USE 69
|
||||
#define TK_FLUSH 70
|
||||
#define TK_TRIM 71
|
||||
#define TK_S3MIGRATE 72
|
||||
#define TK_COMPACT 73
|
||||
#define TK_IF 74
|
||||
#define TK_NOT 75
|
||||
#define TK_EXISTS 76
|
||||
#define TK_BUFFER 77
|
||||
#define TK_CACHEMODEL 78
|
||||
#define TK_CACHESIZE 79
|
||||
#define TK_COMP 80
|
||||
#define TK_DURATION 81
|
||||
#define TK_NK_VARIABLE 82
|
||||
#define TK_MAXROWS 83
|
||||
#define TK_MINROWS 84
|
||||
#define TK_KEEP 85
|
||||
#define TK_PAGES 86
|
||||
#define TK_PAGESIZE 87
|
||||
#define TK_TSDB_PAGESIZE 88
|
||||
#define TK_PRECISION 89
|
||||
#define TK_REPLICA 90
|
||||
#define TK_VGROUPS 91
|
||||
#define TK_SINGLE_STABLE 92
|
||||
#define TK_RETENTIONS 93
|
||||
#define TK_SCHEMALESS 94
|
||||
#define TK_WAL_LEVEL 95
|
||||
#define TK_WAL_FSYNC_PERIOD 96
|
||||
#define TK_WAL_RETENTION_PERIOD 97
|
||||
#define TK_WAL_RETENTION_SIZE 98
|
||||
#define TK_WAL_ROLL_PERIOD 99
|
||||
#define TK_WAL_SEGMENT_SIZE 100
|
||||
#define TK_STT_TRIGGER 101
|
||||
#define TK_TABLE_PREFIX 102
|
||||
#define TK_TABLE_SUFFIX 103
|
||||
#define TK_S3_CHUNKSIZE 104
|
||||
#define TK_S3_KEEPLOCAL 105
|
||||
#define TK_S3_COMPACT 106
|
||||
#define TK_KEEP_TIME_OFFSET 107
|
||||
#define TK_ENCRYPT_ALGORITHM 108
|
||||
#define TK_NK_COLON 109
|
||||
#define TK_BWLIMIT 110
|
||||
#define TK_START 111
|
||||
#define TK_TIMESTAMP 112
|
||||
#define TK_END 113
|
||||
#define TK_TABLE 114
|
||||
#define TK_NK_LP 115
|
||||
#define TK_NK_RP 116
|
||||
#define TK_STABLE 117
|
||||
#define TK_COLUMN 118
|
||||
#define TK_MODIFY 119
|
||||
#define TK_RENAME 120
|
||||
#define TK_TAG 121
|
||||
#define TK_SET 122
|
||||
#define TK_NK_EQ 123
|
||||
#define TK_USING 124
|
||||
#define TK_TAGS 125
|
||||
#define TK_BOOL 126
|
||||
#define TK_TINYINT 127
|
||||
#define TK_SMALLINT 128
|
||||
#define TK_INT 129
|
||||
#define TK_INTEGER 130
|
||||
#define TK_BIGINT 131
|
||||
#define TK_FLOAT 132
|
||||
#define TK_DOUBLE 133
|
||||
#define TK_BINARY 134
|
||||
#define TK_NCHAR 135
|
||||
#define TK_UNSIGNED 136
|
||||
#define TK_JSON 137
|
||||
#define TK_VARCHAR 138
|
||||
#define TK_MEDIUMBLOB 139
|
||||
#define TK_BLOB 140
|
||||
#define TK_VARBINARY 141
|
||||
#define TK_GEOMETRY 142
|
||||
#define TK_DECIMAL 143
|
||||
#define TK_COMMENT 144
|
||||
#define TK_MAX_DELAY 145
|
||||
#define TK_WATERMARK 146
|
||||
#define TK_ROLLUP 147
|
||||
#define TK_TTL 148
|
||||
#define TK_SMA 149
|
||||
#define TK_DELETE_MARK 150
|
||||
#define TK_FIRST 151
|
||||
#define TK_LAST 152
|
||||
#define TK_SHOW 153
|
||||
#define TK_FULL 154
|
||||
#define TK_PRIVILEGES 155
|
||||
#define TK_DATABASES 156
|
||||
#define TK_TABLES 157
|
||||
#define TK_STABLES 158
|
||||
#define TK_MNODES 159
|
||||
#define TK_QNODES 160
|
||||
#define TK_ARBGROUPS 161
|
||||
#define TK_FUNCTIONS 162
|
||||
#define TK_INDEXES 163
|
||||
#define TK_ACCOUNTS 164
|
||||
#define TK_APPS 165
|
||||
#define TK_CONNECTIONS 166
|
||||
#define TK_LICENCES 167
|
||||
#define TK_GRANTS 168
|
||||
#define TK_LOGS 169
|
||||
#define TK_MACHINES 170
|
||||
#define TK_ENCRYPTIONS 171
|
||||
#define TK_QUERIES 172
|
||||
#define TK_SCORES 173
|
||||
#define TK_TOPICS 174
|
||||
#define TK_VARIABLES 175
|
||||
#define TK_BNODES 176
|
||||
#define TK_SNODES 177
|
||||
#define TK_TRANSACTIONS 178
|
||||
#define TK_DISTRIBUTED 179
|
||||
#define TK_CONSUMERS 180
|
||||
#define TK_SUBSCRIPTIONS 181
|
||||
#define TK_VNODES 182
|
||||
#define TK_ALIVE 183
|
||||
#define TK_VIEWS 184
|
||||
#define TK_VIEW 185
|
||||
#define TK_COMPACTS 186
|
||||
#define TK_NORMAL 187
|
||||
#define TK_CHILD 188
|
||||
#define TK_LIKE 189
|
||||
#define TK_TBNAME 190
|
||||
#define TK_QTAGS 191
|
||||
#define TK_AS 192
|
||||
#define TK_SYSTEM 193
|
||||
#define TK_TSMA 194
|
||||
#define TK_INTERVAL 195
|
||||
#define TK_RECURSIVE 196
|
||||
#define TK_TSMAS 197
|
||||
#define TK_FUNCTION 198
|
||||
#define TK_INDEX 199
|
||||
#define TK_COUNT 200
|
||||
#define TK_LAST_ROW 201
|
||||
#define TK_META 202
|
||||
#define TK_ONLY 203
|
||||
#define TK_TOPIC 204
|
||||
#define TK_CONSUMER 205
|
||||
#define TK_GROUP 206
|
||||
#define TK_DESC 207
|
||||
#define TK_DESCRIBE 208
|
||||
#define TK_RESET 209
|
||||
#define TK_QUERY 210
|
||||
#define TK_CACHE 211
|
||||
#define TK_EXPLAIN 212
|
||||
#define TK_ANALYZE 213
|
||||
#define TK_VERBOSE 214
|
||||
#define TK_NK_BOOL 215
|
||||
#define TK_RATIO 216
|
||||
#define TK_NK_FLOAT 217
|
||||
#define TK_OUTPUTTYPE 218
|
||||
#define TK_AGGREGATE 219
|
||||
#define TK_BUFSIZE 220
|
||||
#define TK_LANGUAGE 221
|
||||
#define TK_REPLACE 222
|
||||
#define TK_STREAM 223
|
||||
#define TK_INTO 224
|
||||
#define TK_PAUSE 225
|
||||
#define TK_RESUME 226
|
||||
#define TK_PRIMARY 227
|
||||
#define TK_KEY 228
|
||||
#define TK_TRIGGER 229
|
||||
#define TK_AT_ONCE 230
|
||||
#define TK_WINDOW_CLOSE 231
|
||||
#define TK_IGNORE 232
|
||||
#define TK_EXPIRED 233
|
||||
#define TK_FILL_HISTORY 234
|
||||
#define TK_UPDATE 235
|
||||
#define TK_SUBTABLE 236
|
||||
#define TK_UNTREATED 237
|
||||
#define TK_KILL 238
|
||||
#define TK_CONNECTION 239
|
||||
#define TK_TRANSACTION 240
|
||||
#define TK_BALANCE 241
|
||||
#define TK_VGROUP 242
|
||||
#define TK_LEADER 243
|
||||
#define TK_MERGE 244
|
||||
#define TK_REDISTRIBUTE 245
|
||||
#define TK_SPLIT 246
|
||||
#define TK_DELETE 247
|
||||
#define TK_INSERT 248
|
||||
#define TK_NK_BIN 249
|
||||
#define TK_NK_HEX 250
|
||||
#define TK_NULL 251
|
||||
#define TK_NK_QUESTION 252
|
||||
#define TK_NK_ALIAS 253
|
||||
#define TK_NK_ARROW 254
|
||||
#define TK_ROWTS 255
|
||||
#define TK_QSTART 256
|
||||
#define TK_QEND 257
|
||||
#define TK_QDURATION 258
|
||||
#define TK_WSTART 259
|
||||
#define TK_WEND 260
|
||||
#define TK_WDURATION 261
|
||||
#define TK_IROWTS 262
|
||||
#define TK_ISFILLED 263
|
||||
#define TK_CAST 264
|
||||
#define TK_NOW 265
|
||||
#define TK_TODAY 266
|
||||
#define TK_TIMEZONE 267
|
||||
#define TK_CLIENT_VERSION 268
|
||||
#define TK_SERVER_VERSION 269
|
||||
#define TK_SERVER_STATUS 270
|
||||
#define TK_CURRENT_USER 271
|
||||
#define TK_CASE 272
|
||||
#define TK_WHEN 273
|
||||
#define TK_THEN 274
|
||||
#define TK_ELSE 275
|
||||
#define TK_BETWEEN 276
|
||||
#define TK_IS 277
|
||||
#define TK_NK_LT 278
|
||||
#define TK_NK_GT 279
|
||||
#define TK_NK_LE 280
|
||||
#define TK_NK_GE 281
|
||||
#define TK_NK_NE 282
|
||||
#define TK_MATCH 283
|
||||
#define TK_NMATCH 284
|
||||
#define TK_CONTAINS 285
|
||||
#define TK_IN 286
|
||||
#define TK_JOIN 287
|
||||
#define TK_INNER 288
|
||||
#define TK_LEFT 289
|
||||
#define TK_RIGHT 290
|
||||
#define TK_OUTER 291
|
||||
#define TK_SEMI 292
|
||||
#define TK_ANTI 293
|
||||
#define TK_ASOF 294
|
||||
#define TK_WINDOW 295
|
||||
#define TK_WINDOW_OFFSET 296
|
||||
#define TK_JLIMIT 297
|
||||
#define TK_SELECT 298
|
||||
#define TK_NK_HINT 299
|
||||
#define TK_DISTINCT 300
|
||||
#define TK_WHERE 301
|
||||
#define TK_PARTITION 302
|
||||
#define TK_BY 303
|
||||
#define TK_SESSION 304
|
||||
#define TK_STATE_WINDOW 305
|
||||
#define TK_EVENT_WINDOW 306
|
||||
#define TK_COUNT_WINDOW 307
|
||||
#define TK_SLIDING 308
|
||||
#define TK_FILL 309
|
||||
#define TK_VALUE 310
|
||||
#define TK_VALUE_F 311
|
||||
#define TK_NONE 312
|
||||
#define TK_PREV 313
|
||||
#define TK_NULL_F 314
|
||||
#define TK_LINEAR 315
|
||||
#define TK_NEXT 316
|
||||
#define TK_HAVING 317
|
||||
#define TK_RANGE 318
|
||||
#define TK_EVERY 319
|
||||
#define TK_ORDER 320
|
||||
#define TK_SLIMIT 321
|
||||
#define TK_SOFFSET 322
|
||||
#define TK_LIMIT 323
|
||||
#define TK_OFFSET 324
|
||||
#define TK_ASC 325
|
||||
#define TK_NULLS 326
|
||||
#define TK_ABORT 327
|
||||
#define TK_AFTER 328
|
||||
#define TK_ATTACH 329
|
||||
#define TK_BEFORE 330
|
||||
#define TK_BEGIN 331
|
||||
#define TK_BITAND 332
|
||||
#define TK_BITNOT 333
|
||||
#define TK_BITOR 334
|
||||
#define TK_BLOCKS 335
|
||||
#define TK_CHANGE 336
|
||||
#define TK_COMMA 337
|
||||
#define TK_CONCAT 338
|
||||
#define TK_CONFLICT 339
|
||||
#define TK_COPY 340
|
||||
#define TK_DEFERRED 341
|
||||
#define TK_DELIMITERS 342
|
||||
#define TK_DETACH 343
|
||||
#define TK_DIVIDE 344
|
||||
#define TK_DOT 345
|
||||
#define TK_EACH 346
|
||||
#define TK_FAIL 347
|
||||
#define TK_FILE 348
|
||||
#define TK_FOR 349
|
||||
#define TK_GLOB 350
|
||||
#define TK_ID 351
|
||||
#define TK_IMMEDIATE 352
|
||||
#define TK_IMPORT 353
|
||||
#define TK_INITIALLY 354
|
||||
#define TK_INSTEAD 355
|
||||
#define TK_ISNULL 356
|
||||
#define TK_MODULES 357
|
||||
#define TK_NK_BITNOT 358
|
||||
#define TK_NK_SEMI 359
|
||||
#define TK_NOTNULL 360
|
||||
#define TK_OF 361
|
||||
#define TK_PLUS 362
|
||||
#define TK_PRIVILEGE 363
|
||||
#define TK_RAISE 364
|
||||
#define TK_RESTRICT 365
|
||||
#define TK_ROW 366
|
||||
#define TK_STAR 367
|
||||
#define TK_STATEMENT 368
|
||||
#define TK_STRICT 369
|
||||
#define TK_STRING 370
|
||||
#define TK_TIMES 371
|
||||
#define TK_VALUES 372
|
||||
#define TK_VARIABLE 373
|
||||
#define TK_WAL 374
|
||||
#define TK_ENCODE 375
|
||||
#define TK_COMPRESS 376
|
||||
#define TK_LEVEL 377
|
||||
|
||||
#define TK_NK_SPACE 600
|
||||
#define TK_NK_COMMENT 601
|
||||
|
|
|
@ -329,7 +329,7 @@ typedef struct {
|
|||
|
||||
typedef struct SStateStore {
|
||||
int32_t (*streamStatePutParName)(SStreamState* pState, int64_t groupId, const char* tbname);
|
||||
int32_t (*streamStateGetParName)(SStreamState* pState, int64_t groupId, void** pVal);
|
||||
int32_t (*streamStateGetParName)(SStreamState* pState, int64_t groupId, void** pVal, bool onlyCache);
|
||||
|
||||
int32_t (*streamStateAddIfNotExist)(SStreamState* pState, const SWinKey* key, void** pVal, int32_t* pVLen);
|
||||
int32_t (*streamStateReleaseBuf)(SStreamState* pState, void* pVal, bool used);
|
||||
|
|
|
@ -258,6 +258,8 @@ typedef struct SCreateUserStmt {
|
|||
char userName[TSDB_USER_LEN];
|
||||
char password[TSDB_USET_PASSWORD_LEN];
|
||||
int8_t sysinfo;
|
||||
int8_t createDb;
|
||||
int8_t isImport;
|
||||
int32_t numIpRanges;
|
||||
SIpV4Range* pIpRanges;
|
||||
|
||||
|
@ -311,6 +313,7 @@ typedef struct SShowStmt {
|
|||
SNode* pTbName; // SValueNode
|
||||
EOperatorType tableCondType;
|
||||
EShowKind showKind; // show databases: user/system, show tables: normal/child, others NULL
|
||||
bool withFull; // for show users full;
|
||||
} SShowStmt;
|
||||
|
||||
typedef struct SShowCreateDatabaseStmt {
|
||||
|
|
|
@ -101,7 +101,7 @@ int32_t streamStateCurNext(SStreamState* pState, SStreamStateCur* pCur);
|
|||
int32_t streamStateCurPrev(SStreamState* pState, SStreamStateCur* pCur);
|
||||
|
||||
int32_t streamStatePutParName(SStreamState* pState, int64_t groupId, const char* tbname);
|
||||
int32_t streamStateGetParName(SStreamState* pState, int64_t groupId, void** pVal);
|
||||
int32_t streamStateGetParName(SStreamState* pState, int64_t groupId, void** pVal, bool onlyCache);
|
||||
|
||||
void streamStateReloadInfo(SStreamState* pState, TSKEY ts);
|
||||
|
||||
|
|
|
@ -269,6 +269,16 @@ static const SSysDbTableSchema userUsersSchema[] = {
|
|||
{.name = "allowed_host", .bytes = TSDB_PRIVILEDGE_HOST_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||
};
|
||||
|
||||
static const SSysDbTableSchema userUsersFullSchema[] = {
|
||||
{.name = "name", .bytes = TSDB_USER_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||
{.name = "super", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true},
|
||||
{.name = "enable", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true},
|
||||
{.name = "sysinfo", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true},
|
||||
{.name = "createdb", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true},
|
||||
{.name = "encrypted_pass", .bytes = TSDB_USER_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||
{.name = "allowed_host", .bytes = TSDB_PRIVILEDGE_HOST_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||
};
|
||||
|
||||
GRANTS_SCHEMA;
|
||||
|
||||
static const SSysDbTableSchema vgroupsSchema[] = {
|
||||
|
@ -438,6 +448,7 @@ static const SSysTableMeta infosMeta[] = {
|
|||
{TSDB_INS_TABLE_COLS, userColsSchema, tListLen(userColsSchema), false},
|
||||
// {TSDB_INS_TABLE_TABLE_DISTRIBUTED, userTblDistSchema, tListLen(userTblDistSchema)},
|
||||
{TSDB_INS_TABLE_USERS, userUsersSchema, tListLen(userUsersSchema), true},
|
||||
{TSDB_INS_TABLE_USERS_FULL, userUsersFullSchema, tListLen(userUsersFullSchema), true},
|
||||
{TSDB_INS_TABLE_LICENCES, grantsSchema, tListLen(grantsSchema), true},
|
||||
{TSDB_INS_TABLE_VGROUPS, vgroupsSchema, tListLen(vgroupsSchema), true},
|
||||
{TSDB_INS_TABLE_CONFIGS, configSchema, tListLen(configSchema), false},
|
||||
|
|
|
@ -817,7 +817,6 @@ int32_t tDeserializeSMAlterStbReq(void *buf, int32_t bufLen, SMAlterStbReq *pReq
|
|||
|
||||
for (int32_t i = 0; i < pReq->numOfFields; ++i) {
|
||||
if (pReq->alterType == TSDB_ALTER_TABLE_ADD_COLUMN_WITH_COMPRESS_OPTION) {
|
||||
|
||||
taosArrayDestroy(pReq->pFields);
|
||||
pReq->pFields = taosArrayInit(pReq->numOfFields, sizeof(SFieldWithOptions));
|
||||
SFieldWithOptions field = {0};
|
||||
|
@ -1637,8 +1636,10 @@ int32_t tSerializeSCreateUserReq(void *buf, int32_t bufLen, SCreateUserReq *pReq
|
|||
if (tEncodeU32(&encoder, pReq->pIpRanges[i].ip) < 0) return -1;
|
||||
if (tEncodeU32(&encoder, pReq->pIpRanges[i].mask) < 0) return -1;
|
||||
}
|
||||
|
||||
ENCODESQL();
|
||||
if (tEncodeI8(&encoder, pReq->isImport) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pReq->createDb) < 0) return -1;
|
||||
|
||||
tEndEncode(&encoder);
|
||||
|
||||
int32_t tlen = encoder.pos;
|
||||
|
@ -1664,8 +1665,12 @@ int32_t tDeserializeSCreateUserReq(void *buf, int32_t bufLen, SCreateUserReq *pR
|
|||
if (tDecodeU32(&decoder, &(pReq->pIpRanges[i].ip)) < 0) return -1;
|
||||
if (tDecodeU32(&decoder, &(pReq->pIpRanges[i].mask)) < 0) return -1;
|
||||
}
|
||||
|
||||
DECODESQL();
|
||||
if (!tDecodeIsEnd(&decoder)) {
|
||||
if (tDecodeI8(&decoder, &pReq->createDb) < 0) return -1;
|
||||
if (tDecodeI8(&decoder, &pReq->isImport) < 0) return -1;
|
||||
}
|
||||
|
||||
tEndDecode(&decoder);
|
||||
tDecoderClear(&decoder);
|
||||
return 0;
|
||||
|
@ -4604,6 +4609,7 @@ int32_t tSerializeSRetrieveTableReq(void *buf, int32_t bufLen, SRetrieveTableReq
|
|||
if (tEncodeCStr(&encoder, pReq->filterTb) < 0) return -1;
|
||||
if (tEncodeCStr(&encoder, pReq->user) < 0) return -1;
|
||||
if (tEncodeI64(&encoder, pReq->compactId) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pReq->withFull) < 0) return -1;
|
||||
tEndEncode(&encoder);
|
||||
|
||||
int32_t tlen = encoder.pos;
|
||||
|
@ -4626,7 +4632,9 @@ int32_t tDeserializeSRetrieveTableReq(void *buf, int32_t bufLen, SRetrieveTableR
|
|||
} else {
|
||||
pReq->compactId = -1;
|
||||
}
|
||||
|
||||
if (!tDecodeIsEnd(&decoder)) {
|
||||
if (tDecodeI8(&decoder, (int8_t *)&pReq->withFull) < 0) return -1;
|
||||
}
|
||||
tEndDecode(&decoder);
|
||||
tDecoderClear(&decoder);
|
||||
return 0;
|
||||
|
|
|
@ -75,7 +75,13 @@ int32_t mndBuildInsTableSchema(SMnode *pMnode, const char *dbFName, const char *
|
|||
return -1;
|
||||
}
|
||||
|
||||
STableMetaRsp *pMeta = taosHashGet(pMnode->infosMeta, tbName, strlen(tbName));
|
||||
STableMetaRsp *pMeta = NULL;
|
||||
if (strcmp(tbName, TSDB_INS_TABLE_USERS_FULL) == 0) {
|
||||
pMeta = taosHashGet(pMnode->infosMeta, TSDB_INS_TABLE_USERS_FULL, strlen(tbName));
|
||||
} else {
|
||||
pMeta = taosHashGet(pMnode->infosMeta, tbName, strlen(tbName));
|
||||
}
|
||||
|
||||
if (NULL == pMeta) {
|
||||
mError("invalid information schema table name:%s", tbName);
|
||||
terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST;
|
||||
|
|
|
@ -89,6 +89,8 @@ static int32_t convertToRetrieveType(char *name, int32_t len) {
|
|||
// type = TSDB_MGMT_TABLE_DIST;
|
||||
} else if (strncasecmp(name, TSDB_INS_TABLE_USERS, len) == 0) {
|
||||
type = TSDB_MGMT_TABLE_USER;
|
||||
} else if (strncasecmp(name, TSDB_INS_TABLE_USERS_FULL, len) == 0) {
|
||||
type = TSDB_MGMT_TABLE_USER_FULL;
|
||||
} else if (strncasecmp(name, TSDB_INS_TABLE_LICENCES, len) == 0) {
|
||||
type = TSDB_MGMT_TABLE_GRANTS;
|
||||
} else if (strncasecmp(name, TSDB_INS_TABLE_VGROUPS, len) == 0) {
|
||||
|
@ -276,6 +278,13 @@ static int32_t mndProcessRetrieveSysTableReq(SRpcMsg *pReq) {
|
|||
if (retrieveReq.db[0] && mndCheckShowPrivilege(pMnode, pReq->info.conn.user, pShow->type, retrieveReq.db) != 0) {
|
||||
return -1;
|
||||
}
|
||||
if (pShow->type == TSDB_MGMT_TABLE_USER_FULL) {
|
||||
if(strcmp(pReq->info.conn.user, "root") != 0){
|
||||
mError("The operation is not permitted, user:%s, pShow->type:%d", pReq->info.conn.user, pShow->type);
|
||||
terrno = TSDB_CODE_MND_NO_RIGHTS;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t numOfCols = pShow->pMeta->numOfColumns;
|
||||
|
||||
|
|
|
@ -45,35 +45,55 @@
|
|||
#define ALTER_USER_DEL_PRIVS(_type) ((_type) == TSDB_ALTER_USER_DEL_PRIVILEGES)
|
||||
|
||||
#define ALTER_USER_ALL_PRIV(_priv) (BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALL))
|
||||
#define ALTER_USER_READ_PRIV(_priv) (BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_READ) || BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALL))
|
||||
#define ALTER_USER_WRITE_PRIV(_priv) (BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_WRITE) || BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALL))
|
||||
#define ALTER_USER_ALTER_PRIV(_priv) (BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALTER) || BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALL))
|
||||
#define ALTER_USER_READ_PRIV(_priv) \
|
||||
(BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_READ) || BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALL))
|
||||
#define ALTER_USER_WRITE_PRIV(_priv) \
|
||||
(BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_WRITE) || BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALL))
|
||||
#define ALTER_USER_ALTER_PRIV(_priv) \
|
||||
(BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALTER) || BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALL))
|
||||
#define ALTER_USER_SUBSCRIBE_PRIV(_priv) (BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_SUBSCRIBE))
|
||||
|
||||
#define ALTER_USER_TARGET_DB(_tbname) (0 == (_tbname)[0])
|
||||
#define ALTER_USER_TARGET_TB(_tbname) (0 != (_tbname)[0])
|
||||
|
||||
#define ALTER_USER_ADD_READ_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_READ_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_ADD_WRITE_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_WRITE_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_ADD_ALTER_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_ALTER_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_ADD_ALL_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_ALL_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_ADD_READ_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_READ_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_ADD_WRITE_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_WRITE_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_ADD_ALTER_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_ALTER_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_ADD_ALL_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_ALL_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
|
||||
#define ALTER_USER_ADD_READ_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_READ_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_ADD_WRITE_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_WRITE_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_ADD_ALTER_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_ALTER_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_ADD_ALL_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_ALL_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
|
||||
#define ALTER_USER_ADD_SUBSCRIBE_TOPIC_PRIV(_type, _priv) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_SUBSCRIBE_PRIV(_priv))
|
||||
#define ALTER_USER_DEL_SUBSCRIBE_TOPIC_PRIV(_type, _priv) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_SUBSCRIBE_PRIV(_priv))
|
||||
#define ALTER_USER_ADD_READ_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_READ_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_ADD_WRITE_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_WRITE_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_ADD_ALTER_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_ALTER_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_ADD_ALL_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_ALL_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
|
||||
#define ALTER_USER_ADD_SUBSCRIBE_TOPIC_PRIV(_type, _priv) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_SUBSCRIBE_PRIV(_priv))
|
||||
#define ALTER_USER_DEL_SUBSCRIBE_TOPIC_PRIV(_type, _priv) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_SUBSCRIBE_PRIV(_priv))
|
||||
|
||||
static SIpWhiteList *createDefaultIpWhiteList();
|
||||
SIpWhiteList *createIpWhiteList(void *buf, int32_t len);
|
||||
|
@ -97,6 +117,7 @@ static int32_t mndProcessDropUserReq(SRpcMsg *pReq);
|
|||
static int32_t mndProcessGetUserAuthReq(SRpcMsg *pReq);
|
||||
static int32_t mndProcessGetUserWhiteListReq(SRpcMsg *pReq);
|
||||
static int32_t mndRetrieveUsers(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows);
|
||||
static int32_t mndRetrieveUsersFull(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows);
|
||||
static void mndCancelGetNextUser(SMnode *pMnode, void *pIter);
|
||||
static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows);
|
||||
static void mndCancelGetNextPrivileges(SMnode *pMnode, void *pIter);
|
||||
|
@ -502,6 +523,8 @@ int32_t mndInitUser(SMnode *pMnode) {
|
|||
|
||||
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_USER, mndRetrieveUsers);
|
||||
mndAddShowFreeIterHandle(pMnode, TSDB_MGMT_TABLE_USER, mndCancelGetNextUser);
|
||||
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_USER_FULL, mndRetrieveUsersFull);
|
||||
mndAddShowFreeIterHandle(pMnode, TSDB_MGMT_TABLE_USER_FULL, mndCancelGetNextUser);
|
||||
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_PRIVILEGES, mndRetrievePrivileges);
|
||||
mndAddShowFreeIterHandle(pMnode, TSDB_MGMT_TABLE_PRIVILEGES, mndCancelGetNextPrivileges);
|
||||
return sdbSetTable(pMnode->pSdb, table);
|
||||
|
@ -1440,7 +1463,12 @@ void mndReleaseUser(SMnode *pMnode, SUserObj *pUser) {
|
|||
|
||||
static int32_t mndCreateUser(SMnode *pMnode, char *acct, SCreateUserReq *pCreate, SRpcMsg *pReq) {
|
||||
SUserObj userObj = {0};
|
||||
taosEncryptPass_c((uint8_t *)pCreate->pass, strlen(pCreate->pass), userObj.pass);
|
||||
if (pCreate->isImport != 1) {
|
||||
taosEncryptPass_c((uint8_t *)pCreate->pass, strlen(pCreate->pass), userObj.pass);
|
||||
} else {
|
||||
// mInfo("pCreate->pass:%s", pCreate->pass)
|
||||
strncpy(userObj.pass, pCreate->pass, TSDB_PASSWORD_LEN);
|
||||
}
|
||||
tstrncpy(userObj.user, pCreate->user, TSDB_USER_LEN);
|
||||
tstrncpy(userObj.acct, acct, TSDB_USER_LEN);
|
||||
userObj.createdTime = taosGetTimestampMs();
|
||||
|
@ -1448,7 +1476,7 @@ static int32_t mndCreateUser(SMnode *pMnode, char *acct, SCreateUserReq *pCreate
|
|||
userObj.superUser = 0; // pCreate->superUser;
|
||||
userObj.sysInfo = pCreate->sysInfo;
|
||||
userObj.enable = pCreate->enable;
|
||||
userObj.createdb = 0;
|
||||
userObj.createdb = pCreate->createDb;
|
||||
|
||||
if (pCreate->numIpRanges == 0) {
|
||||
userObj.pIpWhiteList = createDefaultIpWhiteList();
|
||||
|
@ -1534,10 +1562,25 @@ static int32_t mndProcessCreateUserReq(SRpcMsg *pReq) {
|
|||
goto _OVER;
|
||||
}
|
||||
|
||||
mInfo("user:%s, start to create", createReq.user);
|
||||
if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CREATE_USER) != 0) {
|
||||
mInfo("user:%s, start to create, createdb:%d, is_import:%d", createReq.user, createReq.isImport, createReq.createDb);
|
||||
|
||||
#ifndef TD_ENTERPRISE
|
||||
if (createReq.isImport == 1) {
|
||||
goto _OVER;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (createReq.isImport != 1) {
|
||||
if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CREATE_USER) != 0) {
|
||||
goto _OVER;
|
||||
}
|
||||
} else {
|
||||
if (strcmp(pReq->info.conn.user, "root") != 0) {
|
||||
mError("The operation is not permitted, user:%s", pReq->info.conn.user);
|
||||
terrno = TSDB_CODE_MND_NO_RIGHTS;
|
||||
goto _OVER;
|
||||
}
|
||||
}
|
||||
|
||||
if (createReq.user[0] == 0) {
|
||||
terrno = TSDB_CODE_MND_INVALID_USER_FORMAT;
|
||||
|
@ -1549,9 +1592,11 @@ static int32_t mndProcessCreateUserReq(SRpcMsg *pReq) {
|
|||
goto _OVER;
|
||||
}
|
||||
|
||||
if (strlen(createReq.pass) >= TSDB_PASSWORD_LEN) {
|
||||
terrno = TSDB_CODE_PAR_NAME_OR_PASSWD_TOO_LONG;
|
||||
goto _OVER;
|
||||
if (createReq.isImport != 1) {
|
||||
if (strlen(createReq.pass) >= TSDB_PASSWORD_LEN) {
|
||||
terrno = TSDB_CODE_PAR_NAME_OR_PASSWD_TOO_LONG;
|
||||
goto _OVER;
|
||||
}
|
||||
}
|
||||
|
||||
pUser = mndAcquireUser(pMnode, createReq.user);
|
||||
|
@ -1575,10 +1620,16 @@ static int32_t mndProcessCreateUserReq(SRpcMsg *pReq) {
|
|||
if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS;
|
||||
|
||||
char detail[1000] = {0};
|
||||
sprintf(detail, "enable:%d, superUser:%d, sysInfo:%d, password:xxx",
|
||||
createReq.enable, createReq.superUser, createReq.sysInfo);
|
||||
sprintf(detail, "enable:%d, superUser:%d, sysInfo:%d, password:xxx", createReq.enable, createReq.superUser,
|
||||
createReq.sysInfo);
|
||||
char operation[15] = {0};
|
||||
if (createReq.isImport == 1) {
|
||||
strcpy(operation, "importUser");
|
||||
} else {
|
||||
strcpy(operation, "createUser");
|
||||
}
|
||||
|
||||
auditRecord(pReq, pMnode->clusterId, "createUser", "", createReq.user, detail, strlen(detail));
|
||||
auditRecord(pReq, pMnode->clusterId, operation, "", createReq.user, detail, strlen(detail));
|
||||
|
||||
_OVER:
|
||||
if (code != 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) {
|
||||
|
@ -1800,12 +1851,12 @@ static char *mndUserAuditTypeStr(int32_t type) {
|
|||
return "error";
|
||||
}
|
||||
|
||||
static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode *pMnode, SUserObj* pNewUser) {
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
void *pIter = NULL;
|
||||
static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode *pMnode, SUserObj *pNewUser) {
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
void *pIter = NULL;
|
||||
|
||||
if (ALTER_USER_ADD_READ_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) ||
|
||||
ALTER_USER_ADD_ALL_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
ALTER_USER_ADD_ALL_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (strcmp(pAlterReq->objname, "1.*") != 0) {
|
||||
int32_t len = strlen(pAlterReq->objname) + 1;
|
||||
SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname);
|
||||
|
@ -1830,7 +1881,8 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode
|
|||
}
|
||||
}
|
||||
|
||||
if (ALTER_USER_ADD_WRITE_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_ADD_ALL_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (ALTER_USER_ADD_WRITE_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) ||
|
||||
ALTER_USER_ADD_ALL_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (strcmp(pAlterReq->objname, "1.*") != 0) {
|
||||
int32_t len = strlen(pAlterReq->objname) + 1;
|
||||
SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname);
|
||||
|
@ -1855,7 +1907,8 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode
|
|||
}
|
||||
}
|
||||
|
||||
if (ALTER_USER_DEL_READ_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_DEL_ALL_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (ALTER_USER_DEL_READ_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) ||
|
||||
ALTER_USER_DEL_ALL_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (strcmp(pAlterReq->objname, "1.*") != 0) {
|
||||
int32_t len = strlen(pAlterReq->objname) + 1;
|
||||
SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname);
|
||||
|
@ -1870,7 +1923,8 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode
|
|||
}
|
||||
}
|
||||
|
||||
if (ALTER_USER_DEL_WRITE_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_DEL_ALL_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (ALTER_USER_DEL_WRITE_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) ||
|
||||
ALTER_USER_DEL_ALL_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (strcmp(pAlterReq->objname, "1.*") != 0) {
|
||||
int32_t len = strlen(pAlterReq->objname) + 1;
|
||||
SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname);
|
||||
|
@ -1885,9 +1939,9 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode
|
|||
}
|
||||
}
|
||||
|
||||
SHashObj* pReadTbs = pNewUser->readTbs;
|
||||
SHashObj* pWriteTbs = pNewUser->writeTbs;
|
||||
SHashObj* pAlterTbs = pNewUser->alterTbs;
|
||||
SHashObj *pReadTbs = pNewUser->readTbs;
|
||||
SHashObj *pWriteTbs = pNewUser->writeTbs;
|
||||
SHashObj *pAlterTbs = pNewUser->alterTbs;
|
||||
|
||||
#ifdef TD_ENTERPRISE
|
||||
if (pAlterReq->isView) {
|
||||
|
@ -1897,15 +1951,18 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode
|
|||
}
|
||||
#endif
|
||||
|
||||
if (ALTER_USER_ADD_READ_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_ADD_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (ALTER_USER_ADD_READ_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) ||
|
||||
ALTER_USER_ADD_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (mndTablePriviledge(pMnode, pReadTbs, pNewUser->useDbs, pAlterReq, pSdb) != 0) return -1;
|
||||
}
|
||||
|
||||
if (ALTER_USER_ADD_WRITE_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_ADD_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (ALTER_USER_ADD_WRITE_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) ||
|
||||
ALTER_USER_ADD_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (mndTablePriviledge(pMnode, pWriteTbs, pNewUser->useDbs, pAlterReq, pSdb) != 0) return -1;
|
||||
}
|
||||
|
||||
if (ALTER_USER_ADD_ALTER_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_ADD_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (ALTER_USER_ADD_ALTER_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) ||
|
||||
ALTER_USER_ADD_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (mndTablePriviledge(pMnode, pAlterTbs, pNewUser->useDbs, pAlterReq, pSdb) != 0) return -1;
|
||||
}
|
||||
|
||||
|
@ -2016,7 +2073,7 @@ static int32_t mndProcessAlterUserReq(SRpcMsg *pReq) {
|
|||
newUser.sysInfo = alterReq.sysInfo;
|
||||
}
|
||||
|
||||
if(alterReq.alterType == TSDB_ALTER_USER_CREATEDB) {
|
||||
if (alterReq.alterType == TSDB_ALTER_USER_CREATEDB) {
|
||||
newUser.createdb = alterReq.createdb;
|
||||
}
|
||||
|
||||
|
@ -2119,52 +2176,43 @@ static int32_t mndProcessAlterUserReq(SRpcMsg *pReq) {
|
|||
code = mndAlterUser(pMnode, pUser, &newUser, pReq);
|
||||
if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS;
|
||||
|
||||
if(alterReq.alterType == TSDB_ALTER_USER_PASSWD){
|
||||
if (alterReq.alterType == TSDB_ALTER_USER_PASSWD) {
|
||||
char detail[1000] = {0};
|
||||
sprintf(detail, "alterType:%s, enable:%d, superUser:%d, sysInfo:%d, createdb:%d, tabName:%s, password:xxx",
|
||||
mndUserAuditTypeStr(alterReq.alterType), alterReq.enable, alterReq.superUser, alterReq.sysInfo,
|
||||
alterReq.createdb ? 1 : 0, alterReq.tabName);
|
||||
auditRecord(pReq, pMnode->clusterId, "alterUser", "", alterReq.user, detail, strlen(detail));
|
||||
}
|
||||
else if(alterReq.alterType == TSDB_ALTER_USER_SUPERUSER ||
|
||||
alterReq.alterType == TSDB_ALTER_USER_ENABLE ||
|
||||
alterReq.alterType == TSDB_ALTER_USER_SYSINFO ||
|
||||
alterReq.alterType == TSDB_ALTER_USER_CREATEDB){
|
||||
} else if (alterReq.alterType == TSDB_ALTER_USER_SUPERUSER || alterReq.alterType == TSDB_ALTER_USER_ENABLE ||
|
||||
alterReq.alterType == TSDB_ALTER_USER_SYSINFO || alterReq.alterType == TSDB_ALTER_USER_CREATEDB) {
|
||||
auditRecord(pReq, pMnode->clusterId, "alterUser", "", alterReq.user, alterReq.sql, alterReq.sqlLen);
|
||||
}
|
||||
else if(ALTER_USER_ADD_READ_DB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName)||
|
||||
ALTER_USER_ADD_WRITE_DB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName)||
|
||||
ALTER_USER_ADD_ALL_DB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName)||
|
||||
ALTER_USER_ADD_READ_TB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName)||
|
||||
ALTER_USER_ADD_WRITE_TB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName)||
|
||||
ALTER_USER_ADD_ALL_TB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName)){
|
||||
if (strcmp(alterReq.objname, "1.*") != 0){
|
||||
} else if (ALTER_USER_ADD_READ_DB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName) ||
|
||||
ALTER_USER_ADD_WRITE_DB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName) ||
|
||||
ALTER_USER_ADD_ALL_DB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName) ||
|
||||
ALTER_USER_ADD_READ_TB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName) ||
|
||||
ALTER_USER_ADD_WRITE_TB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName) ||
|
||||
ALTER_USER_ADD_ALL_TB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName)) {
|
||||
if (strcmp(alterReq.objname, "1.*") != 0) {
|
||||
SName name = {0};
|
||||
tNameFromString(&name, alterReq.objname, T_NAME_ACCT | T_NAME_DB);
|
||||
auditRecord(pReq, pMnode->clusterId, "GrantPrivileges", name.dbname, alterReq.user,
|
||||
alterReq.sql, alterReq.sqlLen);
|
||||
}else{
|
||||
auditRecord(pReq, pMnode->clusterId, "GrantPrivileges", "", alterReq.user,
|
||||
alterReq.sql, alterReq.sqlLen);
|
||||
auditRecord(pReq, pMnode->clusterId, "GrantPrivileges", name.dbname, alterReq.user, alterReq.sql,
|
||||
alterReq.sqlLen);
|
||||
} else {
|
||||
auditRecord(pReq, pMnode->clusterId, "GrantPrivileges", "", alterReq.user, alterReq.sql, alterReq.sqlLen);
|
||||
}
|
||||
}
|
||||
else if(ALTER_USER_ADD_SUBSCRIBE_TOPIC_PRIV(alterReq.alterType, alterReq.privileges)){
|
||||
auditRecord(pReq, pMnode->clusterId, "GrantPrivileges", alterReq.objname, alterReq.user,
|
||||
alterReq.sql, alterReq.sqlLen);
|
||||
}
|
||||
else if(ALTER_USER_DEL_SUBSCRIBE_TOPIC_PRIV(alterReq.alterType, alterReq.privileges)){
|
||||
auditRecord(pReq, pMnode->clusterId, "RevokePrivileges", alterReq.objname, alterReq.user,
|
||||
alterReq.sql, alterReq.sqlLen);
|
||||
}
|
||||
else{
|
||||
if (strcmp(alterReq.objname, "1.*") != 0){
|
||||
} else if (ALTER_USER_ADD_SUBSCRIBE_TOPIC_PRIV(alterReq.alterType, alterReq.privileges)) {
|
||||
auditRecord(pReq, pMnode->clusterId, "GrantPrivileges", alterReq.objname, alterReq.user, alterReq.sql,
|
||||
alterReq.sqlLen);
|
||||
} else if (ALTER_USER_DEL_SUBSCRIBE_TOPIC_PRIV(alterReq.alterType, alterReq.privileges)) {
|
||||
auditRecord(pReq, pMnode->clusterId, "RevokePrivileges", alterReq.objname, alterReq.user, alterReq.sql,
|
||||
alterReq.sqlLen);
|
||||
} else {
|
||||
if (strcmp(alterReq.objname, "1.*") != 0) {
|
||||
SName name = {0};
|
||||
tNameFromString(&name, alterReq.objname, T_NAME_ACCT | T_NAME_DB);
|
||||
auditRecord(pReq, pMnode->clusterId, "RevokePrivileges", name.dbname, alterReq.user,
|
||||
alterReq.sql, alterReq.sqlLen);
|
||||
}else{
|
||||
auditRecord(pReq, pMnode->clusterId, "RevokePrivileges", "", alterReq.user,
|
||||
alterReq.sql, alterReq.sqlLen);
|
||||
auditRecord(pReq, pMnode->clusterId, "RevokePrivileges", name.dbname, alterReq.user, alterReq.sql,
|
||||
alterReq.sqlLen);
|
||||
} else {
|
||||
auditRecord(pReq, pMnode->clusterId, "RevokePrivileges", "", alterReq.user, alterReq.sql, alterReq.sqlLen);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2364,6 +2412,88 @@ static int32_t mndRetrieveUsers(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl
|
|||
return numOfRows;
|
||||
}
|
||||
|
||||
static int32_t mndRetrieveUsersFull(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) {
|
||||
int32_t numOfRows = 0;
|
||||
#ifdef TD_ENTERPRISE
|
||||
SMnode *pMnode = pReq->info.node;
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
SUserObj *pUser = NULL;
|
||||
int32_t cols = 0;
|
||||
int8_t flag = 0;
|
||||
char *pWrite;
|
||||
int32_t code = 0;
|
||||
|
||||
while (numOfRows < rows) {
|
||||
pShow->pIter = sdbFetch(pSdb, SDB_USER, pShow->pIter, (void **)&pUser);
|
||||
if (pShow->pIter == NULL) break;
|
||||
|
||||
cols = 0;
|
||||
SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
char name[TSDB_USER_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(name, pUser->user, pShow->pMeta->pSchemas[cols].bytes);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)name, false);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
|
||||
cols++;
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)&pUser->superUser, false);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
|
||||
cols++;
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)&pUser->enable, false);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
|
||||
cols++;
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)&pUser->sysInfo, false);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
|
||||
cols++;
|
||||
flag = pUser->createdb ? 1 : 0;
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)&flag, false);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
|
||||
// mInfo("pUser->pass:%s", pUser->pass);
|
||||
cols++;
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
char pass[TSDB_PASSWORD_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(pass, pUser->pass, pShow->pMeta->pSchemas[cols].bytes);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)pass, false);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
|
||||
cols++;
|
||||
|
||||
char *buf = NULL;
|
||||
int32_t tlen = convertIpWhiteListToStr(pUser->pIpWhiteList, &buf);
|
||||
// int32_t tlen = mndFetchIpWhiteList(pUser->pIpWhiteList, &buf);
|
||||
if (tlen != 0) {
|
||||
char *varstr = taosMemoryCalloc(1, VARSTR_HEADER_SIZE + tlen);
|
||||
varDataSetLen(varstr, tlen);
|
||||
memcpy(varDataVal(varstr), buf, tlen);
|
||||
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)varstr, false);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
|
||||
taosMemoryFree(varstr);
|
||||
taosMemoryFree(buf);
|
||||
} else {
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)NULL, true);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
}
|
||||
|
||||
numOfRows++;
|
||||
sdbRelease(pSdb, pUser);
|
||||
}
|
||||
|
||||
pShow->numOfRows += numOfRows;
|
||||
#endif
|
||||
return numOfRows;
|
||||
}
|
||||
|
||||
static void mndCancelGetNextUser(SMnode *pMnode, void *pIter) {
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
sdbCancelFetch(pSdb, pIter);
|
||||
|
@ -2480,11 +2610,14 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock
|
|||
int32_t numOfReadViews = taosHashGetSize(pUser->readViews);
|
||||
int32_t numOfWriteViews = taosHashGetSize(pUser->writeViews);
|
||||
int32_t numOfAlterViews = taosHashGetSize(pUser->alterViews);
|
||||
if (numOfRows + numOfReadDbs + numOfWriteDbs + numOfTopics + numOfReadTbs + numOfWriteTbs + numOfAlterTbs + numOfReadViews + numOfWriteViews + numOfAlterViews >= rows) {
|
||||
if (numOfRows + numOfReadDbs + numOfWriteDbs + numOfTopics + numOfReadTbs + numOfWriteTbs + numOfAlterTbs +
|
||||
numOfReadViews + numOfWriteViews + numOfAlterViews >=
|
||||
rows) {
|
||||
mInfo(
|
||||
"will restore. current num of rows: %d, read dbs %d, write dbs %d, topics %d, read tables %d, write tables "
|
||||
"%d, alter tables %d, read views %d, write views %d, alter views %d",
|
||||
numOfRows, numOfReadDbs, numOfWriteDbs, numOfTopics, numOfReadTbs, numOfWriteTbs, numOfAlterTbs, numOfReadViews, numOfWriteViews, numOfAlterViews);
|
||||
numOfRows, numOfReadDbs, numOfWriteDbs, numOfTopics, numOfReadTbs, numOfWriteTbs, numOfAlterTbs,
|
||||
numOfReadViews, numOfWriteViews, numOfAlterViews);
|
||||
pShow->restore = true;
|
||||
sdbRelease(pSdb, pUser);
|
||||
break;
|
||||
|
@ -2870,7 +3003,6 @@ int32_t mndUserRemoveView(SMnode *pMnode, STrans *pTrans, char *view) {
|
|||
return code;
|
||||
}
|
||||
|
||||
|
||||
int32_t mndUserRemoveTopic(SMnode *pMnode, STrans *pTrans, char *topic) {
|
||||
int32_t code = 0;
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
|
|
|
@ -1157,7 +1157,7 @@ static SSDataBlock* buildStreamPartitionResult(SOperatorInfo* pOperator) {
|
|||
pDest->info.parTbName[0] = 0;
|
||||
if (pInfo->tbnameCalSup.numOfExprs > 0) {
|
||||
void* tbname = NULL;
|
||||
if (pAPI->stateStore.streamStateGetParName(pOperator->pTaskInfo->streamInfo.pState, pParInfo->groupId, &tbname) == 0) {
|
||||
if (pAPI->stateStore.streamStateGetParName(pOperator->pTaskInfo->streamInfo.pState, pParInfo->groupId, &tbname, false) == 0) {
|
||||
memcpy(pDest->info.parTbName, tbname, TSDB_TABLE_NAME_LEN);
|
||||
pAPI->stateStore.streamStateFreeVal(tbname);
|
||||
}
|
||||
|
@ -1178,7 +1178,7 @@ static SSDataBlock* buildStreamPartitionResult(SOperatorInfo* pOperator) {
|
|||
void appendCreateTableRow(void* pState, SExprSupp* pTableSup, SExprSupp* pTagSup, uint64_t groupId,
|
||||
SSDataBlock* pSrcBlock, int32_t rowId, SSDataBlock* pDestBlock, SStateStore* pAPI) {
|
||||
void* pValue = NULL;
|
||||
if (pAPI->streamStateGetParName(pState, groupId, &pValue) != 0) {
|
||||
if (pAPI->streamStateGetParName(pState, groupId, &pValue, true) != 0) {
|
||||
SSDataBlock* pTmpBlock = blockCopyOneRow(pSrcBlock, rowId);
|
||||
memset(pTmpBlock->info.parTbName, 0, TSDB_TABLE_NAME_LEN);
|
||||
pTmpBlock->info.id.groupId = groupId;
|
||||
|
|
|
@ -1892,7 +1892,7 @@ static int32_t generatePartitionDelResBlock(SStreamScanInfo* pInfo, SSDataBlock*
|
|||
groupId = calGroupIdByData(&pInfo->partitionSup, pInfo->pPartScalarSup, pPreRes, preJ);
|
||||
if (pInfo->pPartTbnameSup) {
|
||||
void* parTbname = NULL;
|
||||
int32_t code = pInfo->stateStore.streamStateGetParName(pInfo->pStreamScanOp->pTaskInfo->streamInfo.pState, groupId, &parTbname);
|
||||
int32_t code = pInfo->stateStore.streamStateGetParName(pInfo->pStreamScanOp->pTaskInfo->streamInfo.pState, groupId, &parTbname, false);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
calBlockTbName(pInfo, pPreRes, preJ);
|
||||
memcpy(varDataVal(tbname), pPreRes->info.parTbName, strlen(pPreRes->info.parTbName));
|
||||
|
@ -1938,7 +1938,7 @@ static int32_t generateDeleteResultBlockImpl(SStreamScanInfo* pInfo, SSDataBlock
|
|||
}
|
||||
if (pInfo->tbnameCalSup.pExprInfo) {
|
||||
void* parTbname = NULL;
|
||||
int32_t code = pInfo->stateStore.streamStateGetParName(pInfo->pStreamScanOp->pTaskInfo->streamInfo.pState, groupId, &parTbname);
|
||||
int32_t code = pInfo->stateStore.streamStateGetParName(pInfo->pStreamScanOp->pTaskInfo->streamInfo.pState, groupId, &parTbname, false);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
SSDataBlock* pPreRes = readPreVersionData(pInfo->pTableScanOp, srcUid, srcStartTsCol[i], srcStartTsCol[i], ver);
|
||||
printDataBlock(pPreRes, "pre res", GET_TASKID(pInfo->pStreamScanOp->pTaskInfo));
|
||||
|
@ -4961,6 +4961,7 @@ static SSDataBlock* buildSysDbTableCount(SOperatorInfo* pOperator, STableCountSc
|
|||
|
||||
size_t infodbTableNum;
|
||||
getInfosDbMeta(NULL, &infodbTableNum);
|
||||
infodbTableNum -= 1;
|
||||
size_t perfdbTableNum;
|
||||
getPerfDbMeta(NULL, &perfdbTableNum);
|
||||
|
||||
|
|
|
@ -707,7 +707,7 @@ static void buildDeleteRange(SOperatorInfo* pOp, TSKEY start, TSKEY end, uint64_
|
|||
SColumnInfoData* pTableCol = taosArrayGet(pBlock->pDataBlock, TABLE_NAME_COLUMN_INDEX);
|
||||
|
||||
void* tbname = NULL;
|
||||
pAPI->stateStore.streamStateGetParName(pOp->pTaskInfo->streamInfo.pState, groupId, &tbname);
|
||||
pAPI->stateStore.streamStateGetParName(pOp->pTaskInfo->streamInfo.pState, groupId, &tbname, false);
|
||||
if (tbname == NULL) {
|
||||
colDataSetNULL(pTableCol, pBlock->info.rows);
|
||||
} else {
|
||||
|
|
|
@ -376,7 +376,7 @@ static void doBuildDeleteResult(SStreamIntervalOperatorInfo* pInfo, SArray* pWin
|
|||
for (int32_t i = *index; i < size; i++) {
|
||||
SWinKey* pWin = taosArrayGet(pWins, i);
|
||||
void* tbname = NULL;
|
||||
pInfo->stateStore.streamStateGetParName(pInfo->pState, pWin->groupId, &tbname);
|
||||
pInfo->stateStore.streamStateGetParName(pInfo->pState, pWin->groupId, &tbname, false);
|
||||
if (tbname == NULL) {
|
||||
appendDataToSpecialBlock(pBlock, &pWin->ts, &pWin->ts, &uid, &pWin->groupId, NULL);
|
||||
} else {
|
||||
|
@ -750,7 +750,7 @@ int32_t buildDataBlockFromGroupRes(SOperatorInfo* pOperator, void* pState, SSDat
|
|||
if (pBlock->info.id.groupId == 0) {
|
||||
pBlock->info.id.groupId = groupId;
|
||||
void* tbname = NULL;
|
||||
if (pAPI->stateStore.streamStateGetParName(pTaskInfo->streamInfo.pState, pBlock->info.id.groupId, &tbname) < 0) {
|
||||
if (pAPI->stateStore.streamStateGetParName(pTaskInfo->streamInfo.pState, pBlock->info.id.groupId, &tbname, false) < 0) {
|
||||
pBlock->info.parTbName[0] = 0;
|
||||
} else {
|
||||
memcpy(pBlock->info.parTbName, tbname, TSDB_TABLE_NAME_LEN);
|
||||
|
@ -2276,7 +2276,7 @@ void doBuildDeleteDataBlock(SOperatorInfo* pOp, SSHashObj* pStDeleted, SSDataBlo
|
|||
SColumnInfoData* pTableCol = taosArrayGet(pBlock->pDataBlock, TABLE_NAME_COLUMN_INDEX);
|
||||
|
||||
void* tbname = NULL;
|
||||
pAPI->stateStore.streamStateGetParName(pOp->pTaskInfo->streamInfo.pState, res->groupId, &tbname);
|
||||
pAPI->stateStore.streamStateGetParName(pOp->pTaskInfo->streamInfo.pState, res->groupId, &tbname, false);
|
||||
if (tbname == NULL) {
|
||||
colDataSetNULL(pTableCol, pBlock->info.rows);
|
||||
} else {
|
||||
|
@ -2446,7 +2446,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, void* pState, SSDa
|
|||
|
||||
void* tbname = NULL;
|
||||
if (pAPI->stateStore.streamStateGetParName((void*)pTaskInfo->streamInfo.pState, pBlock->info.id.groupId,
|
||||
&tbname) < 0) {
|
||||
&tbname, false) < 0) {
|
||||
pBlock->info.parTbName[0] = 0;
|
||||
} else {
|
||||
memcpy(pBlock->info.parTbName, tbname, TSDB_TABLE_NAME_LEN);
|
||||
|
|
|
@ -1090,6 +1090,10 @@ int32_t buildDbTableInfoBlock(bool sysInfo, const SSDataBlock* p, const SSysTabl
|
|||
continue;
|
||||
}
|
||||
|
||||
if(strcmp(pm->name, TSDB_INS_TABLE_USERS_FULL) == 0){
|
||||
continue;
|
||||
}
|
||||
|
||||
SColumnInfoData* pColInfoData = taosArrayGet(p->pDataBlock, 0);
|
||||
|
||||
STR_TO_VARSTR(n, pm->name);
|
||||
|
|
|
@ -236,6 +236,7 @@ const char* nodesNodeName(ENodeType type) {
|
|||
case QUERY_NODE_SHOW_TAGS_STMT:
|
||||
return "ShowTagsStmt";
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
return "ShowUsersStmt";
|
||||
case QUERY_NODE_SHOW_LICENCES_STMT:
|
||||
return "ShowGrantsStmt";
|
||||
|
@ -7655,6 +7656,7 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
|
|||
case QUERY_NODE_SHOW_TAGS_STMT:
|
||||
return showTagsStmtToJson(pObj, pJson);
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
return showUsersStmtToJson(pObj, pJson);
|
||||
case QUERY_NODE_SHOW_VGROUPS_STMT:
|
||||
return showVgroupsStmtToJson(pObj, pJson);
|
||||
|
@ -8004,6 +8006,7 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
|
|||
case QUERY_NODE_SHOW_TAGS_STMT:
|
||||
return jsonToShowTagsStmt(pJson, pObj);
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
return jsonToShowUsersStmt(pJson, pObj);
|
||||
case QUERY_NODE_SHOW_VGROUPS_STMT:
|
||||
return jsonToShowVgroupsStmt(pJson, pObj);
|
||||
|
|
|
@ -524,6 +524,7 @@ SNode* nodesMakeNode(ENodeType type) {
|
|||
case QUERY_NODE_SHOW_STREAMS_STMT:
|
||||
case QUERY_NODE_SHOW_TABLES_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
case QUERY_NODE_SHOW_LICENCES_STMT:
|
||||
case QUERY_NODE_SHOW_VGROUPS_STMT:
|
||||
case QUERY_NODE_SHOW_TOPICS_STMT:
|
||||
|
@ -1217,6 +1218,7 @@ void nodesDestroyNode(SNode* pNode) {
|
|||
case QUERY_NODE_SHOW_STREAMS_STMT:
|
||||
case QUERY_NODE_SHOW_TABLES_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
case QUERY_NODE_SHOW_LICENCES_STMT:
|
||||
case QUERY_NODE_SHOW_VGROUPS_STMT:
|
||||
case QUERY_NODE_SHOW_TOPICS_STMT:
|
||||
|
|
|
@ -222,6 +222,7 @@ SNode* setAlterSuperTableType(SNode* pStmt);
|
|||
SNode* createUseDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName);
|
||||
SNode* setShowKind(SAstCreateContext* pCxt, SNode* pStmt, EShowKind showKind);
|
||||
SNode* createShowStmt(SAstCreateContext* pCxt, ENodeType type);
|
||||
SNode* createShowStmtWithFull(SAstCreateContext* pCxt, ENodeType type);
|
||||
SNode* createShowStmtWithCond(SAstCreateContext* pCxt, ENodeType type, SNode* pDbName, SNode* pTbName,
|
||||
EOperatorType tableCondType);
|
||||
SNode* createShowTablesStmt(SAstCreateContext* pCxt, SShowTablesOption option, SNode* pTbName,
|
||||
|
@ -234,7 +235,8 @@ SNode* createShowTableDistributedStmt(SAstCreateContext* pCxt, SNode* pRealTable
|
|||
SNode* createShowDnodeVariablesStmt(SAstCreateContext* pCxt, SNode* pDnodeId, SNode* pLikePattern);
|
||||
SNode* createShowVnodesStmt(SAstCreateContext* pCxt, SNode* pDnodeId, SNode* pDnodeEndpoint);
|
||||
SNode* createShowTableTagsStmt(SAstCreateContext* pCxt, SNode* pTbName, SNode* pDbName, SNodeList* pTags);
|
||||
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo);
|
||||
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo,
|
||||
int8_t createdb, int8_t is_import);
|
||||
SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pStmt, SNodeList* pIpRangesNodeList);
|
||||
SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t alterType, void* pAlterInfo);
|
||||
SNode* createDropUserStmt(SAstCreateContext* pCxt, SToken* pUserName);
|
||||
|
|
|
@ -95,10 +95,19 @@ white_list(A) ::= HOST ip_range_list(B).
|
|||
white_list_opt(A) ::= . { A = NULL; }
|
||||
white_list_opt(A) ::= white_list(B). { A = B; }
|
||||
|
||||
%type is_import_opt { int8_t }
|
||||
%destructor is_import_opt { }
|
||||
is_import_opt(A) ::= . { A = 0; }
|
||||
is_import_opt(A) ::= IS_IMPORT NK_INTEGER(B). { A = taosStr2Int8(B.z, NULL, 10); }
|
||||
|
||||
%type is_createdb_opt { int8_t }
|
||||
%destructor is_createdb_opt { }
|
||||
is_createdb_opt(A) ::= . { A = 0; }
|
||||
is_createdb_opt(A) ::= CREATEDB NK_INTEGER(B). { A = taosStr2Int8(B.z, NULL, 10); }
|
||||
/************************************************ create/alter/drop user **********************************************/
|
||||
cmd ::= CREATE USER user_name(A) PASS NK_STRING(B) sysinfo_opt(C)
|
||||
cmd ::= CREATE USER user_name(A) PASS NK_STRING(B) sysinfo_opt(C) is_createdb_opt(F) is_import_opt(E)
|
||||
white_list_opt(D). {
|
||||
pCxt->pRootNode = createCreateUserStmt(pCxt, &A, &B, C);
|
||||
pCxt->pRootNode = createCreateUserStmt(pCxt, &A, &B, C, E, F);
|
||||
pCxt->pRootNode = addCreateUserStmtWhiteList(pCxt, pCxt->pRootNode, D);
|
||||
}
|
||||
cmd ::= ALTER USER user_name(A) PASS NK_STRING(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_PASSWD, &B); }
|
||||
|
@ -494,6 +503,7 @@ col_name(A) ::= column_name(B).
|
|||
/************************************************ show ****************************************************************/
|
||||
cmd ::= SHOW DNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DNODES_STMT); }
|
||||
cmd ::= SHOW USERS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USERS_STMT); }
|
||||
cmd ::= SHOW USERS FULL. { pCxt->pRootNode = createShowStmtWithFull(pCxt, QUERY_NODE_SHOW_USERS_FULL_STMT); }
|
||||
cmd ::= SHOW USER PRIVILEGES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USER_PRIVILEGES_STMT); }
|
||||
cmd ::= SHOW db_kind_opt(A) DATABASES. {
|
||||
pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DATABASES_STMT);
|
||||
|
|
|
@ -2010,6 +2010,15 @@ SNode* createShowStmt(SAstCreateContext* pCxt, ENodeType type) {
|
|||
CHECK_PARSER_STATUS(pCxt);
|
||||
SShowStmt* pStmt = (SShowStmt*)nodesMakeNode(type);
|
||||
CHECK_OUT_OF_MEM(pStmt);
|
||||
pStmt->withFull = false;
|
||||
return (SNode*)pStmt;
|
||||
}
|
||||
|
||||
SNode* createShowStmtWithFull(SAstCreateContext* pCxt, ENodeType type) {
|
||||
CHECK_PARSER_STATUS(pCxt);
|
||||
SShowStmt* pStmt = (SShowStmt*)nodesMakeNode(type);
|
||||
CHECK_OUT_OF_MEM(pStmt);
|
||||
pStmt->withFull = true;
|
||||
return (SNode*)pStmt;
|
||||
}
|
||||
|
||||
|
@ -2250,7 +2259,8 @@ SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pCreateUserStm
|
|||
return pCreateUserStmt;
|
||||
}
|
||||
|
||||
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo) {
|
||||
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo,
|
||||
int8_t createDb, int8_t is_import) {
|
||||
CHECK_PARSER_STATUS(pCxt);
|
||||
char password[TSDB_USET_PASSWORD_LEN + 3] = {0};
|
||||
if (!checkUserName(pCxt, pUserName) || !checkPassword(pCxt, pPassword, password)) {
|
||||
|
@ -2261,6 +2271,8 @@ SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const ST
|
|||
COPY_STRING_FORM_ID_TOKEN(pStmt->userName, pUserName);
|
||||
strcpy(pStmt->password, password);
|
||||
pStmt->sysinfo = sysinfo;
|
||||
pStmt->createDb = createDb;
|
||||
pStmt->isImport = is_import;
|
||||
return (SNode*)pStmt;
|
||||
}
|
||||
|
||||
|
|
|
@ -557,6 +557,11 @@ static int32_t collectMetaKeyFromShowUsers(SCollectMetaKeyCxt* pCxt, SShowStmt*
|
|||
pCxt->pMetaCache);
|
||||
}
|
||||
|
||||
static int32_t collectMetaKeyFromShowUsersFull(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
|
||||
return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_USERS_FULL,
|
||||
pCxt->pMetaCache);
|
||||
}
|
||||
|
||||
static int32_t collectMetaKeyFromShowLicence(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
|
||||
return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_LICENCES,
|
||||
pCxt->pMetaCache);
|
||||
|
@ -906,6 +911,8 @@ static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt) {
|
|||
return collectMetaKeyFromShowStableTags(pCxt, (SShowTableTagsStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
return collectMetaKeyFromShowUsers(pCxt, (SShowStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
return collectMetaKeyFromShowUsersFull(pCxt, (SShowStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_LICENCES_STMT:
|
||||
return collectMetaKeyFromShowLicence(pCxt, (SShowStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_VGROUPS_STMT:
|
||||
|
|
|
@ -351,6 +351,7 @@ static int32_t authQuery(SAuthCxt* pCxt, SNode* pStmt) {
|
|||
case QUERY_NODE_SHOW_VNODES_STMT:
|
||||
case QUERY_NODE_SHOW_SCORES_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
|
||||
case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
|
||||
case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
|
||||
|
|
|
@ -334,6 +334,7 @@ static SKeyword keywordTable[] = {
|
|||
{"COMPRESS", TK_COMPRESS},
|
||||
{"LEVEL", TK_LEVEL},
|
||||
{"ARBGROUPS", TK_ARBGROUPS},
|
||||
{"IS_IMPORT", TK_IS_IMPORT},
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
|
|
@ -197,6 +197,13 @@ static const SSysTableShowAdapter sysTableShowAdapter[] = {
|
|||
.numOfShowCols = 1,
|
||||
.pShowCols = {"*"}
|
||||
},
|
||||
{
|
||||
.showType = QUERY_NODE_SHOW_USERS_FULL_STMT,
|
||||
.pDbName = TSDB_INFORMATION_SCHEMA_DB,
|
||||
.pTableName = TSDB_INS_TABLE_USERS_FULL,
|
||||
.numOfShowCols = 1,
|
||||
.pShowCols = {"*"}
|
||||
},
|
||||
{
|
||||
.showType = QUERY_NODE_SHOW_LICENCES_STMT,
|
||||
.pDbName = TSDB_INFORMATION_SCHEMA_DB,
|
||||
|
@ -8518,6 +8525,8 @@ static int32_t translateCreateUser(STranslateContext* pCxt, SCreateUserStmt* pSt
|
|||
createReq.sysInfo = pStmt->sysinfo;
|
||||
createReq.enable = 1;
|
||||
strcpy(createReq.pass, pStmt->password);
|
||||
createReq.isImport = pStmt->isImport;
|
||||
createReq.createDb = pStmt->createDb;
|
||||
|
||||
createReq.numIpRanges = pStmt->numIpRanges;
|
||||
if (pStmt->numIpRanges > 0) {
|
||||
|
@ -13594,6 +13603,7 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) {
|
|||
case QUERY_NODE_SHOW_TABLES_STMT:
|
||||
case QUERY_NODE_SHOW_STABLES_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
case QUERY_NODE_SHOW_DNODES_STMT:
|
||||
case QUERY_NODE_SHOW_MNODES_STMT:
|
||||
case QUERY_NODE_SHOW_MODULES_STMT:
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1096,7 +1096,9 @@ _end:
|
|||
int32_t streamStatePutParName(SStreamState* pState, int64_t groupId, const char tbname[TSDB_TABLE_NAME_LEN]) {
|
||||
#ifdef USE_ROCKSDB
|
||||
if (tSimpleHashGet(pState->parNameMap, &groupId, sizeof(int64_t)) == NULL) {
|
||||
tSimpleHashPut(pState->parNameMap, &groupId, sizeof(int64_t), tbname, TSDB_TABLE_NAME_LEN);
|
||||
if (tSimpleHashGetSize(pState->parNameMap) < MAX_TABLE_NAME_NUM) {
|
||||
tSimpleHashPut(pState->parNameMap, &groupId, sizeof(int64_t), tbname, TSDB_TABLE_NAME_LEN);
|
||||
}
|
||||
streamStatePutParName_rocksdb(pState, groupId, tbname);
|
||||
}
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
@ -1106,12 +1108,15 @@ int32_t streamStatePutParName(SStreamState* pState, int64_t groupId, const char
|
|||
#endif
|
||||
}
|
||||
|
||||
int32_t streamStateGetParName(SStreamState* pState, int64_t groupId, void** pVal) {
|
||||
int32_t streamStateGetParName(SStreamState* pState, int64_t groupId, void** pVal, bool onlyCache) {
|
||||
#ifdef USE_ROCKSDB
|
||||
void* pStr = tSimpleHashGet(pState->parNameMap, &groupId, sizeof(int64_t));
|
||||
if (!pStr) {
|
||||
if (onlyCache && tSimpleHashGetSize(pState->parNameMap) < MAX_TABLE_NAME_NUM) {
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
int32_t code = streamStateGetParName_rocksdb(pState, groupId, pVal);
|
||||
if (code == TSDB_CODE_SUCCESS) {
|
||||
if (code == TSDB_CODE_SUCCESS && tSimpleHashGetSize(pState->parNameMap) < MAX_TABLE_NAME_NUM) {
|
||||
tSimpleHashPut(pState->parNameMap, &groupId, sizeof(int64_t), *pVal, TSDB_TABLE_NAME_LEN);
|
||||
}
|
||||
return code;
|
||||
|
|
|
@ -222,7 +222,7 @@ class TDTestCase:
|
|||
|
||||
tdSql.query("select * from information_schema.ins_columns where db_name ='information_schema'")
|
||||
tdLog.info(len(tdSql.queryResult))
|
||||
tdSql.checkEqual(True, len(tdSql.queryResult) in range(261, 262))
|
||||
tdSql.checkEqual(True, len(tdSql.queryResult) in range(261, 269))
|
||||
|
||||
tdSql.query("select * from information_schema.ins_columns where db_name ='performance_schema'")
|
||||
tdSql.checkEqual(54, len(tdSql.queryResult))
|
||||
|
|
Loading…
Reference in New Issue